require 'spec_helper' describe Zertico::Service do let(:controller) { UserController.new } let(:admin_controller) { Admin::UserController.new } let(:object) { Object.new } context 'should find the interface class' do it 'on a non namespaced controller' do controller.send(:interface_class).should == User end it 'on a namespaced controller' do admin_controller.send(:interface_class).should == User end end context '#all' do before :each do controller.stub_chain(:interface_name, :pluralize, :to_sym).and_return(:users) controller.stub_chain(:interface_class, :all).and_return([]) end it 'should return a collection of objects' do controller.all.should == { :users => [] } end end context '#build' do before :each do controller.stub_chain(:interface_name, :to_sym).and_return(:user) controller.stub_chain(:interface_class, :new).and_return(object) end it 'should return a new object' do controller.build.should == { :user => object } end end context '#find' do before :each do controller.stub_chain(:interface_name, :to_sym).and_return(:user) controller.stub_chain(:interface_class, :find).with(1).and_return(object) end it 'should return the specified object' do controller.find(1).should == { :user => object } end end context '#generate' do before :each do controller.stub_chain(:interface_name, :to_sym).and_return(:user) controller.stub_chain(:interface_class, :create).with({}).and_return(object) end it 'should return the created object' do controller.generate({}).should == { :user => object } end end context '#modify' do before :each do controller.stub(:find).with(1).and_return({ :user => object }) object.stub(:update_attributes).with({}).and_return(true) controller.stub_chain(:interface_name, :to_sym).and_return(:user) end it 'should return the updated object' do controller.modify(1, {}).should == { :user => object } end end context '#delete' do before :each do controller.stub(:find).with(1).and_return({ :user => object }) object.stub(:destroy).and_return(true) controller.stub_chain(:interface_name, :to_sym).and_return(:user) end it 'should return the destroyed object' do controller.delete(1).should == { :user => object } end end end