/
active_record_implementation_test.rb
45 lines (38 loc) · 1.92 KB
/
active_record_implementation_test.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
require File.dirname(__FILE__) + '/test_helper'
require File.dirname(__FILE__) + '/database'
require File.dirname(__FILE__) + '/active_record_implementation'
Rbac::RoleType.implementation = RoleType
class ActiveRecordImplementationTest < Test::Unit::TestCase
test "has_role? (single argument)" do
assert_equal true, superuser.has_role?(:superuser)
assert_equal true, superuser.has_role?(:user)
assert_equal true, superuser.has_role?(:anonymous)
end
test "has_role? (array argument)" do
assert_equal false, moderator.has_role?([:superuser])
assert_equal false, moderator.has_role?([:moderator, :superuser])
assert_equal true, moderator.has_role?([:moderator, :superuser], blog)
assert_equal true, moderator.has_role?([:author, :superuser], content)
end
test "has_explicit_role?" do
assert_equal true, superuser.has_explicit_role?(:superuser)
assert_equal false, superuser.has_explicit_role?(:user)
assert_equal false, superuser.has_explicit_role?(:anonymous)
end
test "has_permission? raises Rbac::AuthorizingRoleNotFound exception when authorizing role can not be found" do
assert_raises(Rbac::AuthorizingRoleNotFound) { superuser.has_permission?('drink redbull', Rbac::Context.root) }
end
test "has_permission? returns true when the user has a role that authorizes the action" do
with_default_permissions(:'edit content' => [:author]) do
assert_equal true, superuser.has_permission?('edit content', Rbac::Context.root)
end
end
test "has_permission? returns true for authorized roles that aren't part of the same role hierarchy" do
with_default_permissions(:'edit content' => [:editor]) do
content = self.content
content.section.permissions = { :'edit content' => [:moderator] }
assert_equal true, moderator.has_permission?('edit content', content)
assert_equal true, editor.has_permission?('edit content', content)
end
end
end