arpa 0.0.2
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/.gitignore +42 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +138 -0
- data/Rakefile +2 -0
- data/arpa.gemspec +33 -0
- data/lib/arpa.rb +91 -0
- data/lib/arpa/additions/resource.rb +29 -0
- data/lib/arpa/assets/stylesheets/ar_accordion.scss +80 -0
- data/lib/arpa/controllers/profiles_controller.rb +106 -0
- data/lib/arpa/controllers/resources_controller.rb +47 -0
- data/lib/arpa/controllers/roles_controller.rb +106 -0
- data/lib/arpa/data_mappers/action_mapper.rb +13 -0
- data/lib/arpa/data_mappers/base.rb +117 -0
- data/lib/arpa/data_mappers/profile_mapper.rb +14 -0
- data/lib/arpa/data_mappers/resource_mapper.rb +11 -0
- data/lib/arpa/data_mappers/role_mapper.rb +14 -0
- data/lib/arpa/entities/action.rb +24 -0
- data/lib/arpa/entities/permissions.rb +35 -0
- data/lib/arpa/entities/profile.rb +22 -0
- data/lib/arpa/entities/resource.rb +58 -0
- data/lib/arpa/entities/role.rb +28 -0
- data/lib/arpa/exceptions/record_invalid.rb +13 -0
- data/lib/arpa/repositories/actions/creator.rb +18 -0
- data/lib/arpa/repositories/actions/finder.rb +23 -0
- data/lib/arpa/repositories/actions/remover.rb +22 -0
- data/lib/arpa/repositories/actions/repository_action.rb +15 -0
- data/lib/arpa/repositories/base.rb +15 -0
- data/lib/arpa/repositories/profiles/creator.rb +18 -0
- data/lib/arpa/repositories/profiles/finder.rb +29 -0
- data/lib/arpa/repositories/profiles/remover.rb +29 -0
- data/lib/arpa/repositories/profiles/repository_profile.rb +12 -0
- data/lib/arpa/repositories/profiles/updater.rb +23 -0
- data/lib/arpa/repositories/registrator.rb +44 -0
- data/lib/arpa/repositories/resources/creator.rb +18 -0
- data/lib/arpa/repositories/resources/finder.rb +45 -0
- data/lib/arpa/repositories/resources/remover.rb +22 -0
- data/lib/arpa/repositories/resources/repository_resource.rb +12 -0
- data/lib/arpa/repositories/roles/creator.rb +18 -0
- data/lib/arpa/repositories/roles/finder.rb +29 -0
- data/lib/arpa/repositories/roles/remover.rb +29 -0
- data/lib/arpa/repositories/roles/repository_role.rb +13 -0
- data/lib/arpa/repositories/roles/updater.rb +23 -0
- data/lib/arpa/services/actions/create/action_creator.rb +50 -0
- data/lib/arpa/services/actions/remove/action_remover.rb +24 -0
- data/lib/arpa/services/base.rb +41 -0
- data/lib/arpa/services/profiles/create/profile_creator.rb +32 -0
- data/lib/arpa/services/profiles/profile_manager_creator.rb +22 -0
- data/lib/arpa/services/profiles/profile_manager_remover.rb +24 -0
- data/lib/arpa/services/profiles/profile_manager_updater.rb +22 -0
- data/lib/arpa/services/profiles/remove/profile_remover.rb +25 -0
- data/lib/arpa/services/profiles/update/profile_updater.rb +32 -0
- data/lib/arpa/services/resources/create/resource_creator.rb +42 -0
- data/lib/arpa/services/resources/remove/resource_remover.rb +31 -0
- data/lib/arpa/services/resources/resource_manager_creator.rb +50 -0
- data/lib/arpa/services/roles/create/role_creator.rb +33 -0
- data/lib/arpa/services/roles/remove/role_remover.rb +25 -0
- data/lib/arpa/services/roles/role_manager_creator.rb +23 -0
- data/lib/arpa/services/roles/role_manager_remover.rb +23 -0
- data/lib/arpa/services/roles/role_manager_updater.rb +22 -0
- data/lib/arpa/services/roles/update/role_updater.rb +32 -0
- data/lib/arpa/services/verifier.rb +24 -0
- data/lib/arpa/validators/action_validator.rb +17 -0
- data/lib/arpa/validators/profile_validator.rb +19 -0
- data/lib/arpa/validators/resource_validator.rb +17 -0
- data/lib/arpa/validators/role_validator.rb +20 -0
- data/lib/arpa/version.rb +3 -0
- data/lib/arpa/views/profiles/_form.html.erb +41 -0
- data/lib/arpa/views/profiles/edit.html.erb +6 -0
- data/lib/arpa/views/profiles/index.html.erb +29 -0
- data/lib/arpa/views/profiles/new.html.erb +5 -0
- data/lib/arpa/views/profiles/show.html.erb +37 -0
- data/lib/arpa/views/resources/index.html.erb +27 -0
- data/lib/arpa/views/resources/show.html.erb +33 -0
- data/lib/arpa/views/roles/_form.html.erb +55 -0
- data/lib/arpa/views/roles/edit.html.erb +6 -0
- data/lib/arpa/views/roles/index.html.erb +29 -0
- data/lib/arpa/views/roles/new.html.erb +5 -0
- data/lib/arpa/views/roles/show.html.erb +37 -0
- data/lib/config/locales/arpa.en.yml +38 -0
- data/lib/generators/ar/install_generator.rb +74 -0
- data/lib/generators/ar/templates/migration.rb +48 -0
- data/spec/factories/repository_actions.rb +19 -0
- data/spec/factories/repository_profiles.rb +11 -0
- data/spec/factories/repository_resources.rb +15 -0
- data/spec/factories/repository_roles.rb +11 -0
- data/spec/lib/ar/additions/resource_spec.rb +34 -0
- data/spec/lib/ar/data_mappers/action_mapper_spec.rb +46 -0
- data/spec/lib/ar/data_mappers/base_spec.rb +47 -0
- data/spec/lib/ar/data_mappers/profile_mapper_spec.rb +43 -0
- data/spec/lib/ar/data_mappers/resource_mapper_spec.rb +38 -0
- data/spec/lib/ar/data_mappers/role_mapper_spec.rb +47 -0
- data/spec/lib/ar/entities/action_spec.rb +19 -0
- data/spec/lib/ar/entities/permissions_spec.rb +61 -0
- data/spec/lib/ar/entities/resource_spec.rb +35 -0
- data/spec/lib/ar/repositories/actions/finder_spec.rb +40 -0
- data/spec/lib/ar/repositories/base_spec.rb +37 -0
- data/spec/lib/ar/repositories/profiles/finder_spec.rb +43 -0
- data/spec/lib/ar/repositories/profiles/remover_spec.rb +31 -0
- data/spec/lib/ar/repositories/resources/finder_spec.rb +92 -0
- data/spec/lib/ar/repositories/resources/remover_spec.rb +38 -0
- data/spec/lib/ar/repositories/roles/finder_spec.rb +43 -0
- data/spec/lib/ar/repositories/roles/remover_spec.rb +31 -0
- data/spec/lib/ar/requests/profiles/create_request_spec.rb +51 -0
- data/spec/lib/ar/requests/profiles/remove_request_spec.rb +36 -0
- data/spec/lib/ar/requests/resources/create_request_spec.rb +107 -0
- data/spec/lib/ar/requests/roles/create_request_spec.rb +40 -0
- data/spec/lib/ar/requests/roles/remove_request_spec.rb +23 -0
- data/spec/lib/ar/requests/roles/update_request_spec.rb +50 -0
- data/spec/lib/ar/services/actions/create/action_creator_spec.rb +88 -0
- data/spec/lib/ar/services/actions/remove/action_remover_spec.rb +36 -0
- data/spec/lib/ar/services/base_spec.rb +94 -0
- data/spec/lib/ar/services/profiles/create/profile_creator_spec.rb +68 -0
- data/spec/lib/ar/services/profiles/profile_manager_creator_spec.rb +31 -0
- data/spec/lib/ar/services/profiles/profile_manager_remover_spec.rb +44 -0
- data/spec/lib/ar/services/profiles/profile_manager_updater_spec.rb +31 -0
- data/spec/lib/ar/services/profiles/remove/profile_remover_spec.rb +45 -0
- data/spec/lib/ar/services/profiles/update/profile_updater_spec.rb +68 -0
- data/spec/lib/ar/services/resources/create/resource_creator_spec.rb +87 -0
- data/spec/lib/ar/services/resources/remove/resource_remover_spec.rb +50 -0
- data/spec/lib/ar/services/resources/resource_manager_creator_spec.rb +71 -0
- data/spec/lib/ar/services/roles/create/role_creator_spec.rb +68 -0
- data/spec/lib/ar/services/roles/remove/role_remover_spec.rb +50 -0
- data/spec/lib/ar/services/roles/role_manager_creator_spec.rb +31 -0
- data/spec/lib/ar/services/roles/role_manager_remover_spec.rb +32 -0
- data/spec/lib/ar/services/roles/role_manager_updater_spec.rb +31 -0
- data/spec/lib/ar/services/roles/update/role_updater_spec.rb +68 -0
- data/spec/lib/ar/services/verifier_spec.rb +44 -0
- data/spec/lib/ar/validators/action_validator_spec.rb +15 -0
- data/spec/lib/ar/validators/profile_validator_spec.rb +16 -0
- data/spec/lib/ar/validators/resource_validator_spec.rb +15 -0
- data/spec/lib/ar/validators/role_validator_spec.rb +16 -0
- data/spec/spec_helper.rb +33 -0
- data/spec/support/repositories/test_repository.rb +2 -0
- data/spec/support/schema.rb +58 -0
- metadata +380 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Arpa::Services::Profiles::ProfileManagerUpdater, type: :service, fast: true do
|
|
4
|
+
|
|
5
|
+
let(:profile_updater) { double }
|
|
6
|
+
let(:params) { {profile: {name: 'profile_name', description: 'profile_description', role_ids: [1, 2]}} }
|
|
7
|
+
let(:success_proc) { ->(r) {} }
|
|
8
|
+
let(:callback) { {success: success_proc, fail: ->(e) {raise e} } }
|
|
9
|
+
|
|
10
|
+
let(:setup_updaters) do
|
|
11
|
+
allow(Arpa::Services::Profiles::Update::ProfileUpdater).to receive(:new).and_return(profile_updater)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
let(:setup_updaters_methods) do
|
|
15
|
+
allow(profile_updater).to receive(:update)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
let(:result) { subject.update params, callback }
|
|
19
|
+
|
|
20
|
+
before do
|
|
21
|
+
setup_updaters
|
|
22
|
+
setup_updaters_methods
|
|
23
|
+
allow(success_proc).to receive(:call)
|
|
24
|
+
result
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it 'profile_updater should call :update with parameters' do
|
|
28
|
+
expect(profile_updater).to have_received(:update).with(params[:profile]).once
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Arpa::Services::Profiles::Remove::ProfileRemover, type: :service, fast: true do
|
|
4
|
+
|
|
5
|
+
let(:profile) { double }
|
|
6
|
+
|
|
7
|
+
describe 'removing profile' do
|
|
8
|
+
let(:remover_repo_class) { Arpa::Repositories::Profiles::Remover }
|
|
9
|
+
let(:remover_repo) { instance_double remover_repo_class }
|
|
10
|
+
|
|
11
|
+
before do
|
|
12
|
+
allow(remover_repo_class).to receive(:new).and_return(remover_repo)
|
|
13
|
+
setup
|
|
14
|
+
subject.remove(profile, disable)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
context 'when pass nil as disable param' do
|
|
18
|
+
let(:disable) { nil }
|
|
19
|
+
|
|
20
|
+
let(:setup) { allow(remover_repo).to receive(:destroy) }
|
|
21
|
+
|
|
22
|
+
it 'remover repository should call :destroy once' do
|
|
23
|
+
expect(remover_repo).to have_received(:destroy).once
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it 'remover repository should call :new once' do
|
|
27
|
+
expect(remover_repo_class).to have_received(:new).once
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
context 'when pass true as disable param' do
|
|
33
|
+
let(:disable) { true }
|
|
34
|
+
|
|
35
|
+
let(:setup) { allow(remover_repo).to receive(:disable) }
|
|
36
|
+
|
|
37
|
+
it 'remover repository should call :disable once' do
|
|
38
|
+
expect(remover_repo).to have_received(:disable).once
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Arpa::Services::Profiles::Update::ProfileUpdater, type: :service, fast: true do
|
|
4
|
+
|
|
5
|
+
let(:role_entity_class) { Arpa::Entities::Profile }
|
|
6
|
+
let(:profile) { double }
|
|
7
|
+
let(:params) { double }
|
|
8
|
+
|
|
9
|
+
let(:profile_updated) { subject.update(params) }
|
|
10
|
+
let(:validator_class) { Arpa::Validators::ProfileValidator }
|
|
11
|
+
let(:validator) { instance_double validator_class }
|
|
12
|
+
|
|
13
|
+
before do
|
|
14
|
+
allow(validator_class).to receive(:new).and_return(validator)
|
|
15
|
+
allow(role_entity_class).to receive(:new).and_return(profile)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
describe 'updating a profile' do
|
|
19
|
+
|
|
20
|
+
context 'when profile is invalid' do
|
|
21
|
+
let(:errors) { instance_double('ActiveModel::Errors') }
|
|
22
|
+
|
|
23
|
+
before do
|
|
24
|
+
allow(validator).to receive(:valid?).and_return false
|
|
25
|
+
allow(validator).to receive(:errors).and_return(errors)
|
|
26
|
+
allow(errors).to receive(:messages)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it 'should raise a Arpa::Exceptions::RecordInvalid with :errors of ActiveModel::Errors' do
|
|
30
|
+
expect { profile_updated }.to raise_error { |error|
|
|
31
|
+
expect(error).to be_a Arpa::Exceptions::RecordInvalid
|
|
32
|
+
expect(error.errors).not_to be_nil
|
|
33
|
+
}
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
context 'when profile is valid' do
|
|
39
|
+
let(:updater_repo_class) { Arpa::Repositories::Profiles::Updater }
|
|
40
|
+
let(:updater_repo) { instance_double updater_repo_class }
|
|
41
|
+
|
|
42
|
+
before do
|
|
43
|
+
allow(validator).to receive(:valid?).and_return true
|
|
44
|
+
allow(updater_repo_class).to receive(:new).and_return(updater_repo)
|
|
45
|
+
allow(updater_repo).to receive(:update).with(profile)
|
|
46
|
+
profile_updated
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it 'updater repository should call :new' do
|
|
50
|
+
expect(updater_repo_class).to have_received(:new)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it 'updater_repo should call update method with profile as parameter' do
|
|
54
|
+
expect(updater_repo).to have_received(:update).with(profile).once
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
context 'when build the profile' do
|
|
58
|
+
|
|
59
|
+
it 'entity profile should call new method' do
|
|
60
|
+
expect(role_entity_class).to have_received(:new).once
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Arpa::Services::Resources::Create::ResourceCreator, type: :service, fast: true do
|
|
4
|
+
|
|
5
|
+
let(:resource_entity_class) { Arpa::Entities::Resource }
|
|
6
|
+
let(:resource) { double full_name: 'UsersController' }
|
|
7
|
+
let(:resourceable) { double }
|
|
8
|
+
let(:resource_found) { nil }
|
|
9
|
+
|
|
10
|
+
let(:resource_created) { subject.create(resourceable) }
|
|
11
|
+
let(:validator_class) { Arpa::Validators::ResourceValidator }
|
|
12
|
+
let(:validator) { instance_double validator_class }
|
|
13
|
+
|
|
14
|
+
let(:finder_repo_class) { Arpa::Repositories::Resources::Finder}
|
|
15
|
+
let(:finder_repo) { instance_double finder_repo_class }
|
|
16
|
+
|
|
17
|
+
before do
|
|
18
|
+
allow(finder_repo_class).to receive(:new).and_return(finder_repo)
|
|
19
|
+
allow(finder_repo).to receive(:by_full_name).with(kind_of(String)).and_return(resource_found)
|
|
20
|
+
|
|
21
|
+
allow(validator_class).to receive(:new).with(resource).and_return(validator)
|
|
22
|
+
allow(resource_entity_class).to receive(:new).and_return(resource)
|
|
23
|
+
allow(resource).to receive(:build_correct_name)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
describe 'creating a new resource' do
|
|
27
|
+
|
|
28
|
+
context 'when resource is invalid' do
|
|
29
|
+
let(:errors) { instance_double('ActiveModel::Errors') }
|
|
30
|
+
|
|
31
|
+
before do
|
|
32
|
+
allow(validator).to receive(:valid?).and_return false
|
|
33
|
+
allow(validator).to receive(:errors).and_return(errors)
|
|
34
|
+
allow(errors).to receive(:messages)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it 'should raise a Arpa::Exceptions::RecordInvalid with :errors of ActiveModel::Errors' do
|
|
38
|
+
expect { resource_created }.to raise_error { |error|
|
|
39
|
+
expect(error).to be_a Arpa::Exceptions::RecordInvalid
|
|
40
|
+
expect(error.errors).not_to be_nil
|
|
41
|
+
}
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
context 'when resouce already exists' do
|
|
47
|
+
let(:resource_found) { double }
|
|
48
|
+
|
|
49
|
+
it 'should return the resource found' do
|
|
50
|
+
expect(resource_created).to eq resource_found
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
context 'when resource is valid' do
|
|
55
|
+
let(:creator_repo_class) { Arpa::Repositories::Resources::Creator }
|
|
56
|
+
let(:creator_repo) { instance_double creator_repo_class }
|
|
57
|
+
|
|
58
|
+
before do
|
|
59
|
+
allow(validator).to receive(:valid?).and_return true
|
|
60
|
+
allow(creator_repo_class).to receive(:new).and_return(creator_repo)
|
|
61
|
+
allow(creator_repo).to receive(:create).with(resource)
|
|
62
|
+
resource_created
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it 'creator repository should call :new' do
|
|
66
|
+
expect(creator_repo_class).to have_received(:new)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it 'creator_repo should call create method with resource as parameter' do
|
|
70
|
+
expect(creator_repo).to have_received(:create).with(resource).once
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
context 'when build the resource with resourceable' do
|
|
74
|
+
|
|
75
|
+
it 'entity resource should call new method' do
|
|
76
|
+
expect(resource_entity_class).to have_received(:new).once
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it 'resource instance should call build_correct_name method' do
|
|
80
|
+
expect(resource).to have_received(:build_correct_name).once
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
end
|
|
87
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Arpa::Services::Resources::Remove::ResourceRemover, type: :service, fast: true do
|
|
4
|
+
|
|
5
|
+
let(:resource_001) { double full_name: 'UsersController' }
|
|
6
|
+
let(:resource_002) { double full_name: 'OldContactsController' }
|
|
7
|
+
let(:resources) { [resource_001, resource_002]}
|
|
8
|
+
|
|
9
|
+
let(:resourceable_001) { double to_s: 'UsersController' }
|
|
10
|
+
let(:resourceable_002) { double to_s: 'ContactsController' }
|
|
11
|
+
let(:resourceables) { [resourceable_001, resourceable_002]}
|
|
12
|
+
|
|
13
|
+
describe 'removing nonexistent resources' do
|
|
14
|
+
|
|
15
|
+
let(:finder_repo_class) { Arpa::Repositories::Resources::Finder }
|
|
16
|
+
let(:finder_repo) { instance_double finder_repo_class }
|
|
17
|
+
|
|
18
|
+
let(:remover_repo_class) { Arpa::Repositories::Resources::Remover }
|
|
19
|
+
let(:remover_repo) { instance_double remover_repo_class }
|
|
20
|
+
|
|
21
|
+
before do
|
|
22
|
+
allow(finder_repo_class).to receive(:new).and_return(finder_repo)
|
|
23
|
+
allow(finder_repo).to receive(:all).and_return(resources)
|
|
24
|
+
|
|
25
|
+
allow(remover_repo_class).to receive(:new).and_return(remover_repo)
|
|
26
|
+
allow(remover_repo).to receive(:destroy).with(resource_002)
|
|
27
|
+
|
|
28
|
+
subject.remove_nonexistent_resources(resourceables)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it 'finder repository should call :new once' do
|
|
32
|
+
expect(finder_repo_class).to have_received(:new).once
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it 'remover repository should call :new once' do
|
|
36
|
+
expect(remover_repo_class).to have_received(:new).once
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it 'finder repository should call :all once' do
|
|
40
|
+
expect(finder_repo).to have_received(:all).once
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it 'remover repository should call :destroy once' do
|
|
44
|
+
expect(remover_repo).to have_received(:destroy).once
|
|
45
|
+
expect(remover_repo).to have_received(:destroy).with(resource_002).once
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Arpa::Services::Resources::ResourceManagerCreator, type: :service, fast: true do
|
|
4
|
+
|
|
5
|
+
let(:action_remover) { double }
|
|
6
|
+
let(:resource_remover) { double }
|
|
7
|
+
let(:resource_creator) { double }
|
|
8
|
+
let(:action_creator) { double }
|
|
9
|
+
let(:element) { double }
|
|
10
|
+
let(:resourceables) { [resourceable_001, resourceable_002] }
|
|
11
|
+
let(:params) { {resourceables: resourceables} }
|
|
12
|
+
let(:success_proc) { ->(r) {} }
|
|
13
|
+
let(:callback) { {success: success_proc, fail: ->(e) {raise e} } }
|
|
14
|
+
|
|
15
|
+
let(:resourceable_001) { double action_methods: [] }
|
|
16
|
+
let(:resourceable_002) { double action_methods: []}
|
|
17
|
+
let(:resource_created) { double }
|
|
18
|
+
|
|
19
|
+
let(:setup_creators) do
|
|
20
|
+
allow(Arpa::Services::Resources::Create::ResourceCreator).to receive(:new).and_return(resource_creator)
|
|
21
|
+
allow(Arpa::Services::Actions::Create::ActionCreator).to receive(:new).and_return(action_creator)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
let(:setup_removers) do
|
|
25
|
+
allow(Arpa::Services::Resources::Remove::ResourceRemover).to receive(:new).and_return(resource_remover)
|
|
26
|
+
allow(Arpa::Services::Actions::Remove::ActionRemover).to receive(:new).and_return(action_remover)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
let(:setup_creators_methods) do
|
|
30
|
+
allow(resource_creator).to receive(:create).and_return(resource_created)
|
|
31
|
+
allow(action_creator).to receive(:create_many)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
let(:setup_removers_methods) do
|
|
35
|
+
allow(resource_remover).to receive(:remove_nonexistent_resources)
|
|
36
|
+
allow(action_remover).to receive(:remove_nonexistent_actions)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
let(:result) { subject.create params, callback }
|
|
40
|
+
|
|
41
|
+
before do
|
|
42
|
+
setup_creators
|
|
43
|
+
setup_creators_methods
|
|
44
|
+
setup_removers
|
|
45
|
+
setup_removers_methods
|
|
46
|
+
allow(success_proc).to receive(:call)
|
|
47
|
+
result
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it 'resource_remover should call :remove_nonexistent_resources with :resourceables as parameter' do
|
|
51
|
+
expect(resource_remover).to have_received(:remove_nonexistent_resources).with(resourceables).once
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it 'action_remover should call :remove_nonexistent_actions with :action_params as parameter' do
|
|
55
|
+
expect(action_remover).to have_received(:remove_nonexistent_actions).with({resource: resource_created, actions_names: []}).twice
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it 'resource_creator should call :create with :resourceable as parameter' do
|
|
59
|
+
expect(resource_creator).to have_received(:create).with(resourceable_001).once
|
|
60
|
+
expect(resource_creator).to have_received(:create).with(resourceable_002).once
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it 'action_creator should call :create_many with :action_params as parameter' do
|
|
64
|
+
expect(action_creator).to have_received(:create_many).with({resource: resource_created, actions_names: []}).twice
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it 'success callback should be called with Array of resources as parameter' do
|
|
68
|
+
expect(success_proc).to have_received(:call).with([resource_created, resource_created])
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Arpa::Services::Roles::Create::RoleCreator, type: :service, fast: true do
|
|
4
|
+
|
|
5
|
+
let(:role_entity_class) { Arpa::Entities::Role }
|
|
6
|
+
let(:role) { double }
|
|
7
|
+
let(:params) { double }
|
|
8
|
+
|
|
9
|
+
let(:role_created) { subject.create(params) }
|
|
10
|
+
let(:validator_class) { Arpa::Validators::RoleValidator }
|
|
11
|
+
let(:validator) { instance_double validator_class }
|
|
12
|
+
|
|
13
|
+
before do
|
|
14
|
+
allow(validator_class).to receive(:new).and_return(validator)
|
|
15
|
+
allow(role_entity_class).to receive(:new).and_return(role)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
describe 'creating a new role' do
|
|
19
|
+
|
|
20
|
+
context 'when role is invalid' do
|
|
21
|
+
let(:errors) { instance_double('ActiveModel::Errors') }
|
|
22
|
+
|
|
23
|
+
before do
|
|
24
|
+
allow(validator).to receive(:valid?).and_return false
|
|
25
|
+
allow(validator).to receive(:errors).and_return(errors)
|
|
26
|
+
allow(errors).to receive(:messages)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it 'should raise a Arpa::Exceptions::RecordInvalid with :errors of ActiveModel::Errors' do
|
|
30
|
+
expect { role_created }.to raise_error { |error|
|
|
31
|
+
expect(error).to be_a Arpa::Exceptions::RecordInvalid
|
|
32
|
+
expect(error.errors).not_to be_nil
|
|
33
|
+
}
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
context 'when role is valid' do
|
|
39
|
+
let(:creator_repo_class) { Arpa::Repositories::Roles::Creator }
|
|
40
|
+
let(:creator_repo) { instance_double creator_repo_class }
|
|
41
|
+
|
|
42
|
+
before do
|
|
43
|
+
allow(validator).to receive(:valid?).and_return true
|
|
44
|
+
allow(creator_repo_class).to receive(:new).and_return(creator_repo)
|
|
45
|
+
allow(creator_repo).to receive(:create).with(role)
|
|
46
|
+
role_created
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it 'creator repository should call :new' do
|
|
50
|
+
expect(creator_repo_class).to have_received(:new)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it 'creator_repo should call create method with role as parameter' do
|
|
54
|
+
expect(creator_repo).to have_received(:create).with(role).once
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
context 'when build the role' do
|
|
58
|
+
|
|
59
|
+
it 'entity role should call new method' do
|
|
60
|
+
expect(role_entity_class).to have_received(:new).once
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Arpa::Services::Roles::Remove::RoleRemover, type: :service, fast: true do
|
|
4
|
+
|
|
5
|
+
let(:role) { double }
|
|
6
|
+
|
|
7
|
+
describe 'removing role' do
|
|
8
|
+
let(:remover_repo_class) { Arpa::Repositories::Roles::Remover }
|
|
9
|
+
let(:remover_repo) { instance_double remover_repo_class }
|
|
10
|
+
let(:setup) { }
|
|
11
|
+
|
|
12
|
+
before do
|
|
13
|
+
allow(remover_repo_class).to receive(:new).and_return(remover_repo)
|
|
14
|
+
setup
|
|
15
|
+
subject.remove(role)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
context 'when role has no profiles' do
|
|
19
|
+
|
|
20
|
+
let(:setup) do
|
|
21
|
+
allow(role).to receive(:has_profile?).and_return(false)
|
|
22
|
+
allow(remover_repo).to receive(:destroy)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it 'remover repository should call :destroy once' do
|
|
26
|
+
expect(remover_repo).to have_received(:destroy).once
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it 'remover repository should call :new once' do
|
|
30
|
+
expect(remover_repo_class).to have_received(:new).once
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
context 'when role has profiles' do
|
|
36
|
+
|
|
37
|
+
let(:setup) do
|
|
38
|
+
allow(role).to receive(:has_profile?).and_return(true)
|
|
39
|
+
allow(remover_repo).to receive(:disable)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it 'remover repository should call :disable once' do
|
|
43
|
+
expect(remover_repo).to have_received(:disable).once
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
end
|