test/canard/ability_test.rb in canard-0.3.7 vs test/canard/ability_test.rb in canard-0.4.0.pre

- old
+ new

@@ -1,119 +1,119 @@ require 'test_helper' describe Ability do - + before do Canard::Abilities.default_path = File.expand_path('../../dummy/app/abilities', __FILE__) # reload abilities because the reloader will have removed them after the railtie ran Canard.find_abilities end - + describe "new" do - + describe "with a user" do - + let(:user) { User.new } subject { Ability.new(user) } - + it "assign the user to Ability#user" do subject.user.must_equal user end end - + describe "with a model that references a user" do - + let(:user) { User.create } let(:member) { Member.new(:user => user) } - + subject { Ability.new(member) } - + it "assign the user to Ability#user" do subject.user.must_equal user end end - + describe "with a user that has author role" do - + let(:user) { User.create(:roles => [:author]) } let(:member) { Member.create(:user => user) } let(:other_member) { Member.new(:user => User.create) } subject { Ability.new(user) } - + it "has all the abilities of the base class" do subject.can?(:edit, member).must_equal true subject.can?(:update, member).must_equal true subject.can?(:edit, other_member).wont_equal true subject.can?(:update, other_member).wont_equal true end - + it "has all the abilities of an author" do subject.can?(:new, Post).must_equal true subject.can?(:create, Post).must_equal true subject.can?(:edit, Post).must_equal true subject.can?(:update, Post).must_equal true subject.can?(:show, Post).must_equal true subject.can?(:index, Post).must_equal true end - + it "has no admin abilities" do subject.cannot?(:destroy, Post).must_equal true end - + end describe "with a user that has admin and author roles" do - + let(:user) { User.create(:roles => [:author, :admin]) } let(:member) { Member.create(:user => user) } let(:other_user) { User.create } let(:other_member) { Member.new(:user => other_user) } subject { Ability.new(user) } - + it "has all the abilities of the base class" do subject.can?(:edit, member).must_equal true subject.can?(:update, member).must_equal true subject.cannot?(:edit, other_member).must_equal true subject.cannot?(:update, other_member).must_equal true end - + it "has all the abilities of an author" do subject.can?(:new, Post).must_equal true end - + it "has the abilities of an admin" do subject.can?(:manage, Post).must_equal true subject.can?(:manage, other_user).must_equal true subject.can?(:destroy, other_user).must_equal true subject.cannot?(:destroy, user).must_equal true end - + end - + describe "with no user" do - + subject { Ability.new } - + it "applies the guest abilities" do subject.can?(:index, Post) subject.can?(:show, Post) - + subject.cannot?(:create, Post) subject.cannot?(:update, Post) subject.cannot?(:destroy, Post) - + subject.cannot?(:show, User) subject.cannot?(:show, Member) end end - + describe "with an instance of an anonymous class that has author role" do - + let(:klass) do Class.new do extend Canard::UserModel attr_accessor :roles_mask acts_as_user :roles => [:author, :admin] @@ -121,33 +121,49 @@ end end let(:instance) { klass.new(:author) } describe "for base class abilities" do - + it "does nothing" do proc { Ability.new(instance) }.must_be_silent end end - + describe "for assigned roles" do - + subject { Ability.new(instance) } - + it "has all the abilities of an author" do subject.can?(:new, Post).must_equal true subject.can?(:create, Post).must_equal true subject.can?(:edit, Post).must_equal true subject.can?(:update, Post).must_equal true subject.can?(:show, Post).must_equal true subject.can?(:index, Post).must_equal true end - + it "has no admin abilities" do subject.cannot?(:destroy, Post).must_equal true end end - + end end - + + describe "ability_key" do + + it "returns a snake case version of the string" do + class_name = 'CamelCaseString' + key = :camel_case_string + + Ability.new.send(:ability_key, class_name).must_equal key + end + + it "prepends namespaces to the class name" do + class_name = 'Namespace::CamelCaseString' + key = :namespace_camel_case_string + + Ability.new.send(:ability_key, class_name).must_equal key + end + end end