global-registry-bindings 0.0.6 → 0.1.0

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 (66) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +79 -35
  3. data/lib/global_registry_bindings/entity/entity_type_methods.rb +35 -33
  4. data/lib/global_registry_bindings/entity/mdm_methods.rb +9 -19
  5. data/lib/global_registry_bindings/entity/push_entity_methods.rb +31 -38
  6. data/lib/global_registry_bindings/entity/push_relationship_methods.rb +61 -47
  7. data/lib/global_registry_bindings/entity/relationship_type_methods.rb +48 -37
  8. data/lib/global_registry_bindings/exceptions.rb +1 -0
  9. data/lib/global_registry_bindings/global_registry_bindings.rb +129 -46
  10. data/lib/global_registry_bindings/{entity/delete_entity_methods.rb → model/delete_entity.rb} +5 -5
  11. data/lib/global_registry_bindings/model/entity.rb +64 -0
  12. data/lib/global_registry_bindings/model/pull_mdm.rb +23 -0
  13. data/lib/global_registry_bindings/model/push_entity.rb +21 -0
  14. data/lib/global_registry_bindings/model/push_relationship.rb +79 -0
  15. data/lib/global_registry_bindings/model/relationship.rb +68 -0
  16. data/lib/global_registry_bindings/options.rb +26 -59
  17. data/lib/global_registry_bindings/options/entity_class_options.rb +34 -0
  18. data/lib/global_registry_bindings/options/entity_instance_options.rb +90 -0
  19. data/lib/global_registry_bindings/options/entity_options_parser.rb +76 -0
  20. data/lib/global_registry_bindings/options/relationship_class_options.rb +37 -0
  21. data/lib/global_registry_bindings/options/relationship_instance_options.rb +131 -0
  22. data/lib/global_registry_bindings/options/relationship_options_parser.rb +98 -0
  23. data/lib/global_registry_bindings/railtie.rb +2 -1
  24. data/lib/global_registry_bindings/version.rb +1 -1
  25. data/lib/global_registry_bindings/worker.rb +25 -0
  26. data/lib/global_registry_bindings/workers/{delete_gr_entity_worker.rb → delete_entity_worker.rb} +1 -6
  27. data/lib/global_registry_bindings/workers/pull_mdm_id_worker.rb +12 -13
  28. data/lib/global_registry_bindings/workers/push_entity_worker.rb +24 -0
  29. data/lib/global_registry_bindings/workers/push_relationship_worker.rb +17 -7
  30. data/spec/acceptance/global_registry_bindings_spec.rb +50 -40
  31. data/spec/factories/factories.rb +24 -0
  32. data/spec/fixtures/get_entity_types_area.json +44 -0
  33. data/spec/fixtures/post_entities_community.json +8 -0
  34. data/spec/fixtures/post_relationship_types_fancy_org_area.json +16 -0
  35. data/spec/fixtures/put_entities_community_relationship.json +16 -0
  36. data/spec/fixtures/put_entities_fancy_org_area_relationship.json +8 -0
  37. data/spec/fixtures/put_entities_fancy_org_relationship.json +17 -0
  38. data/spec/fixtures/put_entities_person_country_relationship.json +23 -0
  39. data/spec/fixtures/put_entities_relationship_400.json +3 -0
  40. data/spec/fixtures/put_relationship_types_fields_fancy_org_area.json +25 -0
  41. data/spec/helpers/sidekiq_helpers.rb +14 -0
  42. data/spec/internal/app/models/address.rb +7 -2
  43. data/spec/internal/app/models/area.rb +7 -0
  44. data/spec/internal/app/models/assignment.rb +5 -4
  45. data/spec/internal/app/models/community.rb +19 -0
  46. data/spec/internal/app/models/country.rb +8 -0
  47. data/spec/internal/app/models/namespaced/person.rb +48 -2
  48. data/spec/internal/app/models/organization.rb +26 -3
  49. data/spec/internal/db/schema.rb +28 -0
  50. data/spec/internal/log/test.log +71023 -0
  51. data/spec/models/address_spec.rb +6 -204
  52. data/spec/models/assignment_spec.rb +40 -186
  53. data/spec/models/organization_spec.rb +106 -92
  54. data/spec/models/person_spec.rb +158 -214
  55. data/spec/models/user_edited_person_spec.rb +2 -2
  56. data/spec/spec_helper.rb +5 -6
  57. data/spec/workers/delete_gr_entity_worker_spec.rb +4 -4
  58. data/spec/workers/pull_mdm_id_worker_spec.rb +94 -32
  59. data/spec/workers/push_entity_worker_spec.rb +476 -0
  60. data/spec/workers/push_relationship_worker_spec.rb +344 -15
  61. metadata +45 -10
  62. data/lib/global_registry_bindings/entity/entity_methods.rb +0 -62
  63. data/lib/global_registry_bindings/options/class_options.rb +0 -62
  64. data/lib/global_registry_bindings/options/instance_options.rb +0 -63
  65. data/lib/global_registry_bindings/workers/push_gr_entity_worker.rb +0 -22
  66. data/spec/workers/push_gr_entity_worker_spec.rb +0 -27
@@ -2,26 +2,355 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- RSpec.describe 'GlobalRegistry::Bindings::Workers' do
6
- describe 'PushRelationshipWorker' do
7
- let(:user) { create(:person) }
5
+ RSpec.describe GlobalRegistry::Bindings::Workers::PushRelationshipWorker do
6
+ around { |example| travel_to Time.utc(2001, 2, 3), &example }
7
+ describe '#perform(model_class, id, type)' do
8
+ context Assignment do
9
+ let(:assignment) { create(:assignment) }
10
+ context 'with valid id' do
11
+ it 'should call #push_relationship_to_global_registry' do
12
+ expect(Assignment).to receive(:find).with(assignment.id).and_return(assignment)
8
13
 
9
- it 'sends :push_relationship_to_global_registry to the model instance' do
10
- allow(Namespaced::Person).to receive(:push_relationship_to_global_registry)
11
- expect(Namespaced::Person).to receive(:find).with(user.id).and_return(user)
12
- expect(user).to receive(:push_relationship_to_global_registry)
14
+ worker = GlobalRegistry::Bindings::Workers::PushRelationshipWorker.new
15
+ expect(worker).to receive(:push_relationship_to_global_registry)
16
+ worker.perform('Assignment', assignment.id, :assignment)
17
+ expect(worker.model).to be assignment
18
+ end
19
+ end
13
20
 
14
- worker = GlobalRegistry::Bindings::Workers::PushRelationshipWorker.new
15
- worker.perform(Namespaced::Person, user.id)
21
+ context 'with invalid id' do
22
+ it 'should fail silently' do
23
+ expect(Assignment).to receive(:find).with(assignment.id).and_raise(ActiveRecord::RecordNotFound)
24
+ expect(GlobalRegistry::Bindings::Workers::PushRelationshipWorker)
25
+ .not_to receive(:push_relationship_to_global_registry)
26
+
27
+ worker = GlobalRegistry::Bindings::Workers::PushRelationshipWorker.new
28
+ worker.perform(Assignment, assignment.id, :assignment)
29
+ expect(worker.model).to be nil
30
+ end
31
+ end
32
+ end
33
+ end
34
+
35
+ describe '#push_relationship_to_global_registry' do
36
+ describe Assignment do
37
+ let(:worker) { GlobalRegistry::Bindings::Workers::PushRelationshipWorker.new assignment, :assignment }
38
+ context 'as create' do
39
+ let(:person) { create(:person, global_registry_id: '22527d88-3cba-11e7-b876-129bd0521531') }
40
+ let(:organization) { create(:organization, gr_id: 'aebb4170-3f34-11e7-bba6-129bd0521531') }
41
+ let(:assignment) { create(:assignment, person: person, organization: organization) }
42
+ let!(:requests) do
43
+ [stub_request(:get, 'https://backend.global-registry.org/entity_types')
44
+ .with(query: { 'filters[name]' => 'person', 'filters[parent_id]' => nil })
45
+ .to_return(body: file_fixture('get_entity_types_person.json'), status: 200),
46
+ stub_request(:get, 'https://backend.global-registry.org/entity_types')
47
+ .with(query: { 'filters[name]' => 'fancy_org', 'filters[parent_id]' => nil })
48
+ .to_return(body: file_fixture('get_entity_types_fancy_org.json'), status: 200),
49
+ stub_request(:put, "https://backend.global-registry.org/entities/#{person.global_registry_id}")
50
+ .with(body: { entity: { person: { 'fancy_org:relationship': {
51
+ role: 'leader', hired_at: '2000-12-03 00:00:00',
52
+ client_integration_id: assignment.id,
53
+ client_updated_at: '2001-02-03 00:00:00', fancy_org: organization.gr_id
54
+ } }, client_integration_id: person.id } }, query: { full_response: 'true',
55
+ fields: 'fancy_org:relationship' })
56
+ .to_return(body: file_fixture('put_entities_person_relationship.json'), status: 200)]
57
+ end
58
+
59
+ context '\'assignment\' relationship_type does not exist' do
60
+ let!(:sub_requests) do
61
+ [stub_request(:get, 'https://backend.global-registry.org/relationship_types')
62
+ .with(query: { 'filters[between]' =>
63
+ 'ee13a693-3ce7-4c19-b59a-30c8f137acd8,025a1128-3f33-11e7-b876-129bd0521531' })
64
+ .to_return(body: file_fixture('get_relationship_types.json'), status: 200),
65
+ stub_request(:post, 'https://backend.global-registry.org/relationship_types')
66
+ .with(body: { relationship_type: { entity_type1_id: 'ee13a693-3ce7-4c19-b59a-30c8f137acd8',
67
+ entity_type2_id: '025a1128-3f33-11e7-b876-129bd0521531',
68
+ relationship1: 'person', relationship2: 'fancy_org' } })
69
+ .to_return(body: file_fixture('post_relationship_types_person_fancy_org.json'), status: 200),
70
+ stub_request(:put,
71
+ 'https://backend.global-registry.org/relationship_types/5d721db8-4248-11e7-90b4-129bd0521531')
72
+ .with(body: { relationship_type: { fields: [{ name: 'role', field_type: 'string' },
73
+ { name: 'hired_at', field_type: 'datetime' }] } })
74
+ .to_return(body: file_fixture('put_relationship_types_fields.json'), status: 200)]
75
+ end
76
+
77
+ it 'should create \'assignment\' relationship_type and push relationship' do
78
+ worker.push_relationship_to_global_registry
79
+ (requests + sub_requests).each { |r| expect(r).to have_been_requested.once }
80
+ expect(assignment.global_registry_id).to eq '51a014a4-4252-11e7-944f-129bd0521531'
81
+ end
82
+ end
83
+
84
+ context '\'assignment\' relationship_type partially exists' do
85
+ let!(:sub_requests) do
86
+ [stub_request(:get, 'https://backend.global-registry.org/relationship_types')
87
+ .with(query: { 'filters[between]' =>
88
+ 'ee13a693-3ce7-4c19-b59a-30c8f137acd8,025a1128-3f33-11e7-b876-129bd0521531' })
89
+ .to_return(body: file_fixture('get_relationship_types_person_fancy_org_partial.json'), status: 200),
90
+ stub_request(:put,
91
+ 'https://backend.global-registry.org/relationship_types/5d721db8-4248-11e7-90b4-129bd0521531')
92
+ .with(body: { relationship_type: { fields: [{ name: 'role', field_type: 'string' }] } })
93
+ .to_return(body: file_fixture('put_relationship_types_fields.json'), status: 200)]
94
+ end
95
+
96
+ it 'should add fields to relationship type and push relationship' do
97
+ worker.push_relationship_to_global_registry
98
+ (requests + sub_requests).each { |r| expect(r).to have_been_requested.once }
99
+ expect(assignment.global_registry_id).to eq '51a014a4-4252-11e7-944f-129bd0521531'
100
+ end
101
+ end
102
+
103
+ context '\'assignment\' relationship_type exists' do
104
+ let!(:sub_requests) do
105
+ [stub_request(:get, 'https://backend.global-registry.org/relationship_types')
106
+ .with(query: { 'filters[between]' =>
107
+ 'ee13a693-3ce7-4c19-b59a-30c8f137acd8,025a1128-3f33-11e7-b876-129bd0521531' })
108
+ .to_return(body: file_fixture('get_relationship_types_person_fancy_org.json'), status: 200)]
109
+ end
110
+
111
+ it 'should add fields to relationship type and push relationship' do
112
+ worker.push_relationship_to_global_registry
113
+ (requests + sub_requests).each { |r| expect(r).to have_been_requested.once }
114
+ expect(assignment.global_registry_id).to eq '51a014a4-4252-11e7-944f-129bd0521531'
115
+ end
116
+ end
117
+ end
118
+
119
+ context 'as an update' do
120
+ let(:person) { create(:person, global_registry_id: '22527d88-3cba-11e7-b876-129bd0521531') }
121
+ let(:organization) { create(:organization, gr_id: 'aebb4170-3f34-11e7-bba6-129bd0521531') }
122
+ let(:assignment) do
123
+ create(:assignment, person: person, organization: organization,
124
+ global_registry_id: '51a014a4-4252-11e7-944f-129bd0521531')
125
+ end
126
+
127
+ context '\'assignment\' relationship_type is cached' do
128
+ before :each do
129
+ person_entity_types = JSON.parse(file_fixture('get_entity_types_person.json').read)
130
+ organization_entity_types = JSON.parse(file_fixture('get_entity_types_fancy_org.json').read)
131
+ assignment_relationship_type = JSON.parse(file_fixture('get_relationship_types_person_fancy_org.json').read)
132
+ Rails.cache.write('GlobalRegistry::Bindings::EntityType::person', person_entity_types['entity_types'].first)
133
+ Rails.cache.write('GlobalRegistry::Bindings::EntityType::fancy_org',
134
+ organization_entity_types['entity_types'].first)
135
+ Rails.cache.write('GlobalRegistry::Bindings::RelationshipType::person::fancy_org::person',
136
+ assignment_relationship_type['relationship_types'].first)
137
+ end
138
+
139
+ it 'should push relationship' do
140
+ request = stub_request(:put, "https://backend.global-registry.org/entities/#{person.global_registry_id}")
141
+ .with(body: { entity: { person: { 'fancy_org:relationship': {
142
+ role: 'leader', hired_at: '2000-12-03 00:00:00',
143
+ client_integration_id: assignment.id,
144
+ client_updated_at: '2001-02-03 00:00:00', fancy_org: organization.gr_id
145
+ } }, client_integration_id: person.id } }, query: { full_response: 'true',
146
+ fields: 'fancy_org:relationship' })
147
+ .to_return(body: file_fixture('put_entities_person_relationship.json'), status: 200,
148
+ headers: { 'Content-Type' => 'application/json' })
149
+
150
+ worker.push_relationship_to_global_registry
151
+ expect(request).to have_been_requested.once
152
+ expect(assignment.global_registry_id).to eq '51a014a4-4252-11e7-944f-129bd0521531'
153
+ end
154
+
155
+ context '\'fancy_org\' foreign key changed' do
156
+ let!(:requests) do
157
+ [stub_request(:put, "https://backend.global-registry.org/entities/#{person.global_registry_id}")
158
+ .with(body: { entity: { person: { 'fancy_org:relationship': {
159
+ role: 'leader', hired_at: '2000-12-03 00:00:00',
160
+ client_integration_id: assignment.id,
161
+ client_updated_at: '2001-02-03 00:00:00', fancy_org: organization.gr_id
162
+ } }, client_integration_id: person.id } }, query: { full_response: 'true',
163
+ fields: 'fancy_org:relationship' })
164
+ .to_return(body: file_fixture('put_entities_relationship_400.json'), status: 400),
165
+ stub_request(:delete,
166
+ 'https://backend.global-registry.org/entities/51a014a4-4252-11e7-944f-129bd0521531')
167
+ .to_return(status: 200)]
168
+ end
169
+
170
+ it 'should delete relationship and retry' do
171
+ expect do
172
+ worker.push_relationship_to_global_registry
173
+ end.to raise_error(GlobalRegistry::Bindings::RelatedEntityExistsWithCID)
174
+ requests.each { |r| expect(r).to have_been_requested.once }
175
+ expect(assignment.global_registry_id).to be_nil
176
+ end
177
+ end
178
+ end
179
+ end
180
+
181
+ context 'related entities missing global_registry_id' do
182
+ context '\'person\' missing global_registry_id' do
183
+ let(:person) { build(:person) }
184
+ let(:organization) { build(:organization, gr_id: 'aebb4170-3f34-11e7-bba6-129bd0521531') }
185
+ let!(:assignment) { create(:assignment, person: person, organization: organization) }
186
+
187
+ it 'should raise an exception' do
188
+ clear_sidekiq_jobs_and_locks
189
+
190
+ expect do
191
+ worker.push_relationship_to_global_registry
192
+ end.to raise_error(GlobalRegistry::Bindings::RelatedEntityMissingGlobalRegistryId).and(
193
+ change(GlobalRegistry::Bindings::Workers::PushEntityWorker.jobs, :size).by(1)
194
+ )
195
+ end
196
+ end
197
+
198
+ context '\'organization\' missing global_registry_id' do
199
+ let(:person) { build(:person, global_registry_id: '22527d88-3cba-11e7-b876-129bd0521531') }
200
+ let(:organization) { build(:organization) }
201
+ let!(:assignment) { create(:assignment, person: person, organization: organization) }
202
+
203
+ it 'should raise an exception' do
204
+ clear_sidekiq_jobs_and_locks
205
+
206
+ expect do
207
+ worker.push_relationship_to_global_registry
208
+ end.to raise_error(GlobalRegistry::Bindings::RelatedEntityMissingGlobalRegistryId).and(
209
+ change(GlobalRegistry::Bindings::Workers::PushEntityWorker.jobs, :size).by(1)
210
+ )
211
+ end
212
+ end
213
+
214
+ context '\'person\' and \'organization\' missing global_registry_id' do
215
+ let(:person) { build(:person) }
216
+ let(:organization) { build(:organization) }
217
+ let!(:assignment) { create(:assignment, person: person, organization: organization) }
218
+
219
+ it 'should raise an exception' do
220
+ clear_sidekiq_jobs_and_locks
221
+
222
+ expect do
223
+ worker.push_relationship_to_global_registry
224
+ end.to raise_error(GlobalRegistry::Bindings::RelatedEntityMissingGlobalRegistryId).and(
225
+ change(GlobalRegistry::Bindings::Workers::PushEntityWorker.jobs, :size).by(2)
226
+ )
227
+ end
228
+ end
229
+ end
230
+ end
231
+
232
+ describe Organization do
233
+ let(:worker) { GlobalRegistry::Bindings::Workers::PushRelationshipWorker.new organization, :area }
234
+ context 'as create' do
235
+ let(:area) { create(:area, global_registry_id: '0fdb70c5-f51e-4628-a1fe-caa37fae53cd') }
236
+ let(:organization) { create(:organization, gr_id: 'aebb4170-3f34-11e7-bba6-129bd0521531', area: area) }
237
+ let!(:requests) do
238
+ [stub_request(:get, 'https://backend.global-registry.org/entity_types')
239
+ .with(query: { 'filters[name]' => 'fancy_org', 'filters[parent_id]' => nil })
240
+ .to_return(body: file_fixture('get_entity_types_fancy_org.json'), status: 200),
241
+ stub_request(:get, 'https://backend.global-registry.org/entity_types')
242
+ .with(query: { 'filters[name]' => 'area', 'filters[parent_id]' => nil })
243
+ .to_return(body: file_fixture('get_entity_types_area.json'), status: 200),
244
+ stub_request(:put, "https://backend.global-registry.org/entities/#{organization.gr_id}")
245
+ .with(body: { entity: { fancy_org: { 'area:relationship': {
246
+ priority: 'High',
247
+ client_integration_id: organization.id,
248
+ client_updated_at: '2001-02-03 00:00:00', area: area.global_registry_id
249
+ } }, client_integration_id: organization.id } },
250
+ query: { full_response: 'true', fields: 'area:relationship' })
251
+ .to_return(body: file_fixture('put_entities_fancy_org_relationship.json'), status: 200)]
252
+ end
253
+
254
+ context '\'area\' relationship_type does not exist' do
255
+ let!(:sub_requests) do
256
+ [stub_request(:get, 'https://backend.global-registry.org/relationship_types')
257
+ .with(query: { 'filters[between]' =>
258
+ '025a1128-3f33-11e7-b876-129bd0521531,548852c6-d55e-11e3-897f-12725f8f377c' })
259
+ .to_return(body: file_fixture('get_relationship_types.json'), status: 200),
260
+ stub_request(:post, 'https://backend.global-registry.org/relationship_types')
261
+ .with(body: { relationship_type: { entity_type1_id: '025a1128-3f33-11e7-b876-129bd0521531',
262
+ entity_type2_id: '548852c6-d55e-11e3-897f-12725f8f377c',
263
+ relationship1: 'fancy_org', relationship2: 'area' } })
264
+ .to_return(body: file_fixture('post_relationship_types_fancy_org_area.json'), status: 200),
265
+ stub_request(:put,
266
+ 'https://backend.global-registry.org/relationship_types/f03b947e-6644-11e7-93dd-129bd0521531')
267
+ .with(body: { relationship_type: { fields: [{ name: 'priority', field_type: 'string' }] } })
268
+ .to_return(body: file_fixture('put_relationship_types_fields_fancy_org_area.json'), status: 200)]
269
+ end
270
+
271
+ it 'should create \'area\' relationship_type and push relationship' do
272
+ worker.push_relationship_to_global_registry
273
+ (requests + sub_requests).each { |r| expect(r).to have_been_requested.once }
274
+ expect(organization.global_registry_area_id).to eq 'c99d7d7e-8b14-4fe6-9c11-e5359ee03637'
275
+ end
276
+ end
277
+ end
278
+ end
279
+
280
+ describe Namespaced::Person do
281
+ describe 'country_of_service' do
282
+ let(:worker) { GlobalRegistry::Bindings::Workers::PushRelationshipWorker.new person, :country_of_service }
283
+ context 'as create' do
284
+ let(:country) { create(:country, global_registry_id: '0f9089a3-2b93-4de8-9b81-92be0261f325') }
285
+ let(:person) do
286
+ create(:person, global_registry_id: '2f0c62f1-5738-4860-88bd-5706fb801d7b', country_of_service: country)
287
+ end
288
+ let!(:request) do
289
+ stub_request(:put, "https://backend.global-registry.org/entities/#{person.global_registry_id}")
290
+ .with(body: { entity: { person: { 'country:relationship': {
291
+ client_integration_id: "cos_#{person.id}",
292
+ client_updated_at: '2001-02-03 00:00:00', country_of_service: true,
293
+ country: country.global_registry_id
294
+ } }, client_integration_id: person.id } },
295
+ query: { full_response: 'true', fields: 'country:relationship' })
296
+ .to_return(body: file_fixture('put_entities_person_country_relationship.json'), status: 200)
297
+ end
298
+
299
+ it 'should push relationship' do
300
+ worker.push_relationship_to_global_registry
301
+ expect(request).to have_been_requested.once
302
+ expect(person.country_of_service_gr_id).to eq '420d2fd1-7a73-41ed-9d8f-5dc79b00a688'
303
+ end
304
+ end
305
+ end
306
+
307
+ describe 'country_of_residence' do
308
+ let(:worker) { GlobalRegistry::Bindings::Workers::PushRelationshipWorker.new person, :country_of_residence }
309
+ context 'as create' do
310
+ let(:country) { create(:country, global_registry_id: '7cdaf399-d449-4008-8c6b-3c64a2b2730c') }
311
+ let(:person) do
312
+ create(:person, global_registry_id: '2f0c62f1-5738-4860-88bd-5706fb801d7b', country_of_residence: country)
313
+ end
314
+ let!(:request) do
315
+ stub_request(:put, "https://backend.global-registry.org/entities/#{person.global_registry_id}")
316
+ .with(body: { entity: { person: { 'country:relationship': {
317
+ client_integration_id: "cor_#{person.id}",
318
+ client_updated_at: '2001-02-03 00:00:00', country_of_residence: true,
319
+ country: country.global_registry_id
320
+ } }, client_integration_id: person.id } },
321
+ query: { full_response: 'true', fields: 'country:relationship' })
322
+ .to_return(body: file_fixture('put_entities_person_country_relationship.json'), status: 200)
323
+ end
324
+
325
+ it 'should push relationship' do
326
+ worker.push_relationship_to_global_registry
327
+ expect(request).to have_been_requested.once
328
+ expect(person.country_of_residence_gr_id).to eq 'a4c030ce-13f2-44f5-8131-4003eb21c0ae'
329
+ end
330
+ end
331
+ end
16
332
  end
17
333
 
18
- it 'fails silently on ActiveRecord::RecordNotFound' do
19
- allow(Namespaced::Person).to receive(:push_relationship_to_global_registry)
20
- expect(Namespaced::Person).to receive(:find).with(user.id).and_raise(ActiveRecord::RecordNotFound)
21
- expect(user).not_to receive(:push_relationship_to_global_registry)
334
+ describe Community do
335
+ let(:worker) { GlobalRegistry::Bindings::Workers::PushRelationshipWorker.new community, :infobase_ministry }
336
+ let(:community) do
337
+ create(:community, global_registry_id: '6133f6fe-c63a-425a-bb46-68917c689723', infobase_id: 2345)
338
+ end
339
+ let!(:request) do
340
+ stub_request(:put, "https://backend.global-registry.org/entities/#{community.global_registry_id}")
341
+ .with(body: { entity: { community: { 'ministry:relationship': {
342
+ client_integration_id: community.id, client_updated_at: '2001-02-03 00:00:00',
343
+ ministry: '41f767fd-86f4-42e2-8d24-cbc3f697b794'
344
+ } }, client_integration_id: community.id } },
345
+ query: { full_response: 'true', fields: 'ministry:relationship' })
346
+ .to_return(body: file_fixture('put_entities_community_relationship.json'), status: 200)
347
+ end
22
348
 
23
- worker = GlobalRegistry::Bindings::Workers::PushRelationshipWorker.new
24
- worker.perform('Namespaced::Person', user.id)
349
+ it 'should push relationship' do
350
+ worker.push_relationship_to_global_registry
351
+ expect(request).to have_been_requested.once
352
+ expect(community.infobase_gr_id).to eq 'ee40f9ed-d625-405b-8ce6-aec821611ec6'
353
+ end
25
354
  end
26
355
  end
27
356
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: global-registry-bindings
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Zoetewey
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-19 00:00:00.000000000 Z
11
+ date: 2017-07-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -297,8 +297,6 @@ files:
297
297
  - MIT-LICENSE
298
298
  - README.md
299
299
  - lib/global_registry_bindings.rb
300
- - lib/global_registry_bindings/entity/delete_entity_methods.rb
301
- - lib/global_registry_bindings/entity/entity_methods.rb
302
300
  - lib/global_registry_bindings/entity/entity_type_methods.rb
303
301
  - lib/global_registry_bindings/entity/mdm_methods.rb
304
302
  - lib/global_registry_bindings/entity/push_entity_methods.rb
@@ -306,14 +304,25 @@ files:
306
304
  - lib/global_registry_bindings/entity/relationship_type_methods.rb
307
305
  - lib/global_registry_bindings/exceptions.rb
308
306
  - lib/global_registry_bindings/global_registry_bindings.rb
307
+ - lib/global_registry_bindings/model/delete_entity.rb
308
+ - lib/global_registry_bindings/model/entity.rb
309
+ - lib/global_registry_bindings/model/pull_mdm.rb
310
+ - lib/global_registry_bindings/model/push_entity.rb
311
+ - lib/global_registry_bindings/model/push_relationship.rb
312
+ - lib/global_registry_bindings/model/relationship.rb
309
313
  - lib/global_registry_bindings/options.rb
310
- - lib/global_registry_bindings/options/class_options.rb
311
- - lib/global_registry_bindings/options/instance_options.rb
314
+ - lib/global_registry_bindings/options/entity_class_options.rb
315
+ - lib/global_registry_bindings/options/entity_instance_options.rb
316
+ - lib/global_registry_bindings/options/entity_options_parser.rb
317
+ - lib/global_registry_bindings/options/relationship_class_options.rb
318
+ - lib/global_registry_bindings/options/relationship_instance_options.rb
319
+ - lib/global_registry_bindings/options/relationship_options_parser.rb
312
320
  - lib/global_registry_bindings/railtie.rb
313
321
  - lib/global_registry_bindings/version.rb
314
- - lib/global_registry_bindings/workers/delete_gr_entity_worker.rb
322
+ - lib/global_registry_bindings/worker.rb
323
+ - lib/global_registry_bindings/workers/delete_entity_worker.rb
315
324
  - lib/global_registry_bindings/workers/pull_mdm_id_worker.rb
316
- - lib/global_registry_bindings/workers/push_gr_entity_worker.rb
325
+ - lib/global_registry_bindings/workers/push_entity_worker.rb
317
326
  - lib/global_registry_bindings/workers/push_relationship_worker.rb
318
327
  - spec/acceptance/global_registry_bindings_spec.rb
319
328
  - spec/factories/factories.rb
@@ -323,6 +332,7 @@ files:
323
332
  - spec/fixtures/get_entity_types.json
324
333
  - spec/fixtures/get_entity_types_address.json
325
334
  - spec/fixtures/get_entity_types_address_partial.json
335
+ - spec/fixtures/get_entity_types_area.json
326
336
  - spec/fixtures/get_entity_types_fancy_org.json
327
337
  - spec/fixtures/get_entity_types_fancy_org_partial.json
328
338
  - spec/fixtures/get_entity_types_person.json
@@ -330,20 +340,32 @@ files:
330
340
  - spec/fixtures/get_relationship_types.json
331
341
  - spec/fixtures/get_relationship_types_person_fancy_org.json
332
342
  - spec/fixtures/get_relationship_types_person_fancy_org_partial.json
343
+ - spec/fixtures/post_entities_community.json
333
344
  - spec/fixtures/post_entities_fancy_org.json
334
345
  - spec/fixtures/post_entities_fancy_org_parent.json
335
346
  - spec/fixtures/post_entities_person.json
336
347
  - spec/fixtures/post_entity_types_address.json
337
348
  - spec/fixtures/post_entity_types_fancy_org.json
338
349
  - spec/fixtures/post_entity_types_person.json
350
+ - spec/fixtures/post_relationship_types_fancy_org_area.json
339
351
  - spec/fixtures/post_relationship_types_person_fancy_org.json
340
352
  - spec/fixtures/put_entities_address.json
353
+ - spec/fixtures/put_entities_community_relationship.json
354
+ - spec/fixtures/put_entities_fancy_org_area_relationship.json
355
+ - spec/fixtures/put_entities_fancy_org_relationship.json
356
+ - spec/fixtures/put_entities_person_country_relationship.json
341
357
  - spec/fixtures/put_entities_person_relationship.json
342
358
  - spec/fixtures/put_entities_relationship.json
359
+ - spec/fixtures/put_entities_relationship_400.json
343
360
  - spec/fixtures/put_relationship_types_fields.json
361
+ - spec/fixtures/put_relationship_types_fields_fancy_org_area.json
362
+ - spec/helpers/sidekiq_helpers.rb
344
363
  - spec/internal/app/models/address.rb
345
364
  - spec/internal/app/models/application_record.rb
365
+ - spec/internal/app/models/area.rb
346
366
  - spec/internal/app/models/assignment.rb
367
+ - spec/internal/app/models/community.rb
368
+ - spec/internal/app/models/country.rb
347
369
  - spec/internal/app/models/default.rb
348
370
  - spec/internal/app/models/namespaced/person.rb
349
371
  - spec/internal/app/models/namespaced/person/user_edited.rb
@@ -361,7 +383,7 @@ files:
361
383
  - spec/spec_helper.rb
362
384
  - spec/workers/delete_gr_entity_worker_spec.rb
363
385
  - spec/workers/pull_mdm_id_worker_spec.rb
364
- - spec/workers/push_gr_entity_worker_spec.rb
386
+ - spec/workers/push_entity_worker_spec.rb
365
387
  - spec/workers/push_relationship_worker_spec.rb
366
388
  homepage: https://github.com/CruGlobal/global-registry-bindings
367
389
  licenses:
@@ -396,6 +418,7 @@ test_files:
396
418
  - spec/fixtures/get_entity_types.json
397
419
  - spec/fixtures/get_entity_types_address.json
398
420
  - spec/fixtures/get_entity_types_address_partial.json
421
+ - spec/fixtures/get_entity_types_area.json
399
422
  - spec/fixtures/get_entity_types_fancy_org.json
400
423
  - spec/fixtures/get_entity_types_fancy_org_partial.json
401
424
  - spec/fixtures/get_entity_types_person.json
@@ -403,20 +426,32 @@ test_files:
403
426
  - spec/fixtures/get_relationship_types.json
404
427
  - spec/fixtures/get_relationship_types_person_fancy_org.json
405
428
  - spec/fixtures/get_relationship_types_person_fancy_org_partial.json
429
+ - spec/fixtures/post_entities_community.json
406
430
  - spec/fixtures/post_entities_fancy_org.json
407
431
  - spec/fixtures/post_entities_fancy_org_parent.json
408
432
  - spec/fixtures/post_entities_person.json
409
433
  - spec/fixtures/post_entity_types_address.json
410
434
  - spec/fixtures/post_entity_types_fancy_org.json
411
435
  - spec/fixtures/post_entity_types_person.json
436
+ - spec/fixtures/post_relationship_types_fancy_org_area.json
412
437
  - spec/fixtures/post_relationship_types_person_fancy_org.json
413
438
  - spec/fixtures/put_entities_address.json
439
+ - spec/fixtures/put_entities_community_relationship.json
440
+ - spec/fixtures/put_entities_fancy_org_area_relationship.json
441
+ - spec/fixtures/put_entities_fancy_org_relationship.json
442
+ - spec/fixtures/put_entities_person_country_relationship.json
414
443
  - spec/fixtures/put_entities_person_relationship.json
415
444
  - spec/fixtures/put_entities_relationship.json
445
+ - spec/fixtures/put_entities_relationship_400.json
416
446
  - spec/fixtures/put_relationship_types_fields.json
447
+ - spec/fixtures/put_relationship_types_fields_fancy_org_area.json
448
+ - spec/helpers/sidekiq_helpers.rb
417
449
  - spec/internal/app/models/address.rb
418
450
  - spec/internal/app/models/application_record.rb
451
+ - spec/internal/app/models/area.rb
419
452
  - spec/internal/app/models/assignment.rb
453
+ - spec/internal/app/models/community.rb
454
+ - spec/internal/app/models/country.rb
420
455
  - spec/internal/app/models/default.rb
421
456
  - spec/internal/app/models/namespaced/person/user_edited.rb
422
457
  - spec/internal/app/models/namespaced/person.rb
@@ -434,5 +469,5 @@ test_files:
434
469
  - spec/spec_helper.rb
435
470
  - spec/workers/delete_gr_entity_worker_spec.rb
436
471
  - spec/workers/pull_mdm_id_worker_spec.rb
437
- - spec/workers/push_gr_entity_worker_spec.rb
472
+ - spec/workers/push_entity_worker_spec.rb
438
473
  - spec/workers/push_relationship_worker_spec.rb