righter 0.0.1
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.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/Rakefile +28 -0
- data/app/models/righter_right.rb +75 -0
- data/app/models/righter_rights_righter_role.rb +4 -0
- data/app/models/righter_role.rb +82 -0
- data/app/models/righter_role_grant.rb +7 -0
- data/app/models/righter_roles_user.rb +2 -0
- data/db/migrate/20150910000000_create_righter_rights.rb +21 -0
- data/db/migrate/20150910000001_create_righter_roles.rb +20 -0
- data/db/migrate/20150910000002_righter_roles_righter_access_rights.rb +14 -0
- data/db/migrate/20150910000003_create_righter_roles_users.rb +14 -0
- data/lib/init.rb +1 -0
- data/lib/injections/righter_for_application_controller.rb +31 -0
- data/lib/injections/righter_for_resource.rb +110 -0
- data/lib/injections/righter_for_user.rb +186 -0
- data/lib/righter.rb +9 -0
- data/lib/righter/version.rb +3 -0
- data/lib/righter_error.rb +8 -0
- data/lib/tasks/righter_tasks.rake +4 -0
- data/test/dummy/README.rdoc +28 -0
- data/test/dummy/Rakefile +11 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/stylesheets/application.css +15 -0
- data/test/dummy/app/controllers/application_controller.rb +6 -0
- data/test/dummy/app/controllers/doors_controller.rb +23 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/models/door.rb +10 -0
- data/test/dummy/app/models/house.rb +7 -0
- data/test/dummy/app/models/player.rb +7 -0
- data/test/dummy/app/models/righter_roles_player.rb +2 -0
- data/test/dummy/app/models/user.rb +4 -0
- data/test/dummy/app/views/doors/show.html.erb +1 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/bin/setup +29 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +25 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +41 -0
- data/test/dummy/config/environments/production.rb +79 -0
- data/test/dummy/config/environments/test.rb +42 -0
- data/test/dummy/config/initializers/assets.rb +11 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +4 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/routes.rb +8 -0
- data/test/dummy/config/secrets.yml +22 -0
- data/test/dummy/db/migrate/20150911000000_create_players.rb +18 -0
- data/test/dummy/db/migrate/20150911000002_create_users_table.rb +15 -0
- data/test/dummy/db/migrate/20150911000003_create_doors.rb +14 -0
- data/test/dummy/db/migrate/20150911000004_create_houses.rb +13 -0
- data/test/dummy/db/migrate/20150911000005_add_house_reference_to_doors.rb +9 -0
- data/test/dummy/db/schema.rb +90 -0
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/log/development.log +35 -0
- data/test/dummy/log/test.log +117973 -0
- data/test/dummy/public/404.html +67 -0
- data/test/dummy/public/422.html +67 -0
- data/test/dummy/public/500.html +66 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/0-mgT1BVDUIUlj7bJxvh7Ud3uSbC1DJf0Ok7Ehgieds.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/5Lly_CA8DZvPhQV2jDQx-Y6P_y3Ygra9t5jfSlGhHDA.cache +2 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/9jPCqzZvmeFf31Rz8y3OEo8OQXEHVcwmLgkx0tXs-o8.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/OI6uxGcnsKavdWTtwDAasU3wPx8QXhzBgV0X2n1KjMQ.cache +3 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/VTeG_7OBrkPzWFSh3MrTa0NSl2wOuJfTJ-XP7JqBG2w.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/a2CYO1s9hME5T1pntwZMB7J6dYjS0zCmDxw_7zX1T14.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/d71F8V8hdfF1jAttqkXKdizYR9PcM_zuKn_Lj_73gfE.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/hCBjLjjeqhUCs4tdwCYlGcFA4xohMwurjmZx6OY1a7g.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/hZi1k6tpxxCGYxRe7zY74ItcOI8gZrREOpGuA8JSpGg.cache +3 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ifgPguUzTOUeqB0zW0GV8DL6HEvPpakIWAzNPVuCGW0.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/j8yaH5wiyIN5a2xePYA_lQm39RgOQh27UiF5A7i6b28.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/o2kqwqoUQ3gkgncZO1IWdVRzFD0wCSQ-HyL62cINFOU.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/pEhaat2KBd5SrT7szC_8R1_6hK17FTpvoRFkmCRSD3M.cache +2 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/pIwp2wi1sfaJlhiwzzvyyV0hKOihhYkP6709hRtpHxg.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/pQIgTfLmEPykNamzxdqBww21SMT7YlZlZGy6hgQ6eVE.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/td9wUl9SLRnSSgE2ZK_VqCzLxTkFiCW50KkOhE916Wo.cache +1 -0
- data/test/factories/doors.rb +10 -0
- data/test/factories/houses.rb +7 -0
- data/test/factories/players.rb +6 -0
- data/test/factories/righter_rights.rb +11 -0
- data/test/factories/righter_roles.rb +9 -0
- data/test/factories/users.rb +9 -0
- data/test/fixtures/players.yml +6 -0
- data/test/fixtures/righter_rights.yml +21 -0
- data/test/fixtures/righter_roles.yml +29 -0
- data/test/fixtures/users.yml +27 -0
- data/test/functional/doors_controller_test.rb +71 -0
- data/test/righter_test.rb +9 -0
- data/test/test_helper.rb +54 -0
- data/test/unit/righter_for_resource_test.rb +137 -0
- data/test/unit/righter_right_test.rb +74 -0
- data/test/unit/righter_role_test.rb +197 -0
- data/test/unit/righter_user_test.rb +271 -0
- metadata +271 -0
data/test/test_helper.rb
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
require 'codeclimate-test-reporter'
|
|
2
|
+
require 'coveralls'
|
|
3
|
+
|
|
4
|
+
CodeClimate::TestReporter.start
|
|
5
|
+
|
|
6
|
+
Coveralls.wear!
|
|
7
|
+
# Configure Rails Environment
|
|
8
|
+
ENV['RAILS_ENV'] = 'test'
|
|
9
|
+
|
|
10
|
+
require File.expand_path('../../test/dummy/config/environment.rb', __FILE__)
|
|
11
|
+
ActiveRecord::Migrator.migrations_paths = [File.expand_path('../../test/dummy/db/migrate', __FILE__)]
|
|
12
|
+
|
|
13
|
+
ActiveRecord::Migrator.migrate File.expand_path('../../db/migrate/', __FILE__)
|
|
14
|
+
ActiveRecord::Migrator.migrate File.expand_path('../dummy/db/migrate/', __FILE__)
|
|
15
|
+
|
|
16
|
+
require 'rails/test_help'
|
|
17
|
+
require 'factory_girl_rails'
|
|
18
|
+
|
|
19
|
+
FactoryGirl.definition_file_paths << File.join(File.dirname(__FILE__), 'factories')
|
|
20
|
+
FactoryGirl.find_definitions
|
|
21
|
+
# Filter out Minitest backtrace while allowing backtrace from other libraries
|
|
22
|
+
# to be shown.
|
|
23
|
+
|
|
24
|
+
Minitest.backtrace_filter = Minitest::BacktraceFilter.new
|
|
25
|
+
|
|
26
|
+
# Load support files
|
|
27
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
|
28
|
+
|
|
29
|
+
# Load fixtures from the engine
|
|
30
|
+
if ActiveSupport::TestCase.respond_to?(:fixture_path=)
|
|
31
|
+
ActiveSupport::TestCase.fixture_path = File.expand_path('../fixtures', __FILE__)
|
|
32
|
+
ActionDispatch::IntegrationTest.fixture_path = ActiveSupport::TestCase.fixture_path
|
|
33
|
+
ActiveSupport::TestCase.fixtures :all
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def sign_in(user)
|
|
37
|
+
User.current_user = user
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def sign_out
|
|
41
|
+
User.current_user = nil
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def count_queries(&block)
|
|
45
|
+
count = 0
|
|
46
|
+
|
|
47
|
+
counter_f = ->(_name, _started, _finished, _unique_id, payload) {
|
|
48
|
+
count += 1 unless payload[:name].in? %w( CACHE SCHEMA )
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
ActiveSupport::Notifications.subscribed(counter_f, 'sql.active_record', &block)
|
|
52
|
+
|
|
53
|
+
count
|
|
54
|
+
end
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class RighterForResourceTest < ActiveSupport::TestCase
|
|
4
|
+
class TestNonARResource
|
|
5
|
+
include RighterForResource
|
|
6
|
+
|
|
7
|
+
def initialize(id)
|
|
8
|
+
@id = id
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def righter_right_resource_id
|
|
12
|
+
@id
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
test 'methods are defined' do
|
|
17
|
+
instance = TestNonARResource.new(1)
|
|
18
|
+
door = Door.new
|
|
19
|
+
|
|
20
|
+
assert TestNonARResource.respond_to?(:create_righter_right)
|
|
21
|
+
assert TestNonARResource.respond_to?(:destroy_righter_right)
|
|
22
|
+
assert TestNonARResource.respond_to?(:righter_right)
|
|
23
|
+
assert !TestNonARResource.respond_to?(:auto_manage_righter_right)
|
|
24
|
+
|
|
25
|
+
assert instance.respond_to?(:create_righter_right)
|
|
26
|
+
assert instance.respond_to?(:destroy_righter_right)
|
|
27
|
+
assert instance.respond_to?(:righter_right)
|
|
28
|
+
assert !instance.respond_to?(:auto_manage_righter_right)
|
|
29
|
+
|
|
30
|
+
assert Door.respond_to?(:create_righter_right)
|
|
31
|
+
assert Door.respond_to?(:destroy_righter_right)
|
|
32
|
+
assert Door.respond_to?(:righter_right)
|
|
33
|
+
assert Door.respond_to?(:auto_manage_righter_right)
|
|
34
|
+
|
|
35
|
+
assert door.respond_to?(:create_righter_right)
|
|
36
|
+
assert door.respond_to?(:destroy_righter_right)
|
|
37
|
+
assert door.respond_to?(:righter_right)
|
|
38
|
+
assert !door.respond_to?(:auto_manage_righter_right)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
test 'role creation with non AR object' do
|
|
42
|
+
role = FactoryGirl.create(:righter_role, name: 'admin')
|
|
43
|
+
|
|
44
|
+
assert_no_difference('RighterRight.count') do
|
|
45
|
+
TestNonARResource.new(1)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
assert_difference('RighterRight.count', 1) do
|
|
49
|
+
assert_no_difference('RighterRightsRighterRole.count') do
|
|
50
|
+
right = TestNonARResource.new(1).create_righter_right :manage
|
|
51
|
+
assert_equal 'manage_RighterForResourceTest::TestNonARResource_1', right.name
|
|
52
|
+
assert_equal 'RighterForResourceTest::TestNonARResource', right.resource_class
|
|
53
|
+
assert_equal 1, right.resource_id
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
assert_difference('RighterRight.count', -1) do
|
|
58
|
+
TestNonARResource.new(1).destroy_righter_right :manage
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
assert_difference('RighterRight.count', 1) do
|
|
62
|
+
assert_difference('RighterRightsRighterRole.count', 1) do
|
|
63
|
+
assert_equal 0, role.reload.righter_rights.size
|
|
64
|
+
right = TestNonARResource.new(1).create_righter_right :manage, auto_associate_roles: [:admin]
|
|
65
|
+
assert_equal 1, role.reload.righter_rights.size
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
assert_difference('RighterRight.count', -1) do
|
|
70
|
+
assert_difference('RighterRightsRighterRole.count', -1) do
|
|
71
|
+
TestNonARResource.new(1).destroy_righter_right :manage
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
test 'role creation with automanaged AR object' do
|
|
77
|
+
admin_role = FactoryGirl.create(:righter_role, name: 'admin')
|
|
78
|
+
user_role = FactoryGirl.create(:righter_role, name: 'user')
|
|
79
|
+
|
|
80
|
+
assert_no_difference('RighterRight.count') do
|
|
81
|
+
FactoryGirl.create(:player)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
door = nil
|
|
85
|
+
assert_difference('RighterRight.count', 5) do
|
|
86
|
+
assert_difference('RighterRightsRighterRole.count', 3) do
|
|
87
|
+
assert RighterRight.where('name like ?', 'paint_Door_%').empty?
|
|
88
|
+
assert RighterRight.where('name like ?', 'change_Door_%').empty?
|
|
89
|
+
assert RighterRight.where('name like ?', 'open_Door_%').empty?
|
|
90
|
+
assert_equal 0, admin_role.righter_rights.count
|
|
91
|
+
assert_equal 0, user_role.righter_rights.count
|
|
92
|
+
door = FactoryGirl.create(:door)
|
|
93
|
+
assert RighterRight.find_by_name("paint_Door_#{door.id}").present?
|
|
94
|
+
assert RighterRight.find_by_name("change_Door_#{door.id}").present?
|
|
95
|
+
assert RighterRight.find_by_name("open_Door_#{door.id}").present?
|
|
96
|
+
puts admin_role.id
|
|
97
|
+
puts
|
|
98
|
+
RighterRightsRighterRole.all.each do |r|
|
|
99
|
+
puts r.inspect
|
|
100
|
+
end
|
|
101
|
+
# assert_equal 2, admin_role.righter_rights.size
|
|
102
|
+
assert_equal 1, user_role.righter_rights.size
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
assert_difference('RighterRight.count', -4) do
|
|
107
|
+
assert_difference('RighterRightsRighterRole.count', -3) do
|
|
108
|
+
door.destroy
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
test 'class methods do create class rights' do
|
|
114
|
+
r = Door.create_righter_right(:manage)
|
|
115
|
+
assert_equal 'manage_Door', r.name
|
|
116
|
+
assert_equal 'Door', r.resource_class
|
|
117
|
+
assert_nil r.resource_id
|
|
118
|
+
|
|
119
|
+
assert_equal r, Door.righter_right(:manage)
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
test '.auto_manage_righter_right accepts proc as parent right option' do
|
|
123
|
+
FactoryGirl.create(:righter_role, name: 'admin')
|
|
124
|
+
FactoryGirl.create(:righter_role, name: 'user')
|
|
125
|
+
|
|
126
|
+
house = FactoryGirl.create :house
|
|
127
|
+
door = FactoryGirl.create :door, house: house
|
|
128
|
+
|
|
129
|
+
assert house.righter_right(:build).present?
|
|
130
|
+
assert door.righter_right(:close).present?
|
|
131
|
+
assert_equal house.righter_right(:build), door.righter_right(:close).parent
|
|
132
|
+
|
|
133
|
+
door.destroy
|
|
134
|
+
|
|
135
|
+
refute door.righter_right(:close).present?
|
|
136
|
+
end
|
|
137
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class RighterRightTest < ActiveSupport::TestCase
|
|
4
|
+
fixtures :righter_rights
|
|
5
|
+
|
|
6
|
+
test 'add_access_to controller/actions raises error if actions is not array or controller is nil' do
|
|
7
|
+
r = righter_rights :kill
|
|
8
|
+
assert_raise RighterError do
|
|
9
|
+
r.add_access_to actions: :smth
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
assert_raise RighterError do
|
|
13
|
+
r.add_access_to actions: [:smth]
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
assert_raise RighterError do
|
|
17
|
+
r.add_access_to {}
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
assert_nothing_raised do
|
|
21
|
+
r.add_access_to controller: :james, actions: [:bond]
|
|
22
|
+
r2 = RighterRight.find_by_name :kill
|
|
23
|
+
assert_equal :james, r2.controller.to_sym
|
|
24
|
+
assert_equal [:bond], r2.actions
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
test 'hierarchical browsing is based in parent_id' do
|
|
29
|
+
r1 = RighterRight.create! name: '1'
|
|
30
|
+
r11 = RighterRight.create! name: '11', parent_id: r1.id
|
|
31
|
+
r12 = RighterRight.create! name: '12', parent_id: r1.id
|
|
32
|
+
r121 = RighterRight.create! name: '121', parent_id: r12.id
|
|
33
|
+
|
|
34
|
+
r2 = RighterRight.create! name: '2'
|
|
35
|
+
|
|
36
|
+
r3 = RighterRight.create! name: '3'
|
|
37
|
+
RighterRight.create! name: '31', parent_id: r3.id
|
|
38
|
+
r32 = RighterRight.create! name: '32', parent_id: r3.id
|
|
39
|
+
RighterRight.create! name: '321', parent_id: r32.id
|
|
40
|
+
|
|
41
|
+
assert_equal [], ([r12, r11] - r1.children)
|
|
42
|
+
assert_equal [], r11.children
|
|
43
|
+
assert_equal [r121], r12.children
|
|
44
|
+
assert_equal [], r121.children
|
|
45
|
+
|
|
46
|
+
assert_equal [], r2.children
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
test 'raise ActiveRecord::RecordInvalid on attempt to create cycle in hierarchy of righter rights' do
|
|
50
|
+
r1 = RighterRight.create! name: '1'
|
|
51
|
+
r2 = RighterRight.create! name: '2', parent_id: r1.id
|
|
52
|
+
r3 = RighterRight.create! name: '3', parent_id: r2.id
|
|
53
|
+
|
|
54
|
+
assert_raise ActiveRecord::RecordInvalid do
|
|
55
|
+
r1.parent_id = r3.id
|
|
56
|
+
r1.save!
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
test 'cached_find_by_name load the data only once' do
|
|
61
|
+
RighterRight.clear_cache
|
|
62
|
+
count_sql = count_queries do
|
|
63
|
+
RighterRight.cached_find_by_name :kill
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
assert 1, count_sql
|
|
67
|
+
|
|
68
|
+
count_no_sql = count_queries do
|
|
69
|
+
RighterRight.cached_find_by_name :kill
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
assert 0, count_no_sql
|
|
73
|
+
end
|
|
74
|
+
end
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class RighterRoleTest < ActiveSupport::TestCase
|
|
4
|
+
fixtures :righter_rights, :righter_roles
|
|
5
|
+
|
|
6
|
+
def setup
|
|
7
|
+
RighterRightsRighterRole.delete_all
|
|
8
|
+
RighterRoleGrant.delete_all
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
test 'add_right to role creates new entry in RighterRolesRighterRights table' do
|
|
12
|
+
r = righter_rights :kill
|
|
13
|
+
r1 = righter_roles :secret_agent
|
|
14
|
+
assert_difference 'r1.reload.righter_rights.size', 1 do
|
|
15
|
+
r1.add_right r
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
assert_no_difference 'r1.righter_rights.size' do
|
|
19
|
+
r1.add_right r
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
test 'add_self_and_children_rights to role creates according entries in RighterRolesRighterRights table' do
|
|
24
|
+
role = FactoryGirl.create :righter_role
|
|
25
|
+
r1 = FactoryGirl.create :righter_right, name: 'Parent right'
|
|
26
|
+
FactoryGirl.create :righter_right, name: 'Child right one', parent_id: r1.id
|
|
27
|
+
FactoryGirl.create :righter_right, name: 'Child right two', parent_id: r1.id
|
|
28
|
+
|
|
29
|
+
assert_difference 'role.reload.righter_rights.size', 3 do
|
|
30
|
+
role.add_self_and_child_rights r1
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
test 'remove_right removes association between role and right but keep the right itself' do
|
|
35
|
+
ro1 = righter_roles :secret_agent
|
|
36
|
+
r1 = righter_rights :kill
|
|
37
|
+
|
|
38
|
+
ro1.add_right r1
|
|
39
|
+
assert ro1.righter_rights.include?(r1)
|
|
40
|
+
|
|
41
|
+
ro1.remove_right r1
|
|
42
|
+
assert !ro1.reload.righter_rights.include?(r1)
|
|
43
|
+
|
|
44
|
+
assert r1.reload
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
test 'unique role name is enforced' do
|
|
48
|
+
ro1 = righter_roles :secret_agent
|
|
49
|
+
assert_raise ActiveRecord::RecordInvalid do
|
|
50
|
+
RighterRole.create! name: :secret_agent
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
test 'add_right and remove_right will raise error for bad input' do
|
|
55
|
+
ro1 = righter_roles :secret_agent
|
|
56
|
+
assert_raise RighterError do
|
|
57
|
+
ro1.add_right 'smth'
|
|
58
|
+
end
|
|
59
|
+
assert_raise RighterError do
|
|
60
|
+
ro1.remove_right 'smth2'
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
test 'right-role association is removed when right is deleted' do
|
|
65
|
+
ro1 = righter_roles :secret_agent
|
|
66
|
+
r1 = righter_rights :kill
|
|
67
|
+
assert !RighterRightsRighterRole.exists?(righter_role_id: ro1.id, righter_right_id: r1.id)
|
|
68
|
+
|
|
69
|
+
assert_difference 'RighterRightsRighterRole.count', 1 do
|
|
70
|
+
ro1.add_right r1
|
|
71
|
+
end
|
|
72
|
+
assert_difference 'RighterRightsRighterRole.count', -1 do
|
|
73
|
+
r1.destroy
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
test 'right-role association is removed when role is deleted' do
|
|
78
|
+
ro1 = righter_roles :secret_agent
|
|
79
|
+
r1 = righter_rights :kill
|
|
80
|
+
assert !RighterRightsRighterRole.exists?(righter_role_id: ro1.id, righter_right_id: r1.id)
|
|
81
|
+
ro1.add_right r1
|
|
82
|
+
|
|
83
|
+
assert_difference 'RighterRightsRighterRole.count', -1 do
|
|
84
|
+
ro1.destroy
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
test 'parent right is assigned automatically if any of children rights is assigned to role' do
|
|
89
|
+
r1 = RighterRight.create! name: '1'
|
|
90
|
+
r11 = RighterRight.create! name: '11', parent_id: r1.id
|
|
91
|
+
|
|
92
|
+
roleA = RighterRole.create! name: 'A', human_name: 'hmmm'
|
|
93
|
+
assert !roleA.righter_rights.include?(r1)
|
|
94
|
+
roleA.add_right r11
|
|
95
|
+
assert roleA.reload.righter_rights.include?(r1)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
test 'all children rights are deassigned if parent right is deassigned from role' do
|
|
99
|
+
r1 = RighterRight.create! name: '1'
|
|
100
|
+
r11 = RighterRight.create! name: '11', parent_id: r1.id
|
|
101
|
+
r12 = RighterRight.create! name: '12', parent_id: r1.id
|
|
102
|
+
r121 = RighterRight.create! name: '121', parent_id: r12.id
|
|
103
|
+
|
|
104
|
+
roleA = RighterRole.create! name: 'A', human_name: 'b'
|
|
105
|
+
roleA.add_right r1
|
|
106
|
+
roleA.add_right r11
|
|
107
|
+
roleA.add_right r121
|
|
108
|
+
|
|
109
|
+
assert roleA.reload.righter_rights.include?(r1)
|
|
110
|
+
assert roleA.reload.righter_rights.include?(r11)
|
|
111
|
+
assert roleA.reload.righter_rights.include?(r121)
|
|
112
|
+
|
|
113
|
+
roleA.remove_right r1
|
|
114
|
+
|
|
115
|
+
assert !roleA.reload.righter_rights.include?(r1)
|
|
116
|
+
assert !roleA.reload.righter_rights.include?(r11)
|
|
117
|
+
assert !roleA.reload.righter_rights.include?(r121)
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
test 'righter_role.allow_to_grant_role will add only unique entry to RighterRoleGrant' do
|
|
121
|
+
r1 = righter_roles :one
|
|
122
|
+
r2 = righter_roles :two
|
|
123
|
+
|
|
124
|
+
assert_difference 'RighterRoleGrant.count', 1 do
|
|
125
|
+
r1.allow_to_grant_role r2
|
|
126
|
+
end
|
|
127
|
+
assert_no_difference 'RighterRoleGrant.count' do
|
|
128
|
+
r1.allow_to_grant_role r2
|
|
129
|
+
end
|
|
130
|
+
assert_difference 'RighterRoleGrant.count', -1 do
|
|
131
|
+
r1.destroy
|
|
132
|
+
end
|
|
133
|
+
assert_difference 'RighterRoleGrant.count', 4 do # FIXME: no difference shall be here
|
|
134
|
+
RighterRoleGrant.create(righter_role_id: r1.id, grantable_righter_role_id: r2.id)
|
|
135
|
+
RighterRoleGrant.create(righter_role_id: r1.id, grantable_righter_role_id: r2.id)
|
|
136
|
+
RighterRoleGrant.create(righter_role_id: r1.id, grantable_righter_role_id: r2.id)
|
|
137
|
+
RighterRoleGrant.create(righter_role_id: r1.id, grantable_righter_role_id: r2.id)
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
test 'righter_role.disallow_to_grant_role is silent when removing ungranted role' do
|
|
142
|
+
r1 = righter_roles :one
|
|
143
|
+
r2 = righter_roles :two
|
|
144
|
+
|
|
145
|
+
r1.allow_to_grant_role r2
|
|
146
|
+
|
|
147
|
+
assert_difference 'RighterRoleGrant.count', -1 do
|
|
148
|
+
r1.disallow_to_grant_role r2
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
assert_no_difference 'RighterRoleGrant.count', 0 do
|
|
152
|
+
r1.disallow_to_grant_role r2
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
test 'righter_role.grantable_roles reflects the state in RighterRoleGrant table' do
|
|
157
|
+
r1 = righter_roles :one
|
|
158
|
+
r2 = righter_roles :two
|
|
159
|
+
assert !r1.grantable_roles.include?(r2)
|
|
160
|
+
r1.allow_to_grant_role r2
|
|
161
|
+
assert r1.reload.grantable_roles.include?(r2)
|
|
162
|
+
r1.disallow_to_grant_role r2
|
|
163
|
+
assert !r1.grantable_roles.include?(r2)
|
|
164
|
+
assert !r1.reload.grantable_roles.include?(r2)
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
test 'disallow_all_granted_roles removes all granted roles associated to role' do
|
|
168
|
+
r1 = righter_roles :one
|
|
169
|
+
r2 = righter_roles :two
|
|
170
|
+
r1.allow_to_grant_role r2
|
|
171
|
+
assert r1.grantable_roles.include?(r2), 'grantable role added'
|
|
172
|
+
assert r1.reload.grantable_roles.include?(r2), 'grantable role added and saved'
|
|
173
|
+
r1.disallow_all_granted_roles
|
|
174
|
+
assert !r1.reload.grantable_roles.include?(r2), 'and it is saved'
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
test 'all associated entries in role_grants are deleted on role destroy' do
|
|
178
|
+
r1 = righter_roles :one
|
|
179
|
+
r2 = righter_roles :two
|
|
180
|
+
r3 = righter_roles :three
|
|
181
|
+
r1.allow_to_grant_role r2
|
|
182
|
+
r2.allow_to_grant_role r3
|
|
183
|
+
|
|
184
|
+
assert_difference 'RighterRoleGrant.count', -2 do
|
|
185
|
+
r2.destroy
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
test 'unique names' do
|
|
190
|
+
r1 = righter_roles :one
|
|
191
|
+
ri = righter_rights :kill
|
|
192
|
+
|
|
193
|
+
assert_difference 'RighterRightsRighterRole.count' do
|
|
194
|
+
r1.add_right ri
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
end
|