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

/vendor/plugins/acl9/test/roles_test.rb

https://bitbucket.org/eder.esilva/webtv
Ruby | 355 lines | 266 code | 87 blank | 2 comment | 16 complexity | 4f5beb8993c3d94b6722f9030bbf7a02 MD5 | raw file
Possible License(s): MIT
  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. #create authorized object that has a string primary key
  15. @uuid = Uuid.new
  16. @uuid.uuid = "C41642EE-2780-0001-189F-17F3101B26E0"
  17. @uuid.save
  18. end
  19. it "should not have any roles by default" do
  20. %w(user manager admin owner).each do |role|
  21. @user.has_role?(role).should be_false
  22. end
  23. end
  24. it "#has_role! without object (global role)" do
  25. lambda do
  26. @user.has_role!('admin')
  27. end.should change { Role.count }.from(0).to(1)
  28. @user.has_role?('admin').should be_true
  29. @user2.has_role?('admin').should be_false
  30. end
  31. it "should not count global role as object role" do
  32. @user.has_role!('admin')
  33. [@foo, @bar, Foo, Bar, @user].each do |obj|
  34. @user.has_role?('admin', obj).should be_false
  35. @user.has_roles_for?(obj).should be_false
  36. @user.roles_for(obj).should == []
  37. end
  38. [@foo, @bar].each do |obj|
  39. obj.accepts_role?('admin', @user).should be_false
  40. end
  41. end
  42. it "#has_role! with object (object role)" do
  43. @user.has_role!('manager', @foo)
  44. @user.has_role?('manager', @foo).should be_true
  45. @user.has_roles_for?(@foo).should be_true
  46. @user.has_role_for?(@foo).should be_true
  47. roles = @user.roles_for(@foo)
  48. roles.should == @foo.accepted_roles_by(@user)
  49. roles.size.should == 1
  50. roles.first.name.should == "manager"
  51. @user.has_role?('manager', @bar).should be_false
  52. @user2.has_role?('manager', @foo).should be_false
  53. @foo.accepts_role?('manager', @user).should be_true
  54. @foo.accepts_role_by?(@user).should be_true
  55. @foo.accepts_roles_by?(@user).should be_true
  56. end
  57. it "should count object role also as global role" do
  58. @user.has_role!('manager', @foo)
  59. @user.has_role?('manager').should be_true
  60. end
  61. it "should not count object role as object class role" do
  62. @user.has_role!('manager', @foo)
  63. @user.has_role?('manager', Foo).should be_false
  64. end
  65. context "protect_global_roles is true" do
  66. before do
  67. @saved_option = Acl9.config[:protect_global_roles]
  68. Acl9.config[:protect_global_roles] = true
  69. end
  70. it "should not count object role also as global role" do
  71. @user.has_role!('manager', @foo)
  72. @user.has_role?('manager').should be_false
  73. end
  74. after do
  75. Acl9.config[:protect_global_roles] = @saved_option
  76. end
  77. end
  78. it "#has_role! with class" do
  79. @user.has_role!('user', Bar)
  80. @user.has_role?('user', Bar).should be_true
  81. @user.has_roles_for?(Bar).should be_true
  82. @user.has_role_for?(Bar).should be_true
  83. roles = @user.roles_for(Bar)
  84. roles.size.should == 1
  85. roles.first.name.should == "user"
  86. @user.has_role?('user', Foo).should be_false
  87. @user2.has_role?('user', Bar).should be_false
  88. end
  89. it "should not count class role as object role" do
  90. @user.has_role!('manager', Foo)
  91. @user.has_role?('manager', @foo).should be_false
  92. end
  93. it "should be able to have several roles on the same object" do
  94. @user.has_role!('manager', @foo)
  95. @user.has_role!('user', @foo)
  96. @user.has_role!('admin', @foo)
  97. @user.has_role!('owner', @bar)
  98. @user.roles_for(@foo) .map(&:name).sort.should == %w(admin manager user)
  99. @foo.accepted_roles_by(@user).map(&:name).sort.should == %w(admin manager user)
  100. end
  101. it "should reuse existing roles" do
  102. @user.has_role!('owner', @bar)
  103. @user2.has_role!('owner', @bar)
  104. @user.role_objects.should == @user2.role_objects
  105. end
  106. it "#has_no_role! should unassign a global role from user" do
  107. set_some_roles
  108. lambda do
  109. @user.has_no_role!('3133t')
  110. end.should change { @user.role_objects.count }.by(-1)
  111. @user.has_role?('3133t').should be_false
  112. end
  113. it "#has_no_role! should unassign an object role from user" do
  114. set_some_roles
  115. lambda do
  116. @user.has_no_role!('manager', @foo)
  117. end.should change { @user.role_objects.count }.by(-1)
  118. @user.has_role?('manager', @foo).should be_false
  119. @user.has_role?('user', @foo).should be_true # another role on the same object
  120. end
  121. it "#has_no_role! should unassign a class role from user" do
  122. set_some_roles
  123. lambda do
  124. @user.has_no_role!('admin', Foo)
  125. end.should change { @user.role_objects.count }.by(-1)
  126. @user.has_role?('admin', Foo).should be_false
  127. @user.has_role?('admin').should be_true # global role
  128. end
  129. it "#has_no_roles_for! should unassign global and class roles with nil object" do
  130. set_some_roles
  131. lambda do
  132. @user.has_no_roles_for!
  133. end.should change { @user.role_objects.count }.by(-4)
  134. @user.has_role?('admin').should be_false
  135. @user.has_role?('3133t').should be_false
  136. @user.has_role?('admin', Foo).should be_false
  137. @user.has_role?('manager', Foo).should be_false
  138. end
  139. it "#has_no_roles_for! should unassign object roles" do
  140. set_some_roles
  141. lambda do
  142. @user.has_no_roles_for! @foo
  143. end.should change { @user.role_objects.count }.by(-2)
  144. @user.has_role?('user', @foo).should be_false
  145. @user.has_role?('manager', @foo).should be_false
  146. end
  147. it "#has_no_roles_for! should unassign both class roles and object roles for objects of that class" do
  148. set_some_roles
  149. lambda do
  150. @user.has_no_roles_for! Foo
  151. end.should change { @user.role_objects.count }.by(-4)
  152. @user.has_role?('admin', Foo).should be_false
  153. @user.has_role?('manager', Foo).should be_false
  154. @user.has_role?('user', @foo).should be_false
  155. @user.has_role?('manager', @foo).should be_false
  156. end
  157. it "#has_no_roles! should unassign all roles" do
  158. set_some_roles
  159. @user.has_no_roles!
  160. @user.role_objects.count.should == 0
  161. end
  162. it "should delete unused roles from table" do
  163. @user.has_role!('owner', @bar)
  164. @user2.has_role!('owner', @bar)
  165. Role.count.should == 1
  166. @bar.accepts_no_role!('owner', @user2)
  167. Role.count.should == 1
  168. @bar.accepts_no_role!('owner', @user)
  169. Role.count.should == 0
  170. end
  171. it "should be able to get users that have a role on a authorized object" do
  172. @user.has_role!('owner', @bar)
  173. @user2.has_role!('owner', @bar)
  174. @bar.users.count.should == 2
  175. end
  176. it "should be able to get users that have a role on a authorized object with text primary key" do
  177. @user.has_role!('owner', @uuid)
  178. @user2.has_role!('owner', @uuid)
  179. @uuid.users.count.should == 2
  180. end
  181. it "should accept :symbols as role names" do
  182. @user.has_role! :admin
  183. @user.has_role! :_3133t
  184. @user.has_role! :admin, Foo
  185. @user.has_role! :manager, Foo
  186. @user.has_role! :user, @foo
  187. @foo.accepts_role! :manager, @user
  188. @bar.accepts_role! :owner, @user
  189. @user.has_role?(:admin).should be_true
  190. @user.has_role?(:_3133t).should be_true
  191. @user.has_role?(:admin, Foo).should be_true
  192. @user.has_role?(:manager, @foo).should be_true
  193. end
  194. private
  195. def set_some_roles
  196. @user.has_role!('admin')
  197. @user.has_role!('3133t')
  198. @user.has_role!('admin', Foo)
  199. @user.has_role!('manager', Foo)
  200. @user.has_role!('user', @foo)
  201. @foo.accepts_role!('manager', @user)
  202. @bar.accepts_role!('owner', @user)
  203. end
  204. end
  205. class RolesWithCustomClassNamesTest < Test::Unit::TestCase
  206. before do
  207. AnotherRole.destroy_all
  208. [AnotherSubject, FooBar].each { |model| model.delete_all }
  209. @subj = AnotherSubject.create!
  210. @subj2 = AnotherSubject.create!
  211. @foobar = FooBar.create!
  212. end
  213. it "should basically work" do
  214. lambda do
  215. @subj.has_role!('admin')
  216. @subj.has_role!('user', @foobar)
  217. end.should change { AnotherRole.count }.from(0).to(2)
  218. @subj.has_role?('admin').should be_true
  219. @subj2.has_role?('admin').should be_false
  220. @subj.has_role?(:user, @foobar).should be_true
  221. @subj2.has_role?(:user, @foobar).should be_false
  222. @subj.has_no_roles!
  223. @subj2.has_no_roles!
  224. end
  225. end
  226. class RolesWithCustomAssociationNamesTest < Test::Unit::TestCase
  227. before do
  228. DifferentAssociationNameRole.destroy_all
  229. [DifferentAssociationNameSubject, FooBar].each { |model| model.delete_all }
  230. @subj = DifferentAssociationNameSubject.create!
  231. @subj2 = DifferentAssociationNameSubject.create!
  232. @foobar = FooBar.create!
  233. end
  234. it "should basically work" do
  235. lambda do
  236. @subj.has_role!('admin')
  237. @subj.has_role!('user', @foobar)
  238. end.should change { DifferentAssociationNameRole.count }.from(0).to(2)
  239. @subj.has_role?('admin').should be_true
  240. @subj2.has_role?('admin').should be_false
  241. @subj.has_role?(:user, @foobar).should be_true
  242. @subj2.has_role?(:user, @foobar).should be_false
  243. @subj.has_no_roles!
  244. @subj2.has_no_roles!
  245. end
  246. end
  247. class UsersRolesAndSubjectsWithNamespacedClassNamesTest < Test::Unit::TestCase
  248. before do
  249. Other::Role.destroy_all
  250. [Other::User, Other::FooBar].each { |model| model.delete_all }
  251. @user = Other::User.create!
  252. @user2 = Other::User.create!
  253. @foobar = Other::FooBar.create!
  254. end
  255. it "should basically work" do
  256. lambda do
  257. @user.has_role!('admin')
  258. @user.has_role!('user', @foobar)
  259. end.should change { Other::Role.count }.from(0).to(2)
  260. @user.has_role?('admin').should be_true
  261. @user2.has_role?('admin').should be_false
  262. @user.has_role?(:user, @foobar).should be_true
  263. @user2.has_role?(:user, @foobar).should be_false
  264. @foobar.accepted_roles.count.should == 1
  265. @user.has_no_roles!
  266. @user2.has_no_roles!
  267. end
  268. end