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,40 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
RSpec.describe "Create Role", type: [:request, :role] do
|
|
4
|
+
let(:finder_role_repo) { Arpa::Repositories::Roles::Finder.new }
|
|
5
|
+
let(:finder_resource_repo) { Arpa::Repositories::Resources::Finder.new }
|
|
6
|
+
let(:creator_resource_service) { Arpa::Services::Resources::ResourceManagerCreator.new }
|
|
7
|
+
let(:creator_role_service) { Arpa::Services::Roles::RoleManagerCreator.new }
|
|
8
|
+
let(:success_proc) { ->(r) {} }
|
|
9
|
+
let(:callback) { {success: success_proc, fail: ->(e) {raise e} } }
|
|
10
|
+
|
|
11
|
+
context 'when have no created resources or actions' do
|
|
12
|
+
let(:resourceable_001) { double to_s: 'UsersController', action_methods: [:index, :show, 'edit'] }
|
|
13
|
+
let(:resourceable_002) { double to_s: 'ContactsController', action_methods: [:index, 'edit'] }
|
|
14
|
+
let(:resourceables) { [resourceable_001, resourceable_002] }
|
|
15
|
+
let(:created_resources) { creator_resource_service.create({resourceables: resourceables}, callback) }
|
|
16
|
+
|
|
17
|
+
let(:action_ids) { finder_resource_repo.all.first.actions.collect {|action| action.id} }
|
|
18
|
+
|
|
19
|
+
before do
|
|
20
|
+
created_resources
|
|
21
|
+
role_params = {role: {name: 'role_name', description: 'role_description', action_ids: action_ids}}
|
|
22
|
+
creator_role_service.create(role_params, callback)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it 'should be recorded one role' do
|
|
26
|
+
expect(finder_role_repo.all.size).to be == 1
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it 'should has 2 actions associated' do
|
|
30
|
+
expect(finder_role_repo.all.first.actions.size).to be == 2
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
context 'names of associated actions' do
|
|
34
|
+
it {expect(finder_role_repo.all.first.actions.first.name).to eql 'edit'}
|
|
35
|
+
it {expect(finder_role_repo.all.first.actions.second.name).to eql 'index'}
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
RSpec.describe "Remove Role", type: [:request, :role] do
|
|
4
|
+
let(:finder_role_repo) { Arpa::Repositories::Roles::Finder.new }
|
|
5
|
+
let(:remover_role_service) { Arpa::Services::Roles::RoleManagerRemover.new }
|
|
6
|
+
let(:success_proc) { ->(r) {} }
|
|
7
|
+
let(:callback) { {success: success_proc, fail: ->(e) {raise e} } }
|
|
8
|
+
|
|
9
|
+
describe 'removing a Role' do
|
|
10
|
+
|
|
11
|
+
before do
|
|
12
|
+
create :repository_role
|
|
13
|
+
role_params_to_remove = {role: finder_role_repo.all.first }
|
|
14
|
+
remover_role_service.remove(role_params_to_remove, callback)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it 'record should be removed ' do
|
|
18
|
+
expect(finder_role_repo.all.size).to be == 0
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
RSpec.describe "Update Role", type: [:request, :role] do
|
|
4
|
+
let(:finder_role_repo) { Arpa::Repositories::Roles::Finder.new }
|
|
5
|
+
let(:finder_resource_repo) { Arpa::Repositories::Resources::Finder.new }
|
|
6
|
+
let(:creator_resource_service) { Arpa::Services::Resources::ResourceManagerCreator.new }
|
|
7
|
+
let(:creator_role_service) { Arpa::Services::Roles::RoleManagerCreator.new }
|
|
8
|
+
let(:updater_role_service) { Arpa::Services::Roles::RoleManagerUpdater.new }
|
|
9
|
+
let(:success_proc) { ->(r) {} }
|
|
10
|
+
let(:callback) { {success: success_proc, fail: ->(e) {raise e} } }
|
|
11
|
+
|
|
12
|
+
context 'updating a Role' do
|
|
13
|
+
let(:resourceable_001) { double to_s: 'UsersController', action_methods: [:index, :show, 'edit'] }
|
|
14
|
+
let(:resourceable_002) { double to_s: 'ContactsController', action_methods: [:index, 'edit'] }
|
|
15
|
+
let(:resourceables) { [resourceable_001, resourceable_002] }
|
|
16
|
+
let(:created_resources) { creator_resource_service.create({resourceables: resourceables}, callback) }
|
|
17
|
+
let(:action_ids) { finder_resource_repo.all.first.actions.collect {|action| action.id} }
|
|
18
|
+
|
|
19
|
+
let(:create_resources_and_role) do
|
|
20
|
+
created_resources
|
|
21
|
+
role_params = {role: {name: 'role_name', description: 'role_description', action_ids: action_ids}}
|
|
22
|
+
creator_role_service.create(role_params, callback)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
before do
|
|
26
|
+
create_resources_and_role
|
|
27
|
+
found_role = finder_role_repo.all.first
|
|
28
|
+
role_params_to_update = {role: {id: found_role.id, name: 'updated_role_name', description: 'role_description', action_ids: [action_ids[0]] }}
|
|
29
|
+
updater_role_service.update(role_params_to_update, callback)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it 'should be recorded one role' do
|
|
33
|
+
expect(finder_role_repo.all.size).to be == 1
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it 'should has 1 actions associated' do
|
|
37
|
+
expect(finder_role_repo.all.first.actions.size).to be == 1
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it 'name should be "updated_role_name"' do
|
|
41
|
+
expect(finder_role_repo.all.first.name).to eql 'updated_role_name'
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
context 'names of associated actions' do
|
|
45
|
+
it {expect(finder_role_repo.all.first.actions.first.name).to eql 'edit'}
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
end
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Arpa::Services::Actions::Create::ActionCreator, type: :service, fast: true do
|
|
4
|
+
|
|
5
|
+
let(:action_entity_class) { Arpa::Entities::Action }
|
|
6
|
+
let(:action) { double }
|
|
7
|
+
let(:resource) { double id: 1 }
|
|
8
|
+
let(:actions_names) { ['index', 'new'] }
|
|
9
|
+
let(:params) { {resource: resource, actions_names: actions_names} }
|
|
10
|
+
let(:action_found) { nil }
|
|
11
|
+
|
|
12
|
+
let(:actions_created) { subject.create_many(params) }
|
|
13
|
+
let(:validator_class) { Arpa::Validators::ActionValidator }
|
|
14
|
+
let(:validator) { instance_double validator_class }
|
|
15
|
+
|
|
16
|
+
let(:finder_repo_class) { Arpa::Repositories::Actions::Finder}
|
|
17
|
+
let(:finder_repo) { instance_double finder_repo_class }
|
|
18
|
+
|
|
19
|
+
before do
|
|
20
|
+
allow(finder_repo_class).to receive(:new).and_return(finder_repo)
|
|
21
|
+
allow(finder_repo).to receive(:by_name_and_resource).and_return(action_found)
|
|
22
|
+
|
|
23
|
+
allow(validator_class).to receive(:new).with(action).and_return(validator)
|
|
24
|
+
allow(action_entity_class).to receive(:new).and_return(action)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
describe 'creating a new action' do
|
|
28
|
+
|
|
29
|
+
context 'when resource is invalid' do
|
|
30
|
+
let(:errors) { instance_double('ActiveModel::Errors') }
|
|
31
|
+
|
|
32
|
+
before do
|
|
33
|
+
allow(validator).to receive(:valid?).and_return false
|
|
34
|
+
allow(validator).to receive(:errors).and_return(errors)
|
|
35
|
+
allow(errors).to receive(:messages)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it 'should raise a Arpa::Exceptions::RecordInvalid with :errors of ActiveModel::Errors' do
|
|
39
|
+
expect { actions_created }.to raise_error { |error|
|
|
40
|
+
expect(error).to be_a Arpa::Exceptions::RecordInvalid
|
|
41
|
+
expect(error.errors).not_to be_nil
|
|
42
|
+
}
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
context 'when actino already exists' do
|
|
48
|
+
let(:action_found) { double }
|
|
49
|
+
|
|
50
|
+
it 'should return the action found' do
|
|
51
|
+
expect(actions_created).to eq [action_found, action_found]
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
context 'when resource is valid' do
|
|
57
|
+
let(:creator_repo_class) { Arpa::Repositories::Actions::Creator }
|
|
58
|
+
let(:creator_repo) { instance_double creator_repo_class }
|
|
59
|
+
|
|
60
|
+
before do
|
|
61
|
+
allow(validator).to receive(:valid?).and_return true
|
|
62
|
+
allow(creator_repo_class).to receive(:new).and_return(creator_repo)
|
|
63
|
+
allow(creator_repo).to receive(:create).with(action)
|
|
64
|
+
actions_created
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it 'creator repository should call :new' do
|
|
68
|
+
expect(creator_repo_class).to have_received(:new).once
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it 'creator_repo should call create method with action as parameter' do
|
|
72
|
+
expect(creator_repo).to have_received(:create).with(action).twice
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
context 'when build an instance of action' do
|
|
76
|
+
|
|
77
|
+
it 'entity action should call new method' do
|
|
78
|
+
expect(action_entity_class).to have_received(:new).with({resource_id: resource.id, name: 'index'}).once
|
|
79
|
+
expect(action_entity_class).to have_received(:new).with({resource_id: resource.id, name: 'new'}).once
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Arpa::Services::Actions::Remove::ActionRemover, type: :service, fast: true do
|
|
4
|
+
|
|
5
|
+
let(:action_001) { double name: 'index' }
|
|
6
|
+
let(:action_002) { double name: 'old_index' }
|
|
7
|
+
let(:actions) { [action_001, action_002]}
|
|
8
|
+
let(:resource) { double actions: actions }
|
|
9
|
+
|
|
10
|
+
let(:actions_names) { ['index', 'show'] }
|
|
11
|
+
|
|
12
|
+
let(:params) { {resource: resource, actions_names: actions_names} }
|
|
13
|
+
|
|
14
|
+
describe 'removing nonexistent actions' do
|
|
15
|
+
let(:remover_repo_class) { Arpa::Repositories::Actions::Remover }
|
|
16
|
+
let(:remover_repo) { instance_double remover_repo_class }
|
|
17
|
+
|
|
18
|
+
before do
|
|
19
|
+
allow(remover_repo_class).to receive(:new).and_return(remover_repo)
|
|
20
|
+
allow(remover_repo).to receive(:destroy)
|
|
21
|
+
|
|
22
|
+
subject.remove_nonexistent_actions(params)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it 'remover repository should call :new once' do
|
|
26
|
+
expect(remover_repo_class).to have_received(:new).once
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it 'remover repository should call :destroy once' do
|
|
30
|
+
expect(remover_repo).to have_received(:destroy).once
|
|
31
|
+
expect(remover_repo).to have_received(:destroy).with(action_002).once
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
end
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
class CustomTransactionClass
|
|
4
|
+
def self.transaction
|
|
5
|
+
yield
|
|
6
|
+
end
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
class ManagerImplementationTest
|
|
10
|
+
include Arpa::Services::Base
|
|
11
|
+
|
|
12
|
+
def create_raise callback
|
|
13
|
+
manager_action callback do
|
|
14
|
+
raise Exceptions::RecordInvalid.new 'some error'
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def create callback
|
|
19
|
+
manager_action callback do
|
|
20
|
+
'success'
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
describe Arpa::Services::Base, type: :service, fast: true do
|
|
27
|
+
|
|
28
|
+
let(:manager_implementation) { ManagerImplementationTest.new }
|
|
29
|
+
let(:callback) {
|
|
30
|
+
{
|
|
31
|
+
success: -> (result) {},
|
|
32
|
+
fail: -> (exception){}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
describe 'calling .transaction' do
|
|
37
|
+
before do
|
|
38
|
+
set_custom_transaction_class
|
|
39
|
+
allow(transaction_class).to receive(:transaction)
|
|
40
|
+
manager_implementation.create callback
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
context 'when use the default transaction_class from Services::ManagerBase' do
|
|
44
|
+
let(:set_custom_transaction_class) { manager_implementation.class.repository_transaction nil }
|
|
45
|
+
let(:transaction_class) { ActiveRecord::Base }
|
|
46
|
+
|
|
47
|
+
it 'transaction_class should call .transaction' do
|
|
48
|
+
expect(transaction_class).to have_received(:transaction)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
context 'when use a custom transaction_class' do
|
|
54
|
+
let(:set_custom_transaction_class) { manager_implementation.class.repository_transaction 'CustomTransactionClass' }
|
|
55
|
+
let(:transaction_class) { CustomTransactionClass }
|
|
56
|
+
|
|
57
|
+
it 'transaction_class should call .transaction' do
|
|
58
|
+
expect(transaction_class).to have_received(:transaction)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
describe 'calling correct callback' do
|
|
65
|
+
before do
|
|
66
|
+
manager_implementation.class.repository_transaction 'CustomTransactionClass'
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
context 'when success transaction' do
|
|
70
|
+
before do
|
|
71
|
+
allow(callback[:success]).to receive(:call)
|
|
72
|
+
manager_implementation.create callback
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
it 'should call the callback[:success]' do
|
|
76
|
+
expect(callback[:success]).to have_received(:call).once
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
context 'when fail transaction' do
|
|
81
|
+
before do
|
|
82
|
+
allow(callback[:fail]).to receive(:call).with kind_of StandardError
|
|
83
|
+
manager_implementation.create_raise callback
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
it 'should call the callback[:fail] with Exceptions::RecordInvalid' do
|
|
88
|
+
expect(callback[:fail]).to have_received(:call).with(kind_of StandardError)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Arpa::Services::Profiles::Create::ProfileCreator, type: :service, fast: true do
|
|
4
|
+
|
|
5
|
+
let(:profile_entity_class) { Arpa::Entities::Profile }
|
|
6
|
+
let(:profile) { double }
|
|
7
|
+
let(:params) { double }
|
|
8
|
+
|
|
9
|
+
let(:profile_created) { subject.create(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(profile_entity_class).to receive(:new).and_return(profile)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
describe 'creating a new 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_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 profile is valid' do
|
|
39
|
+
let(:creator_repo_class) { Arpa::Repositories::Profiles::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(profile)
|
|
46
|
+
profile_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 profile as parameter' do
|
|
54
|
+
expect(creator_repo).to have_received(:create).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(profile_entity_class).to have_received(:new).once
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Arpa::Services::Profiles::ProfileManagerCreator, type: :service, fast: true do
|
|
4
|
+
|
|
5
|
+
let(:profile_creator) { 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_creators) do
|
|
11
|
+
allow(Arpa::Services::Profiles::Create::ProfileCreator).to receive(:new).and_return(profile_creator)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
let(:setup_creators_methods) do
|
|
15
|
+
allow(profile_creator).to receive(:create)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
let(:result) { subject.create params, callback }
|
|
19
|
+
|
|
20
|
+
before do
|
|
21
|
+
setup_creators
|
|
22
|
+
setup_creators_methods
|
|
23
|
+
allow(success_proc).to receive(:call)
|
|
24
|
+
result
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it 'profile_creator should call :create with parameters' do
|
|
28
|
+
expect(profile_creator).to have_received(:create).with(params[:profile]).once
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Arpa::Services::Profiles::ProfileManagerRemover, type: :service, fast: true do
|
|
4
|
+
|
|
5
|
+
let(:profile_remover) { double }
|
|
6
|
+
let(:profile) { double }
|
|
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::Remove::ProfileRemover).to receive(:new).and_return(profile_remover)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
let(:setup_updaters_methods) do
|
|
15
|
+
allow(profile_remover).to receive(:remove)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
let(:result) { subject.remove 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
|
+
context 'when is to destroy' do
|
|
28
|
+
let(:params) { {profile: profile} }
|
|
29
|
+
|
|
30
|
+
it 'profile_remover should call :remove with profile as parameter' do
|
|
31
|
+
expect(profile_remover).to have_received(:remove).with(profile, nil).once
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
context 'when is to disable' do
|
|
36
|
+
let(:params) { {profile: profile, disable: true} }
|
|
37
|
+
|
|
38
|
+
it 'profile_remover should call :remove with profile and disable: true as parameter' do
|
|
39
|
+
expect(profile_remover).to have_received(:remove).with(profile, true).once
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
end
|