careacademy-acl9 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +24 -0
  3. data/.ruby-version +1 -0
  4. data/.travis.yml +26 -0
  5. data/Appraisals +23 -0
  6. data/CHANGELOG.md +122 -0
  7. data/CONTRIBUTING.md +62 -0
  8. data/Gemfile +7 -0
  9. data/Gemfile.lock +167 -0
  10. data/LICENSE +9 -0
  11. data/MIT-LICENSE +20 -0
  12. data/README.md +326 -0
  13. data/Rakefile +20 -0
  14. data/TODO +42 -0
  15. data/acl9.gemspec +27 -0
  16. data/bin/appraisal +16 -0
  17. data/bin/bundler +16 -0
  18. data/bin/cc-tddium-post-worker +16 -0
  19. data/bin/erubis +16 -0
  20. data/bin/rackup +16 -0
  21. data/bin/rails +16 -0
  22. data/bin/rake +16 -0
  23. data/bin/sprockets +16 -0
  24. data/bin/tapout +16 -0
  25. data/bin/thor +16 -0
  26. data/bin/tilt +16 -0
  27. data/bin/yard +16 -0
  28. data/bin/yardoc +16 -0
  29. data/bin/yri +16 -0
  30. data/gemfiles/.bundle/config +2 -0
  31. data/gemfiles/rails_5.0.gemfile +10 -0
  32. data/gemfiles/rails_5.1.gemfile +10 -0
  33. data/gemfiles/rails_5.2.gemfile +9 -0
  34. data/gemfiles/rails_6.0.gemfile +9 -0
  35. data/gemfiles/rails_6.1.gemfile +9 -0
  36. data/gemfiles/rails_7.0.gemfile +9 -0
  37. data/lib/acl9/controller_extensions/dsl_base.rb +212 -0
  38. data/lib/acl9/controller_extensions/generators.rb +166 -0
  39. data/lib/acl9/controller_extensions.rb +85 -0
  40. data/lib/acl9/helpers.rb +49 -0
  41. data/lib/acl9/model_extensions/for_object.rb +74 -0
  42. data/lib/acl9/model_extensions/for_subject.rb +232 -0
  43. data/lib/acl9/model_extensions.rb +136 -0
  44. data/lib/acl9/prepositions.rb +18 -0
  45. data/lib/acl9/version.rb +3 -0
  46. data/lib/acl9.rb +78 -0
  47. data/lib/generators/acl9/setup/USAGE +35 -0
  48. data/lib/generators/acl9/setup/setup_generator.rb +122 -0
  49. data/lib/generators/acl9/setup/templates/create_role_tables.rb +31 -0
  50. data/lib/generators/acl9/setup/templates/role.rb +3 -0
  51. data/test/config_test.rb +55 -0
  52. data/test/controller_extensions/actions_test.rb +199 -0
  53. data/test/controller_extensions/anon_test.rb +39 -0
  54. data/test/controller_extensions/base.rb +96 -0
  55. data/test/controller_extensions/basics_test.rb +44 -0
  56. data/test/controller_extensions/conditions_test.rb +48 -0
  57. data/test/controller_extensions/method_test.rb +70 -0
  58. data/test/controller_extensions/multi_match_test.rb +142 -0
  59. data/test/controller_extensions/multiple_role_arguments_test.rb +136 -0
  60. data/test/controller_extensions/prepositions_test.rb +108 -0
  61. data/test/controller_extensions/pseudo_role_test.rb +26 -0
  62. data/test/controller_extensions/role_test.rb +75 -0
  63. data/test/controllers/acl_action_override_test.rb +24 -0
  64. data/test/controllers/acl_arguments_test.rb +5 -0
  65. data/test/controllers/acl_block_test.rb +5 -0
  66. data/test/controllers/acl_boolean_method_test.rb +5 -0
  67. data/test/controllers/acl_helper_method_test.rb +29 -0
  68. data/test/controllers/acl_ivars_test.rb +15 -0
  69. data/test/controllers/acl_method2_test.rb +6 -0
  70. data/test/controllers/acl_method_test.rb +6 -0
  71. data/test/controllers/acl_object_hash_test.rb +18 -0
  72. data/test/controllers/acl_query_method_named_test.rb +9 -0
  73. data/test/controllers/acl_query_method_test.rb +9 -0
  74. data/test/controllers/acl_query_method_with_lambda_test.rb +9 -0
  75. data/test/controllers/acl_query_mixin.rb +54 -0
  76. data/test/controllers/acl_subject_method_test.rb +15 -0
  77. data/test/controllers/arguments_checking_test.rb +43 -0
  78. data/test/dummy/app/assets/config/manifest.js +0 -0
  79. data/test/dummy/app/controllers/acl_action_override.rb +15 -0
  80. data/test/dummy/app/controllers/acl_arguments.rb +10 -0
  81. data/test/dummy/app/controllers/acl_block.rb +6 -0
  82. data/test/dummy/app/controllers/acl_boolean_method.rb +23 -0
  83. data/test/dummy/app/controllers/acl_helper_method.rb +11 -0
  84. data/test/dummy/app/controllers/acl_ivars.rb +17 -0
  85. data/test/dummy/app/controllers/acl_method.rb +6 -0
  86. data/test/dummy/app/controllers/acl_method2.rb +6 -0
  87. data/test/dummy/app/controllers/acl_objects_hash.rb +10 -0
  88. data/test/dummy/app/controllers/acl_query_method.rb +9 -0
  89. data/test/dummy/app/controllers/acl_query_method_named.rb +15 -0
  90. data/test/dummy/app/controllers/acl_query_method_with_lambda.rb +9 -0
  91. data/test/dummy/app/controllers/acl_subject_method.rb +16 -0
  92. data/test/dummy/app/controllers/application_controller.rb +13 -0
  93. data/test/dummy/app/controllers/empty_controller.rb +5 -0
  94. data/test/dummy/app/helpers/application_helper.rb +2 -0
  95. data/test/dummy/app/helpers/some_helper.rb +8 -0
  96. data/test/dummy/app/models/.keep +0 -0
  97. data/test/dummy/app/models/access.rb +3 -0
  98. data/test/dummy/app/models/account.rb +3 -0
  99. data/test/dummy/app/models/bar.rb +3 -0
  100. data/test/dummy/app/models/concerns/.keep +0 -0
  101. data/test/dummy/app/models/foo.rb +3 -0
  102. data/test/dummy/app/models/foo_bar.rb +3 -0
  103. data/test/dummy/app/models/other/foo.rb +5 -0
  104. data/test/dummy/app/models/other/role.rb +5 -0
  105. data/test/dummy/app/models/other/user.rb +5 -0
  106. data/test/dummy/app/models/role.rb +3 -0
  107. data/test/dummy/app/models/string_object_role.rb +3 -0
  108. data/test/dummy/app/models/string_user.rb +3 -0
  109. data/test/dummy/app/models/user.rb +3 -0
  110. data/test/dummy/app/models/uuid.rb +4 -0
  111. data/test/dummy/config/application.rb +23 -0
  112. data/test/dummy/config/boot.rb +4 -0
  113. data/test/dummy/config/database.yml +25 -0
  114. data/test/dummy/config/environment.rb +5 -0
  115. data/test/dummy/config/environments/development.rb +37 -0
  116. data/test/dummy/config/environments/test.rb +40 -0
  117. data/test/dummy/config/initializers/assets.rb +8 -0
  118. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  119. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  120. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  121. data/test/dummy/config/initializers/inflections.rb +16 -0
  122. data/test/dummy/config/initializers/mime_types.rb +4 -0
  123. data/test/dummy/config/initializers/secrets.rb +1 -0
  124. data/test/dummy/config/initializers/session_store.rb +3 -0
  125. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  126. data/test/dummy/config/locales/en.yml +23 -0
  127. data/test/dummy/config/routes.rb +14 -0
  128. data/test/dummy/config.ru +4 -0
  129. data/test/dummy/db/migrate/20141117132218_create_tables.rb +149 -0
  130. data/test/helpers/helper_test.rb +89 -0
  131. data/test/models/roles_test.rb +369 -0
  132. data/test/models/roles_with_custom_association_names_test.rb +28 -0
  133. data/test/models/roles_with_custom_class_names_test.rb +28 -0
  134. data/test/models/system_roles_test.rb +22 -0
  135. data/test/models/users_roles_and_subjects_with_namespaced_class_names_test.rb +30 -0
  136. data/test/test_helper.rb +94 -0
  137. data/test/version_test.rb +7 -0
  138. metadata +321 -0
@@ -0,0 +1,89 @@
1
+ require 'test_helper'
2
+
3
+ class HelperTest < ActionView::TestCase
4
+ setup do
5
+ @helper = Class.new do
6
+ include ActionView::Helpers
7
+ include SomeHelper
8
+
9
+ attr_accessor :current_user
10
+ attr_accessor :action_name
11
+ def controller
12
+ self
13
+ end
14
+
15
+ def set_hamlet
16
+ ( self.current_user = User.create ).has_role! :hamlet
17
+ end
18
+ end.new
19
+
20
+ end
21
+
22
+ test "has :the_question method" do
23
+ assert @helper.respond_to? :the_question
24
+ end
25
+
26
+ test "role :hamlet is allowed to be" do
27
+ assert @helper.set_hamlet
28
+
29
+ assert @helper.action_name = 'be'
30
+ assert @helper.the_question
31
+ end
32
+
33
+ test "role :hamlet is allowed to not_be" do
34
+ assert @helper.set_hamlet
35
+
36
+ assert @helper.action_name = 'not_be'
37
+ assert @helper.the_question
38
+ end
39
+
40
+ test "not logged in is not allowed to be" do
41
+ assert_nil @helper.current_user = nil
42
+
43
+ assert @helper.action_name = 'be'
44
+ refute @helper.the_question
45
+ end
46
+
47
+ test "noone is not allowed to be" do
48
+ assert ( @helper.current_user = User.create )
49
+
50
+ assert @helper.action_name = 'be'
51
+ refute @helper.the_question
52
+ end
53
+
54
+ test "has :show_to method" do
55
+ assert @helper.respond_to? :show_to
56
+ end
57
+
58
+ test "has :show_to hamlet 'hello hamlet' message" do
59
+ assert @helper.set_hamlet
60
+
61
+ assert message = 'hello hamlet'
62
+ assert_equal message, @helper.show_to('hamlet') { message }
63
+ end
64
+
65
+ test "has to show message if user has hamlet role on object" do
66
+ assert foo = Foo.create
67
+ assert ( @helper.current_user = User.create ).has_role! :hamlet, foo
68
+
69
+ assert message = 'hello hamlet'
70
+ assert_equal message, @helper.show_to(:hamlet, :of => foo) { message }
71
+ end
72
+
73
+ test "has not to show message if user has no hamlet role on object" do
74
+ assert @helper.set_hamlet
75
+
76
+ assert foo = Foo.create
77
+ assert @helper.current_user.has_role! :hamlet, foo
78
+
79
+ assert_nil @helper.show_to('hamlet', :of => Foo.new) { 'hello my prince' }
80
+ end
81
+
82
+ test "has :show_to nothing to NotLoggedIn" do
83
+ assert_nil @helper.current_user = nil
84
+
85
+ assert @helper.action_name = 'be'
86
+ assert message = 'hello hamlet'
87
+ assert_nil @helper.show_to(:hamlet) { message }
88
+ end
89
+ end
@@ -0,0 +1,369 @@
1
+ require 'test_helper'
2
+
3
+ class RolesTest < ActiveSupport::TestCase
4
+ setup do
5
+ assert @user = User.create
6
+ assert @user2 = User.create
7
+ assert @foo = Foo.create
8
+ assert @bar = Bar.create
9
+ end
10
+
11
+ teardown do
12
+ Acl9.config[:normalize_role_names] = true
13
+ Acl9.config[:protect_global_roles] = true
14
+ end
15
+
16
+ test "should not set global role with nil object" do
17
+
18
+ assert_raise Acl9::NilObjectError do
19
+ assert @user.has_role! :admin, nil
20
+ end
21
+ refute @user.has_role? :admin
22
+ end
23
+
24
+ test "should not have any roles by default" do
25
+ %w(user manager admin owner).each do |role|
26
+ refute @user.has_role? role
27
+ end
28
+ end
29
+
30
+ test "#has_role! without object (global role)" do
31
+ assert_difference -> { Role.count } do
32
+ assert @user.has_role! :admin
33
+ end
34
+
35
+ assert @user.has_role? :admin
36
+ refute @user2.has_role? :admin
37
+ end
38
+
39
+ test "should not count global role as object role" do
40
+ assert @user.has_role! :admin
41
+
42
+ [@foo, @bar, Foo, Bar, @user].each do |obj|
43
+ refute @user.has_role? :admin, obj
44
+ refute @user.has_roles_for?(obj)
45
+ assert_equal [], @user.roles_for(obj)
46
+ end
47
+
48
+ [@foo, @bar].each do |obj|
49
+ refute obj.accepts_role? :admin, @user
50
+ end
51
+ end
52
+
53
+ test "#has_role! with object (object role)" do
54
+ assert @user.has_role! :manager, @foo
55
+
56
+ assert @user.has_role? :manager, @foo
57
+ assert @user.has_roles_for? @foo
58
+ assert @user.has_role_for? @foo
59
+
60
+ assert roles = @user.roles_for( @foo )
61
+ assert_equal roles, @foo.accepted_roles_by(@user)
62
+ assert_equal 1, roles.size
63
+ assert_equal 'manager', roles.first.name
64
+
65
+ refute @user.has_role? :manager, @bar
66
+ refute @user2.has_role? :manager, @foo
67
+
68
+ assert @foo.accepts_role? :manager, @user
69
+ assert @foo.accepts_role_by? @user
70
+ assert @foo.accepts_roles_by? @user
71
+ end
72
+
73
+ test "#has_role! with preposition" do
74
+ assert @user.has_role! :manager, of: @foo
75
+ assert @user.has_role? :manager, @foo
76
+ end
77
+
78
+ test "#has_role? with preposition" do
79
+ assert @user.has_role! :manager, @foo
80
+ assert @user.has_role? :manager, of: @foo
81
+ end
82
+
83
+ test "should count object role also as global role when :protect_global_roles == false" do
84
+ Acl9.config[:protect_global_roles] = false
85
+
86
+ assert @user.has_role! :manager, @foo
87
+ assert @user.has_role? :manager
88
+ end
89
+
90
+ test "should not count object role as object class role" do
91
+ assert @user.has_role! :manager, @foo
92
+ refute @user.has_role? :manager, Foo
93
+ end
94
+
95
+ test "don't count object role as global" do
96
+ assert @user.has_role! :manager, @foo
97
+ refute @user.has_role? :manager
98
+ end
99
+
100
+ test "#has_role! with class" do
101
+ assert @user.has_role! :user, Bar
102
+
103
+ assert @user.has_role? :user, Bar
104
+ assert @user.has_roles_for? Bar
105
+ assert @user.has_role_for? Bar
106
+
107
+ assert roles = @user.roles_for( Bar)
108
+ assert_equal 1, roles.size
109
+ assert_equal "user", roles.first.name
110
+
111
+ refute @user.has_role? :user, Foo
112
+ refute @user2.has_role? :user, Bar
113
+ end
114
+
115
+ test "should not count class role as object role" do
116
+ assert @user.has_role! :manager, Foo
117
+ refute @user.has_role? :manager, @foo
118
+ end
119
+
120
+ test "should be able to have several roles on the same object" do
121
+ assert @user.has_role! :manager, @foo
122
+ assert @user.has_role! :user, @foo
123
+ assert @user.has_role! :admin, @foo
124
+
125
+ assert @user.has_role! :owner, @bar
126
+
127
+ assert_equal_elements %w(admin manager user), @user.roles_for(@foo).map(&:name)
128
+ assert_equal_elements %w(admin manager user), @foo.accepted_roles_by(@user).map(&:name)
129
+ end
130
+
131
+ test "should reuse existing roles" do
132
+ @user.has_role! :owner, @bar
133
+ @user2.has_role! :owner, @bar
134
+
135
+ assert_equal @user2.role_objects, @user.role_objects
136
+ end
137
+
138
+ test "#has_no_role! should unassign a global role from user" do
139
+ set_some_roles
140
+
141
+ assert_difference -> { @user.role_objects.count }, -1 do
142
+ assert @user.has_no_role! '3133t'
143
+ end
144
+
145
+ refute @user.has_role? '3133t'
146
+ end
147
+
148
+ test "#has_no_role! should unassign an object role from user" do
149
+ set_some_roles
150
+
151
+ assert_difference -> { @user.role_objects.count }, -1 do
152
+ assert @user.has_no_role! :manager, @foo
153
+ end
154
+
155
+ refute @user.has_role? :manager, @foo
156
+ assert @user.has_role? :user, @foo # another role on the same object
157
+ end
158
+
159
+ test "#has_no_role! should unassign an object role from user with preposition" do
160
+ set_some_roles
161
+
162
+ assert_difference -> { @user.role_objects.count }, -1 do
163
+ assert @user.has_no_role! :manager, at: @foo
164
+ end
165
+
166
+ refute @user.has_role? :manager, @foo
167
+ assert @user.has_role? :user, @foo # another role on the same object
168
+ end
169
+
170
+ test "#has_no_role! should unassign a class role from user" do
171
+ set_some_roles
172
+
173
+ assert_difference -> { @user.role_objects.count }, -1 do
174
+ assert @user.has_no_role! :admin, Foo
175
+ end
176
+
177
+ refute @user.has_role? :admin, Foo
178
+ assert @user.has_role? :admin # global role
179
+ end
180
+
181
+ test "#has_no_roles_for! should unassign global and class roles with nil object" do
182
+ set_some_roles
183
+
184
+ assert_difference -> { @user.role_objects.count }, -4 do
185
+ assert @user.has_no_roles_for!
186
+ end
187
+
188
+ refute @user.has_role? :admin
189
+ refute @user.has_role? '3133t'
190
+ refute @user.has_role? :admin, Foo
191
+ refute @user.has_role? :manager, Foo
192
+ end
193
+
194
+ test "#has_no_roles_for! should unassign object roles" do
195
+ set_some_roles
196
+
197
+ assert_difference -> { @user.role_objects.count }, -2 do
198
+ assert @user.has_no_roles_for! @foo
199
+ end
200
+
201
+ refute @user.has_role? :user, @foo
202
+ refute @user.has_role? :manager, @foo
203
+ end
204
+
205
+ test "#has_no_roles_for! should unassign both class roles and object roles for objects of that class" do
206
+ set_some_roles
207
+
208
+ assert_difference -> { @user.role_objects.count }, -4 do
209
+ assert @user.has_no_roles_for! Foo
210
+ end
211
+
212
+ refute @user.has_role? :admin, Foo
213
+ refute @user.has_role? :manager, Foo
214
+ refute @user.has_role? :user, @foo
215
+ refute @user.has_role? :manager, @foo
216
+ end
217
+
218
+ test "#has_no_roles! should unassign all roles" do
219
+ set_some_roles
220
+
221
+ @user.has_no_roles!
222
+ assert_equal 0, @user.role_objects.count
223
+ end
224
+
225
+ test "role setters true even with multiple roles" do
226
+ assert @user.has_role! :owner, @bar
227
+ assert @user2.has_role! :owner, @bar
228
+
229
+ assert @user.has_no_role! :owner, @bar
230
+ end
231
+
232
+ test "should delete unused roles from table" do
233
+ assert @user.has_role! :owner, @bar
234
+ assert @user2.has_role! :owner, @bar
235
+
236
+ assert_equal 1, Role.count
237
+
238
+ assert @bar.accepts_no_role! :owner, @user2
239
+ assert_equal 1, Role.count
240
+
241
+ assert @bar.accepts_no_role! :owner, @user
242
+
243
+ assert_equal 0, Role.count
244
+ end
245
+
246
+ test "should be able to get users that have a role on a authorized object" do
247
+ assert @user.has_role! :owner, @bar
248
+ assert @user2.has_role! :owner, @bar
249
+
250
+ assert_equal 2, @bar.users.count
251
+ end
252
+
253
+ test "should be able to get users that have a role on a authorized object with text primary key" do
254
+
255
+ assert @user = StringUser.create
256
+ assert @user2 = StringUser.create
257
+
258
+ assert uuid = Uuid.create( id: "C41642EE-2780-0001-189F-17F3101B26E0" )
259
+
260
+ assert @user.has_role! :owner, uuid
261
+ assert @user2.has_role! :owner, uuid
262
+
263
+ assert_equal 2, uuid.string_users.count
264
+ end
265
+
266
+ test "should accept :symbols as role names" do
267
+ assert @user.has_role! :admin
268
+ assert @user.has_role! :_3133t
269
+
270
+ assert @user.has_role! :admin, Foo
271
+ assert @user.has_role! :manager, Foo
272
+ assert @user.has_role! :user, @foo
273
+ assert @foo.accepts_role! :manager, @user
274
+ assert @bar.accepts_role! :owner, @user
275
+
276
+ assert @user.has_role?(:admin)
277
+ assert @user.has_role?(:_3133t)
278
+ assert @user.has_role?(:admin, Foo)
279
+ assert @user.has_role?(:manager, @foo)
280
+ end
281
+
282
+ test "remove access for destroyed object" do
283
+ assert_empty @user.role_objects
284
+ assert @user.has_role! :admin, @foo
285
+ refute_empty @user.role_objects
286
+ assert @user.has_role? :admin, @foo
287
+
288
+ assert @foo.destroy
289
+ refute @foo.accepts_role? :admin, @user
290
+
291
+ assert @user.reload
292
+ assert_empty @user.role_objects
293
+ refute @user.has_role? :admin, @foo
294
+ end
295
+
296
+ test "remove access for destroyed subject" do
297
+ assert_empty @foo.accepted_roles
298
+ assert @foo.accepts_role! :admin, @user
299
+ refute_empty @foo.accepted_roles
300
+ assert @foo.accepts_role? :admin, @user
301
+
302
+ assert @user.destroy
303
+ refute @user.has_role? :admin, @foo
304
+
305
+ assert @foo.reload
306
+ assert_empty @foo.accepted_roles
307
+ refute @foo.accepts_role? :admin, @user
308
+ end
309
+
310
+ test "roles ignore pluralization" do
311
+ assert @user.has_role! :manager
312
+ assert @user.has_role? :manager
313
+
314
+ assert @user.has_role? :managers
315
+ assert @user.has_role? 'Manager'
316
+ assert @user.has_role? 'Managers'
317
+
318
+ assert_nil @user.has_role! :managers
319
+ assert_nil @user.has_role! 'Manager'
320
+ assert_nil @user.has_role! 'Managers'
321
+
322
+ assert @user2.has_role! :managers
323
+ assert @user2.has_role? :managers
324
+ assert @user2.has_role? :manager
325
+
326
+ assert_nil @user2.has_role! :manager
327
+ end
328
+
329
+ test "non-normalized roles work properly" do
330
+ Acl9.config[:normalize_role_names] = false
331
+ assert @user.has_role! :manager
332
+ assert @user.has_role? :manager
333
+ refute @user.has_role? :managers
334
+
335
+ assert @user.has_role! :managers
336
+ assert @user.has_role! 'Manager'
337
+ assert @user.has_role! 'Managers'
338
+
339
+ assert_equal 4, @user.role_objects.count
340
+
341
+ assert @user2.has_role! :managers
342
+ assert @user2.has_role? :managers
343
+ refute @user2.has_role? :manager
344
+
345
+ assert @user2.has_role! :manager
346
+ end
347
+
348
+ test "subjects by role" do
349
+ assert @user.has_role! :admin, @foo
350
+ assert @user2.has_role! :manager, @foo
351
+
352
+ assert_equal_elements [ @user, @user2 ], @foo.users
353
+ assert_equal_elements [ @user ], @foo.users(:admin)
354
+ assert_equal_elements [ @user2 ], @foo.users(:manager)
355
+ end
356
+
357
+ private
358
+
359
+ def set_some_roles
360
+ assert @user.has_role! :admin
361
+ assert @user.has_role! '3133t'
362
+
363
+ assert @user.has_role! :admin, Foo
364
+ assert @user.has_role! :manager, Foo
365
+ assert @user.has_role! :user, @foo
366
+ assert @foo.accepts_role! :manager, @user
367
+ assert @bar.accepts_role! :owner, @user
368
+ end
369
+ end
@@ -0,0 +1,28 @@
1
+ require 'test_helper'
2
+
3
+ class RolesWithCustomAssociationNamesTest < ActiveSupport::TestCase
4
+ setup do
5
+ Access.destroy_all
6
+ [Account, FooBar].each { |model| model.delete_all }
7
+
8
+ assert @subj = Account.create!
9
+ assert @subj2 = Account.create!
10
+ assert @foobar = FooBar.create!
11
+ end
12
+
13
+ test "should basically work" do
14
+ assert_difference -> { Access.count }, 2 do
15
+ assert @subj.has_role! :admin
16
+ assert @subj.has_role! :user, @foobar
17
+ end
18
+
19
+ assert @subj.has_role? :admin
20
+ refute @subj2.has_role? :admin
21
+
22
+ assert @subj.has_role? :user, @foobar
23
+ refute @subj2.has_role? :user, @foobar
24
+
25
+ @subj.has_no_roles!
26
+ @subj2.has_no_roles!
27
+ end
28
+ end
@@ -0,0 +1,28 @@
1
+ require 'test_helper'
2
+
3
+ class RolesWithCustomClassNamesTest < ActiveSupport::TestCase
4
+ setup do
5
+ Access.destroy_all
6
+ [Account, FooBar].each { |model| model.delete_all }
7
+
8
+ @subj = Account.create!
9
+ @subj2 = Account.create!
10
+ @foobar = FooBar.create!
11
+ end
12
+
13
+ test "should basically work" do
14
+ assert_difference -> { Access.count }, 2 do
15
+ assert @subj.has_role! :admin
16
+ assert @subj.has_role! :user, @foobar
17
+ end
18
+
19
+ assert @subj.has_role? :admin
20
+ refute @subj2.has_role? :admin
21
+
22
+ assert @subj.has_role? :user, @foobar
23
+ refute @subj2.has_role? :user, @foobar
24
+
25
+ assert @subj.has_no_roles!
26
+ assert @subj2.has_no_roles!
27
+ end
28
+ end
@@ -0,0 +1,22 @@
1
+ require 'test_helper'
2
+
3
+ class SystemRolesTest < ActiveSupport::TestCase
4
+ test "should not delete a system role" do
5
+ assert role = Role.create( :name => "admin", :system => true)
6
+ assert role.system
7
+ assert_equal 1, Role.count
8
+
9
+ assert user = User.create
10
+ assert_difference -> { Role.count }, 0 do
11
+ assert user.has_role! :admin
12
+ end
13
+
14
+ assert user.has_role? :admin
15
+
16
+ assert_difference -> { Role.count }, 0 do
17
+ assert user.has_no_role! :admin
18
+ end
19
+
20
+ refute user.has_role? :admin
21
+ end
22
+ end
@@ -0,0 +1,30 @@
1
+ require 'test_helper'
2
+
3
+ class UsersRolesAndSubjectsWithNamespacedClassNamesTest < ActiveSupport::TestCase
4
+ setup do
5
+ assert Other::Role.destroy_all
6
+ [Other::User, Other::Foo].each { |model| model.delete_all }
7
+
8
+ assert @user = Other::User.create!
9
+ assert @user2 = Other::User.create!
10
+ assert @foobar = Other::Foo.create!
11
+ end
12
+
13
+ test "should basically work" do
14
+ assert_difference -> { Other::Role.count }, 2 do
15
+ assert @user.has_role! :admin
16
+ assert @user.has_role! :user, @foobar
17
+ end
18
+
19
+ assert @user.has_role?('admin')
20
+ refute @user2.has_role?('admin')
21
+
22
+ assert @user.has_role?(:user, @foobar)
23
+ refute @user2.has_role?(:user, @foobar)
24
+
25
+ assert_equal 1, @foobar.accepted_roles.count
26
+
27
+ @user.has_no_roles!
28
+ @user2.has_no_roles!
29
+ end
30
+ end
@@ -0,0 +1,94 @@
1
+ ENV["RAILS_ENV"] = "test"
2
+
3
+ require 'minitest/autorun'
4
+
5
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
6
+ require "rails/test_help"
7
+
8
+ Rails.backtrace_cleaner.remove_silencers! if ENV["BACKTRACE"]
9
+
10
+ ActiveRecord::Migration.verbose = false
11
+
12
+ if Rails.gem_version >= Gem::Version.new('6.0')
13
+ ActiveRecord::MigrationContext.new(File.expand_path('../dummy/db/migrate', __FILE__), ActiveRecord::SchemaMigration).migrate
14
+ elsif Rails.gem_version >= Gem::Version.new('5.2.0')
15
+ ActiveRecord::MigrationContext.new(File.expand_path('../dummy/db/migrate', __FILE__)).migrate
16
+ else
17
+ ActiveRecord::Migrator.migrate(File.expand_path('../dummy/db/migrate', __FILE__))
18
+ end
19
+
20
+ $VERBOSE = nil
21
+
22
+ class ActionController::TestCase
23
+ setup do
24
+ assert Foo.create
25
+ end
26
+
27
+ class << self
28
+ def test_allowed method, action, params={}
29
+ test "allowed #{method} #{action}" do
30
+ if block_given?
31
+ yield user = User.create
32
+ params.merge! user_id: user.id
33
+ end
34
+ assert send( method, action, params: params )
35
+ assert_response :ok
36
+ end
37
+ end
38
+
39
+ def test_denied method, action, params={}
40
+ test "denied #{method} #{action}" do
41
+ assert_raises Acl9::AccessDenied do
42
+ if block_given?
43
+ yield user = User.create
44
+ params.merge! user_id: user.id
45
+ end
46
+ assert send( method, action, params: params )
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+
53
+ class ActiveSupport::TestCase
54
+ def assert_equal_elements expected, test, message=nil
55
+ assert_equal [], expected - test, message
56
+ end
57
+ end
58
+
59
+ module BaseTests
60
+ def self.included(klass)
61
+ klass.class_eval do
62
+ test_allowed :get, :index
63
+ test_allowed :get, :show, id: 1
64
+ test_denied :get, :new
65
+ test_denied :get, :edit, id: 1
66
+ test_denied :post, :create
67
+ test_denied :put, :update, id: 1
68
+ test_denied :patch, :update, id: 1
69
+ test_denied :delete, :destroy, id: 1
70
+
71
+ admin = -> (user) { user.has_role! :admin }
72
+ test_allowed :get, :new, &admin
73
+ test_allowed :get, :edit, id: 1, &admin
74
+ test_allowed :post, :create, &admin
75
+ test_allowed :put, :update, id: 1, &admin
76
+ test_allowed :patch, :update, id: 1, &admin
77
+ test_allowed :delete, :destroy, id: 1, &admin
78
+ end
79
+ end
80
+ end
81
+
82
+ module ShouldRespondToAcl
83
+ def self.included(klass)
84
+ klass.class_eval do
85
+ test "#{klass} has :acl method" do
86
+ assert @controller.respond_to? :acl
87
+ end
88
+
89
+ test "#{klass} has no :acl? method" do
90
+ refute @controller.respond_to? :acl?
91
+ end
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class VersionTest < ActiveSupport::TestCase
4
+ test "has a version" do
5
+ assert defined? Acl9::VERSION
6
+ end
7
+ end