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.
Files changed (139) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +42 -0
  3. data/.ruby-gemset +1 -0
  4. data/.ruby-version +1 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +138 -0
  8. data/Rakefile +2 -0
  9. data/arpa.gemspec +33 -0
  10. data/lib/arpa.rb +91 -0
  11. data/lib/arpa/additions/resource.rb +29 -0
  12. data/lib/arpa/assets/stylesheets/ar_accordion.scss +80 -0
  13. data/lib/arpa/controllers/profiles_controller.rb +106 -0
  14. data/lib/arpa/controllers/resources_controller.rb +47 -0
  15. data/lib/arpa/controllers/roles_controller.rb +106 -0
  16. data/lib/arpa/data_mappers/action_mapper.rb +13 -0
  17. data/lib/arpa/data_mappers/base.rb +117 -0
  18. data/lib/arpa/data_mappers/profile_mapper.rb +14 -0
  19. data/lib/arpa/data_mappers/resource_mapper.rb +11 -0
  20. data/lib/arpa/data_mappers/role_mapper.rb +14 -0
  21. data/lib/arpa/entities/action.rb +24 -0
  22. data/lib/arpa/entities/permissions.rb +35 -0
  23. data/lib/arpa/entities/profile.rb +22 -0
  24. data/lib/arpa/entities/resource.rb +58 -0
  25. data/lib/arpa/entities/role.rb +28 -0
  26. data/lib/arpa/exceptions/record_invalid.rb +13 -0
  27. data/lib/arpa/repositories/actions/creator.rb +18 -0
  28. data/lib/arpa/repositories/actions/finder.rb +23 -0
  29. data/lib/arpa/repositories/actions/remover.rb +22 -0
  30. data/lib/arpa/repositories/actions/repository_action.rb +15 -0
  31. data/lib/arpa/repositories/base.rb +15 -0
  32. data/lib/arpa/repositories/profiles/creator.rb +18 -0
  33. data/lib/arpa/repositories/profiles/finder.rb +29 -0
  34. data/lib/arpa/repositories/profiles/remover.rb +29 -0
  35. data/lib/arpa/repositories/profiles/repository_profile.rb +12 -0
  36. data/lib/arpa/repositories/profiles/updater.rb +23 -0
  37. data/lib/arpa/repositories/registrator.rb +44 -0
  38. data/lib/arpa/repositories/resources/creator.rb +18 -0
  39. data/lib/arpa/repositories/resources/finder.rb +45 -0
  40. data/lib/arpa/repositories/resources/remover.rb +22 -0
  41. data/lib/arpa/repositories/resources/repository_resource.rb +12 -0
  42. data/lib/arpa/repositories/roles/creator.rb +18 -0
  43. data/lib/arpa/repositories/roles/finder.rb +29 -0
  44. data/lib/arpa/repositories/roles/remover.rb +29 -0
  45. data/lib/arpa/repositories/roles/repository_role.rb +13 -0
  46. data/lib/arpa/repositories/roles/updater.rb +23 -0
  47. data/lib/arpa/services/actions/create/action_creator.rb +50 -0
  48. data/lib/arpa/services/actions/remove/action_remover.rb +24 -0
  49. data/lib/arpa/services/base.rb +41 -0
  50. data/lib/arpa/services/profiles/create/profile_creator.rb +32 -0
  51. data/lib/arpa/services/profiles/profile_manager_creator.rb +22 -0
  52. data/lib/arpa/services/profiles/profile_manager_remover.rb +24 -0
  53. data/lib/arpa/services/profiles/profile_manager_updater.rb +22 -0
  54. data/lib/arpa/services/profiles/remove/profile_remover.rb +25 -0
  55. data/lib/arpa/services/profiles/update/profile_updater.rb +32 -0
  56. data/lib/arpa/services/resources/create/resource_creator.rb +42 -0
  57. data/lib/arpa/services/resources/remove/resource_remover.rb +31 -0
  58. data/lib/arpa/services/resources/resource_manager_creator.rb +50 -0
  59. data/lib/arpa/services/roles/create/role_creator.rb +33 -0
  60. data/lib/arpa/services/roles/remove/role_remover.rb +25 -0
  61. data/lib/arpa/services/roles/role_manager_creator.rb +23 -0
  62. data/lib/arpa/services/roles/role_manager_remover.rb +23 -0
  63. data/lib/arpa/services/roles/role_manager_updater.rb +22 -0
  64. data/lib/arpa/services/roles/update/role_updater.rb +32 -0
  65. data/lib/arpa/services/verifier.rb +24 -0
  66. data/lib/arpa/validators/action_validator.rb +17 -0
  67. data/lib/arpa/validators/profile_validator.rb +19 -0
  68. data/lib/arpa/validators/resource_validator.rb +17 -0
  69. data/lib/arpa/validators/role_validator.rb +20 -0
  70. data/lib/arpa/version.rb +3 -0
  71. data/lib/arpa/views/profiles/_form.html.erb +41 -0
  72. data/lib/arpa/views/profiles/edit.html.erb +6 -0
  73. data/lib/arpa/views/profiles/index.html.erb +29 -0
  74. data/lib/arpa/views/profiles/new.html.erb +5 -0
  75. data/lib/arpa/views/profiles/show.html.erb +37 -0
  76. data/lib/arpa/views/resources/index.html.erb +27 -0
  77. data/lib/arpa/views/resources/show.html.erb +33 -0
  78. data/lib/arpa/views/roles/_form.html.erb +55 -0
  79. data/lib/arpa/views/roles/edit.html.erb +6 -0
  80. data/lib/arpa/views/roles/index.html.erb +29 -0
  81. data/lib/arpa/views/roles/new.html.erb +5 -0
  82. data/lib/arpa/views/roles/show.html.erb +37 -0
  83. data/lib/config/locales/arpa.en.yml +38 -0
  84. data/lib/generators/ar/install_generator.rb +74 -0
  85. data/lib/generators/ar/templates/migration.rb +48 -0
  86. data/spec/factories/repository_actions.rb +19 -0
  87. data/spec/factories/repository_profiles.rb +11 -0
  88. data/spec/factories/repository_resources.rb +15 -0
  89. data/spec/factories/repository_roles.rb +11 -0
  90. data/spec/lib/ar/additions/resource_spec.rb +34 -0
  91. data/spec/lib/ar/data_mappers/action_mapper_spec.rb +46 -0
  92. data/spec/lib/ar/data_mappers/base_spec.rb +47 -0
  93. data/spec/lib/ar/data_mappers/profile_mapper_spec.rb +43 -0
  94. data/spec/lib/ar/data_mappers/resource_mapper_spec.rb +38 -0
  95. data/spec/lib/ar/data_mappers/role_mapper_spec.rb +47 -0
  96. data/spec/lib/ar/entities/action_spec.rb +19 -0
  97. data/spec/lib/ar/entities/permissions_spec.rb +61 -0
  98. data/spec/lib/ar/entities/resource_spec.rb +35 -0
  99. data/spec/lib/ar/repositories/actions/finder_spec.rb +40 -0
  100. data/spec/lib/ar/repositories/base_spec.rb +37 -0
  101. data/spec/lib/ar/repositories/profiles/finder_spec.rb +43 -0
  102. data/spec/lib/ar/repositories/profiles/remover_spec.rb +31 -0
  103. data/spec/lib/ar/repositories/resources/finder_spec.rb +92 -0
  104. data/spec/lib/ar/repositories/resources/remover_spec.rb +38 -0
  105. data/spec/lib/ar/repositories/roles/finder_spec.rb +43 -0
  106. data/spec/lib/ar/repositories/roles/remover_spec.rb +31 -0
  107. data/spec/lib/ar/requests/profiles/create_request_spec.rb +51 -0
  108. data/spec/lib/ar/requests/profiles/remove_request_spec.rb +36 -0
  109. data/spec/lib/ar/requests/resources/create_request_spec.rb +107 -0
  110. data/spec/lib/ar/requests/roles/create_request_spec.rb +40 -0
  111. data/spec/lib/ar/requests/roles/remove_request_spec.rb +23 -0
  112. data/spec/lib/ar/requests/roles/update_request_spec.rb +50 -0
  113. data/spec/lib/ar/services/actions/create/action_creator_spec.rb +88 -0
  114. data/spec/lib/ar/services/actions/remove/action_remover_spec.rb +36 -0
  115. data/spec/lib/ar/services/base_spec.rb +94 -0
  116. data/spec/lib/ar/services/profiles/create/profile_creator_spec.rb +68 -0
  117. data/spec/lib/ar/services/profiles/profile_manager_creator_spec.rb +31 -0
  118. data/spec/lib/ar/services/profiles/profile_manager_remover_spec.rb +44 -0
  119. data/spec/lib/ar/services/profiles/profile_manager_updater_spec.rb +31 -0
  120. data/spec/lib/ar/services/profiles/remove/profile_remover_spec.rb +45 -0
  121. data/spec/lib/ar/services/profiles/update/profile_updater_spec.rb +68 -0
  122. data/spec/lib/ar/services/resources/create/resource_creator_spec.rb +87 -0
  123. data/spec/lib/ar/services/resources/remove/resource_remover_spec.rb +50 -0
  124. data/spec/lib/ar/services/resources/resource_manager_creator_spec.rb +71 -0
  125. data/spec/lib/ar/services/roles/create/role_creator_spec.rb +68 -0
  126. data/spec/lib/ar/services/roles/remove/role_remover_spec.rb +50 -0
  127. data/spec/lib/ar/services/roles/role_manager_creator_spec.rb +31 -0
  128. data/spec/lib/ar/services/roles/role_manager_remover_spec.rb +32 -0
  129. data/spec/lib/ar/services/roles/role_manager_updater_spec.rb +31 -0
  130. data/spec/lib/ar/services/roles/update/role_updater_spec.rb +68 -0
  131. data/spec/lib/ar/services/verifier_spec.rb +44 -0
  132. data/spec/lib/ar/validators/action_validator_spec.rb +15 -0
  133. data/spec/lib/ar/validators/profile_validator_spec.rb +16 -0
  134. data/spec/lib/ar/validators/resource_validator_spec.rb +15 -0
  135. data/spec/lib/ar/validators/role_validator_spec.rb +16 -0
  136. data/spec/spec_helper.rb +33 -0
  137. data/spec/support/repositories/test_repository.rb +2 -0
  138. data/spec/support/schema.rb +58 -0
  139. 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