PageRenderTime 27ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/test/roles_test.rb

https://github.com/jej/acl9
Ruby | 293 lines | 219 code | 73 blank | 1 comment | 14 complexity | 3fc6633dfece2b626c97c519253739f6 MD5 | raw file
  1. require 'test_helper'
  2. require File.join(File.dirname(__FILE__), '..', 'lib', 'acl9')
  3. require 'support/models'
  4. #Logger = ActiveRecord::Base.logger
  5. load 'support/schema.rb'
  6. class RolesTest < Test::Unit::TestCase
  7. before do
  8. Role.destroy_all
  9. [User, Foo, Bar].each { |model| model.delete_all }
  10. @user = User.create!
  11. @user2 = User.create!
  12. @foo = Foo.create!
  13. @bar = Bar.create!
  14. end
  15. it "should not have any roles by default" do
  16. %w(user manager admin owner).each do |role|
  17. @user.has_role?(role).should be_false
  18. end
  19. end
  20. it "#has_role! without object (global role)" do
  21. lambda do
  22. @user.has_role!('admin')
  23. end.should change { Role.count }.from(0).to(1)
  24. @user.has_role?('admin').should be_true
  25. @user2.has_role?('admin').should be_false
  26. end
  27. it "should not count global role as object role" do
  28. @user.has_role!('admin')
  29. [@foo, @bar, Foo, Bar, @user].each do |obj|
  30. @user.has_role?('admin', obj).should be_false
  31. @user.has_roles_for?(obj).should be_false
  32. @user.roles_for(obj).should == []
  33. end
  34. [@foo, @bar].each do |obj|
  35. obj.accepts_role?('admin', @user).should be_false
  36. end
  37. end
  38. it "#has_role! with object (object role)" do
  39. @user.has_role!('manager', @foo)
  40. @user.has_role?('manager', @foo).should be_true
  41. @user.has_roles_for?(@foo).should be_true
  42. @user.has_role_for?(@foo).should be_true
  43. roles = @user.roles_for(@foo)
  44. roles.should == @foo.accepted_roles_by(@user)
  45. roles.size.should == 1
  46. roles.first.name.should == "manager"
  47. @user.has_role?('manager', @bar).should be_false
  48. @user2.has_role?('manager', @foo).should be_false
  49. @foo.accepts_role?('manager', @user).should be_true
  50. @foo.accepts_role_by?(@user).should be_true
  51. @foo.accepts_roles_by?(@user).should be_true
  52. end
  53. it "shoud count object role also as global role" do
  54. @user.has_role!('manager', @foo)
  55. @user.has_role?('manager').should be_true
  56. end
  57. it "should not count object role as object class role" do
  58. @user.has_role!('manager', @foo)
  59. @user.has_role?('manager', Foo).should be_false
  60. end
  61. it "#has_role! with class" do
  62. @user.has_role!('user', Bar)
  63. @user.has_role?('user', Bar).should be_true
  64. @user.has_roles_for?(Bar).should be_true
  65. @user.has_role_for?(Bar).should be_true
  66. roles = @user.roles_for(Bar)
  67. roles.size.should == 1
  68. roles.first.name.should == "user"
  69. @user.has_role?('user', Foo).should be_false
  70. @user2.has_role?('user', Bar).should be_false
  71. end
  72. it "should not count class role as object role" do
  73. @user.has_role!('manager', Foo)
  74. @user.has_role?('manager', @foo).should be_false
  75. end
  76. it "should be able to have several roles on the same object" do
  77. @user.has_role!('manager', @foo)
  78. @user.has_role!('user', @foo)
  79. @user.has_role!('admin', @foo)
  80. @user.has_role!('owner', @bar)
  81. @user.roles_for(@foo) .map(&:name).sort.should == %w(admin manager user)
  82. @foo.accepted_roles_by(@user).map(&:name).sort.should == %w(admin manager user)
  83. end
  84. it "should reuse existing roles" do
  85. @user.has_role!('owner', @bar)
  86. @user2.has_role!('owner', @bar)
  87. @user.acl9_roles.should == @user2.acl9_roles
  88. end
  89. it "#has_no_role! should unassign a global role from user" do
  90. set_some_roles
  91. lambda do
  92. @user.has_no_role!('3133t')
  93. end.should change { @user.acl9_roles.count }.by(-1)
  94. @user.has_role?('3133t').should be_false
  95. end
  96. it "#has_no_role! should unassign an object role from user" do
  97. set_some_roles
  98. lambda do
  99. @user.has_no_role!('manager', @foo)
  100. end.should change { @user.acl9_roles.count }.by(-1)
  101. @user.has_role?('manager', @foo).should be_false
  102. @user.has_role?('user', @foo).should be_true # another role on the same object
  103. end
  104. it "#has_no_role! should unassign a class role from user" do
  105. set_some_roles
  106. lambda do
  107. @user.has_no_role!('admin', Foo)
  108. end.should change { @user.acl9_roles.count }.by(-1)
  109. @user.has_role?('admin', Foo).should be_false
  110. @user.has_role?('admin').should be_true # global role
  111. end
  112. it "#has_no_roles_for! should unassign global and class roles with nil object" do
  113. set_some_roles
  114. lambda do
  115. @user.has_no_roles_for!
  116. end.should change { @user.acl9_roles.count }.by(-4)
  117. @user.has_role?('admin').should be_false
  118. @user.has_role?('3133t').should be_false
  119. @user.has_role?('admin', Foo).should be_false
  120. @user.has_role?('manager', Foo).should be_false
  121. end
  122. it "#has_no_roles_for! should unassign object roles" do
  123. set_some_roles
  124. lambda do
  125. @user.has_no_roles_for! @foo
  126. end.should change { @user.acl9_roles.count }.by(-2)
  127. @user.has_role?('user', @foo).should be_false
  128. @user.has_role?('manager', @foo).should be_false
  129. end
  130. it "#has_no_roles_for! should unassign both class roles and object roles for objects of that class" do
  131. set_some_roles
  132. lambda do
  133. @user.has_no_roles_for! Foo
  134. end.should change { @user.acl9_roles.count }.by(-4)
  135. @user.has_role?('admin', Foo).should be_false
  136. @user.has_role?('manager', Foo).should be_false
  137. @user.has_role?('user', @foo).should be_false
  138. @user.has_role?('manager', @foo).should be_false
  139. end
  140. it "#has_no_roles! should unassign all roles" do
  141. set_some_roles
  142. @user.has_no_roles!
  143. @user.acl9_roles.count.should == 0
  144. end
  145. it "should delete unused roles from table" do
  146. @user.has_role!('owner', @bar)
  147. @user2.has_role!('owner', @bar)
  148. Role.count.should == 1
  149. @bar.accepts_no_role!('owner', @user2)
  150. Role.count.should == 1
  151. @bar.accepts_no_role!('owner', @user)
  152. Role.count.should == 0
  153. end
  154. it "should accept :symbols as role names" do
  155. @user.has_role! :admin
  156. @user.has_role! :_3133t
  157. @user.has_role! :admin, Foo
  158. @user.has_role! :manager, Foo
  159. @user.has_role! :user, @foo
  160. @foo.accepts_role! :manager, @user
  161. @bar.accepts_role! :owner, @user
  162. @user.has_role?(:admin).should be_true
  163. @user.has_role?(:_3133t).should be_true
  164. @user.has_role?(:admin, Foo).should be_true
  165. @user.has_role?(:manager, @foo).should be_true
  166. end
  167. private
  168. def set_some_roles
  169. @user.has_role!('admin')
  170. @user.has_role!('3133t')
  171. @user.has_role!('admin', Foo)
  172. @user.has_role!('manager', Foo)
  173. @user.has_role!('user', @foo)
  174. @foo.accepts_role!('manager', @user)
  175. @bar.accepts_role!('owner', @user)
  176. end
  177. end
  178. class RolesWithCustomClassNamesTest < Test::Unit::TestCase
  179. before do
  180. AnotherRole.destroy_all
  181. [AnotherSubject, FooBar].each { |model| model.delete_all }
  182. @subj = AnotherSubject.create!
  183. @subj2 = AnotherSubject.create!
  184. @foobar = FooBar.create!
  185. end
  186. it "should basically work" do
  187. lambda do
  188. @subj.has_role!('admin')
  189. @subj.has_role!('user', @foobar)
  190. end.should change { AnotherRole.count }.from(0).to(2)
  191. @subj.has_role?('admin').should be_true
  192. @subj2.has_role?('admin').should be_false
  193. @subj.has_role?(:user, @foobar).should be_true
  194. @subj2.has_role?(:user, @foobar).should be_false
  195. @subj.has_no_roles!
  196. @subj2.has_no_roles!
  197. end
  198. end
  199. class UsersRolesAndSubjectsWithNamespacedClassNamesTest < Test::Unit::TestCase
  200. before do
  201. Other::Role.destroy_all
  202. [Other::User, Other::FooBar].each { |model| model.delete_all }
  203. @user = Other::User.create!
  204. @user2 = Other::User.create!
  205. @foobar = Other::FooBar.create!
  206. end
  207. it "should basically work" do
  208. lambda do
  209. @user.has_role!('admin')
  210. @user.has_role!('user', @foobar)
  211. end.should change { Other::Role.count }.from(0).to(2)
  212. @user.has_role?('admin').should be_true
  213. @user2.has_role?('admin').should be_false
  214. @user.has_role?(:user, @foobar).should be_true
  215. @user2.has_role?(:user, @foobar).should be_false
  216. @foobar.accepted_roles.count.should == 1
  217. @user.has_no_roles!
  218. @user2.has_no_roles!
  219. end
  220. end