arpa 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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