require_relative "../spec_helper" require 'hippo/user' class GodUser def can_read?(*args) end def can_write?(*args) true end def can_delete?(*args) true end end class NullAuthProvider def current_user @user ||= GodUser.new end end describe "ControllerBase" do # < Hippo::TestCase include TestingModels around(:each) do |example| with_testing_models do example.run end end it "can retrieve" do 1.upto(10){|i| TestModel.create!(id: i, name:'test') } controller = Hippo::API::ControllerBase.new(TestModel, Hippo::API::AuthenticationProvider.new({}), {id: 1}) expect(controller.send(:perform_retrieval)) .to match( success: true, message: "Retrieve succeeded", data: a_hash_including({"id"=>1, "bt_id"=>nil, "name"=>"test", "number"=>nil}) ) end it "can make a single update" do person = TestModel.create!(id: 21, name:'Joe') controller = Hippo::API::ControllerBase.new(TestModel, NullAuthProvider.new, {id: person.id}, {name:'Bob'}) expect(controller.send(:perform_single_update)) .to match( :success=>true, :message=>"Update succeeded", data: a_hash_including("id"=>person.id, "bt_id"=>nil, "name"=>"Bob", "number"=>nil) ) expect(person.reload.name).to eq('Bob') end it 'can update multiple records' do TestModel.create!(id: 1, name:'Joe') TestModel.create!(id: 2, name:'Bob') def TestModel.access_limits_for_query(query, user, params) query.where(name:'Joe') end controller = Hippo::API::ControllerBase.new(TestModel, NullAuthProvider.new, {}, [{'id'=>1}, {'id'=>2}]) expect(controller.send(:perform_multiple_updates)) .to match(success: true, message: "Update succeeded", data: array_including( a_hash_including("id"=>1, "bt_id"=>nil, "name"=>"Joe", "number"=>nil) ) ) end it 'can destroy a single record' do TestModel.create!(id: 1, name:'Joe') controller = Hippo::API::ControllerBase.new(TestModel, NullAuthProvider.new, {id: 1}, {}) expect(controller.send(:perform_single_destroy)) .to eq(success: true, message: "Destroy succeeded", data: []) expect(TestModel.where(id: 1).first).to be_nil end it 'can destroy a multiple records' do TestModel.create!(id: 1, name:'Joe') TestModel.create!(id: 2, name:'Bob') controller = Hippo::API::ControllerBase.new(TestModel, NullAuthProvider.new, {}, [{'id'=>1}, {'id'=>2}]) expect( controller.send(:perform_multiple_destroy)) .to match(success: true, message: "Destroy succeeded", data: []) expect(TestModel.all.to_a).to be_empty end end