global-registry-bindings 0.1.1 → 0.1.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 (30) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +12 -4
  3. data/lib/global_registry_bindings/entity/push_relationship_methods.rb +53 -29
  4. data/lib/global_registry_bindings/entity/relationship_type_methods.rb +17 -8
  5. data/lib/global_registry_bindings/global_registry_bindings.rb +21 -14
  6. data/lib/global_registry_bindings/model/entity.rb +13 -9
  7. data/lib/global_registry_bindings/model/push_relationship.rb +6 -0
  8. data/lib/global_registry_bindings/model/relationship.rb +12 -10
  9. data/lib/global_registry_bindings/options/entity_class_options.rb +4 -0
  10. data/lib/global_registry_bindings/options/entity_instance_options.rb +1 -0
  11. data/lib/global_registry_bindings/options/entity_options_parser.rb +1 -0
  12. data/lib/global_registry_bindings/options/relationship_class_options.rb +9 -0
  13. data/lib/global_registry_bindings/options/relationship_instance_options.rb +16 -6
  14. data/lib/global_registry_bindings/options/relationship_options_parser.rb +5 -5
  15. data/lib/global_registry_bindings/version.rb +1 -1
  16. data/lib/global_registry_bindings/workers/push_relationship_worker.rb +2 -2
  17. data/spec/acceptance/global_registry_bindings_spec.rb +11 -9
  18. data/spec/factories/factories.rb +2 -0
  19. data/spec/fixtures/get_entity_types_fancy_org_assignment.json +35 -0
  20. data/spec/fixtures/post_relationship_types_assigned_by.json +16 -0
  21. data/spec/fixtures/put_entities_fancy_org_assignment_assigned_by.json +20 -0
  22. data/spec/internal/app/models/area.rb +2 -1
  23. data/spec/internal/app/models/assignment.rb +12 -2
  24. data/spec/internal/app/models/community.rb +2 -1
  25. data/spec/internal/app/models/namespaced/person.rb +6 -2
  26. data/spec/internal/app/models/organization.rb +3 -1
  27. data/spec/internal/db/schema.rb +2 -0
  28. data/spec/internal/log/test.log +28818 -0
  29. data/spec/workers/push_relationship_worker_spec.rb +133 -33
  30. metadata +10 -4
@@ -34,7 +34,7 @@ RSpec.describe GlobalRegistry::Bindings::Workers::PushRelationshipWorker do
34
34
 
35
35
  describe '#push_relationship_to_global_registry' do
36
36
  describe Assignment do
37
- let(:worker) { GlobalRegistry::Bindings::Workers::PushRelationshipWorker.new assignment, :assignment }
37
+ let(:worker) { GlobalRegistry::Bindings::Workers::PushRelationshipWorker.new assignment, :fancy_org_assignment }
38
38
  context 'as create' do
39
39
  let(:person) { create(:person, global_registry_id: '22527d88-3cba-11e7-b876-129bd0521531') }
40
40
  let(:organization) { create(:organization, gr_id: 'aebb4170-3f34-11e7-bba6-129bd0521531') }
@@ -71,7 +71,12 @@ RSpec.describe GlobalRegistry::Bindings::Workers::PushRelationshipWorker do
71
71
  'https://backend.global-registry.org/relationship_types/5d721db8-4248-11e7-90b4-129bd0521531')
72
72
  .with(body: { relationship_type: { fields: [{ name: 'role', field_type: 'string' },
73
73
  { name: 'hired_at', field_type: 'datetime' }] } })
74
- .to_return(body: file_fixture('put_relationship_types_fields.json'), status: 200)]
74
+ .to_return(body: file_fixture('put_relationship_types_fields.json'), status: 200),
75
+ stub_request(:put,
76
+ 'https://backend.global-registry.org/entity_types/5d70b630-4248-11e7-90b4-129bd0521531')
77
+ .with(body: { entity_type: { id: '5d70b630-4248-11e7-90b4-129bd0521531',
78
+ name: 'fancy_org_assignment' } })
79
+ .to_return(status: 200)]
75
80
  end
76
81
 
77
82
  it 'should create \'assignment\' relationship_type and push relationship' do
@@ -229,6 +234,74 @@ RSpec.describe GlobalRegistry::Bindings::Workers::PushRelationshipWorker do
229
234
  end
230
235
  end
231
236
 
237
+ describe Assignment do
238
+ let(:worker) { GlobalRegistry::Bindings::Workers::PushRelationshipWorker.new assignment, :assigned_by }
239
+
240
+ context 'as create' do
241
+ let(:person) { create(:person, global_registry_id: '22527d88-3cba-11e7-b876-129bd0521531') }
242
+ let(:organization) { create(:organization, gr_id: 'aebb4170-3f34-11e7-bba6-129bd0521531') }
243
+
244
+ context '\'assigned_by\' relationship_type does not exist' do
245
+ let(:assignment) do
246
+ create(:assignment, person: person, organization: organization, assigned_by: person,
247
+ global_registry_id: '51a014a4-4252-11e7-944f-129bd0521531')
248
+ end
249
+
250
+ let!(:requests) do
251
+ [stub_request(:get, 'https://backend.global-registry.org/entity_types')
252
+ .with(query: { 'filters[name]' => 'fancy_org_assignment' })
253
+ .to_return(body: file_fixture('get_entity_types_fancy_org_assignment.json'), status: 200),
254
+ stub_request(:get, 'https://backend.global-registry.org/entity_types')
255
+ .with(query: { 'filters[name]' => 'person', 'filters[parent_id]' => nil })
256
+ .to_return(body: file_fixture('get_entity_types_person.json'), status: 200),
257
+ stub_request(:get, 'https://backend.global-registry.org/relationship_types')
258
+ .with(query: { 'filters[between]' =>
259
+ '5d70b630-4248-11e7-90b4-129bd0521531,ee13a693-3ce7-4c19-b59a-30c8f137acd8' })
260
+ .to_return(body: file_fixture('get_relationship_types.json'), status: 200),
261
+ stub_request(:post, 'https://backend.global-registry.org/relationship_types')
262
+ .with(body: { relationship_type: { entity_type1_id: '5d70b630-4248-11e7-90b4-129bd0521531',
263
+ entity_type2_id: 'ee13a693-3ce7-4c19-b59a-30c8f137acd8',
264
+ relationship1: 'assigned_by', relationship2: 'person' } })
265
+ .to_return(body: file_fixture('post_relationship_types_assigned_by.json'), status: 200),
266
+ stub_request(:put,
267
+ 'https://backend.global-registry.org/entity_types/4f5d8150-76c7-11e7-b3f0-129bd0521531')
268
+ .with(body: { entity_type: { id: '4f5d8150-76c7-11e7-b3f0-129bd0521531',
269
+ name: 'assigned_by' } })
270
+ .to_return(status: 200),
271
+ stub_request(:put, "https://backend.global-registry.org/entities/#{assignment.global_registry_id}")
272
+ .with(body: { entity: { fancy_org_assignment: { 'person:relationship': {
273
+ client_integration_id: assignment.id,
274
+ client_updated_at: '2001-02-03 00:00:00', person: person.global_registry_id
275
+ } }, client_integration_id: assignment.id } },
276
+ query: { full_response: 'true', fields: 'person:relationship' })
277
+ .to_return(body: file_fixture('put_entities_fancy_org_assignment_assigned_by.json'), status: 200)]
278
+ end
279
+
280
+ it 'should create \'assigned_by\' relationship_type and push relationship' do
281
+ worker.push_relationship_to_global_registry
282
+ requests.each { |r| expect(r).to have_been_requested.once }
283
+ expect(assignment.assigned_by_gr_rel_id).to eq '0fd8b8b8-76c9-11e7-b15c-129bd0521531'
284
+ end
285
+ end
286
+
287
+ context 'fancy_org_assignment missing global_registry_id' do
288
+ let(:assignment) do
289
+ create(:assignment, person: person, organization: organization, assigned_by: person)
290
+ end
291
+
292
+ it 'should raise an exception' do
293
+ clear_sidekiq_jobs_and_locks
294
+
295
+ expect do
296
+ worker.push_relationship_to_global_registry
297
+ end.to raise_error(GlobalRegistry::Bindings::RelatedEntityMissingGlobalRegistryId).and(
298
+ change(GlobalRegistry::Bindings::Workers::PushRelationshipWorker.jobs, :size).by(2)
299
+ )
300
+ end
301
+ end
302
+ end
303
+ end
304
+
232
305
  describe Organization do
233
306
  let(:worker) { GlobalRegistry::Bindings::Workers::PushRelationshipWorker.new organization, :area }
234
307
  context 'as create' do
@@ -333,11 +406,11 @@ RSpec.describe GlobalRegistry::Bindings::Workers::PushRelationshipWorker do
333
406
 
334
407
  describe Community do
335
408
  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
409
 
340
410
  context '\'ministry\' entity_type does not exist' do
411
+ let(:community) do
412
+ create(:community, global_registry_id: '6133f6fe-c63a-425a-bb46-68917c689723', infobase_id: 2345)
413
+ end
341
414
  let!(:requests) do
342
415
  [stub_request(:get, 'https://backend.global-registry.org/entity_types')
343
416
  .with(query: { 'filters[name]' => 'ministry' })
@@ -355,36 +428,63 @@ RSpec.describe GlobalRegistry::Bindings::Workers::PushRelationshipWorker do
355
428
  end
356
429
  end
357
430
 
358
- context '\'ministry\' entity_type does not exist' do
359
- let!(:requests) do
360
- [stub_request(:get, 'https://backend.global-registry.org/entity_types')
361
- .with(query: { 'filters[name]' => 'ministry' })
362
- .to_return(body: file_fixture('get_entity_types_ministry.json'), status: 200),
363
- stub_request(:get, 'https://backend.global-registry.org/entity_types')
364
- .with(query: { 'filters[name]' => 'community' })
365
- .to_return(body: file_fixture('get_entity_types_community.json'), status: 200),
366
- stub_request(:get, 'https://backend.global-registry.org/relationship_types')
367
- .with(query: { 'filters[between]' =>
368
- '3d8a68df-72f3-45f0-848b-4a6322448a6c,f0f0876b-0ebe-4680-9e48-1c3b72523d07' })
369
- .to_return(body: file_fixture('get_relationship_types.json'), status: 200),
370
- stub_request(:post, 'https://backend.global-registry.org/relationship_types')
371
- .with(body: { relationship_type: { entity_type1_id: '3d8a68df-72f3-45f0-848b-4a6322448a6c',
372
- entity_type2_id: 'f0f0876b-0ebe-4680-9e48-1c3b72523d07',
373
- relationship1: 'community', relationship2: 'ministry' } })
374
- .to_return(body: file_fixture('post_relationship_types_community_ministry.json'), status: 200),
375
- stub_request(:put, "https://backend.global-registry.org/entities/#{community.global_registry_id}")
376
- .with(body: { entity: { community: { 'ministry:relationship': {
377
- client_integration_id: community.id, client_updated_at: '2001-02-03 00:00:00',
378
- ministry: '41f767fd-86f4-42e2-8d24-cbc3f697b794'
379
- } }, client_integration_id: community.id } },
380
- query: { full_response: 'true', fields: 'ministry:relationship' })
381
- .to_return(body: file_fixture('put_entities_community_relationship.json'), status: 200)]
431
+ context '\'ministry\' entity_type exists' do
432
+ context 'ministry global_registry_id not found' do
433
+ let(:community) do
434
+ create(:community, global_registry_id: '6133f6fe-c63a-425a-bb46-68917c689723',
435
+ infobase_id: 2345, infobase_gr_id: 'ee40f9ed-d625-405b-8ce6-aec821611ec6')
436
+ end
437
+ let!(:requests) do
438
+ [stub_request(:delete,
439
+ 'https://backend.global-registry.org/entities/ee40f9ed-d625-405b-8ce6-aec821611ec6')
440
+ .to_return(status: 200)]
441
+ end
442
+
443
+ it 'should delete existing relationship' do
444
+ allow(community).to receive(:pull_infobase_global_registry_id)
445
+ worker.push_relationship_to_global_registry
446
+ requests.each { |r| expect(r).to have_been_requested.once }
447
+ expect(community.infobase_gr_id).to be nil
448
+ end
382
449
  end
383
450
 
384
- it 'should raise an exception' do
385
- worker.push_relationship_to_global_registry
386
- requests.each { |r| expect(r).to have_been_requested.once }
387
- expect(community.infobase_gr_id).to eq('ee40f9ed-d625-405b-8ce6-aec821611ec6')
451
+ context 'ministry global_registry_id exists' do
452
+ let(:community) do
453
+ create(:community, global_registry_id: '6133f6fe-c63a-425a-bb46-68917c689723', infobase_id: 2345)
454
+ end
455
+ let!(:requests) do
456
+ [stub_request(:get, 'https://backend.global-registry.org/entity_types')
457
+ .with(query: { 'filters[name]' => 'ministry' })
458
+ .to_return(body: file_fixture('get_entity_types_ministry.json'), status: 200),
459
+ stub_request(:get, 'https://backend.global-registry.org/entity_types')
460
+ .with(query: { 'filters[name]' => 'community' })
461
+ .to_return(body: file_fixture('get_entity_types_community.json'), status: 200),
462
+ stub_request(:get, 'https://backend.global-registry.org/relationship_types')
463
+ .with(query: { 'filters[between]' =>
464
+ '3d8a68df-72f3-45f0-848b-4a6322448a6c,f0f0876b-0ebe-4680-9e48-1c3b72523d07' })
465
+ .to_return(body: file_fixture('get_relationship_types.json'), status: 200),
466
+ stub_request(:post, 'https://backend.global-registry.org/relationship_types')
467
+ .with(body: { relationship_type: { entity_type1_id: '3d8a68df-72f3-45f0-848b-4a6322448a6c',
468
+ entity_type2_id: 'f0f0876b-0ebe-4680-9e48-1c3b72523d07',
469
+ relationship1: 'community', relationship2: 'ministry' } })
470
+ .to_return(body: file_fixture('post_relationship_types_community_ministry.json'), status: 200),
471
+ stub_request(:put, "https://backend.global-registry.org/entities/#{community.global_registry_id}")
472
+ .with(body: { entity: { community: { 'ministry:relationship': {
473
+ client_integration_id: community.id, client_updated_at: '2001-02-03 00:00:00',
474
+ ministry: '41f767fd-86f4-42e2-8d24-cbc3f697b794'
475
+ } }, client_integration_id: community.id } },
476
+ query: { full_response: 'true', fields: 'ministry:relationship' })
477
+ .to_return(body: file_fixture('put_entities_community_relationship.json'), status: 200),
478
+ stub_request(:put,
479
+ 'https://backend.global-registry.org/entity_types/f854900f-9dcf-473a-be1b-399dda75edae')
480
+ .with(body: { entity_type: { id: 'f854900f-9dcf-473a-be1b-399dda75edae', name: 'infobase_ministry' } })
481
+ .to_return(status: 200)]
482
+ end
483
+ it 'should push relationship_type and infobase_ministry relationship' do
484
+ worker.push_relationship_to_global_registry
485
+ requests.each { |r| expect(r).to have_been_requested.once }
486
+ expect(community.infobase_gr_id).to eq('ee40f9ed-d625-405b-8ce6-aec821611ec6')
487
+ end
388
488
  end
389
489
  end
390
490
  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.1.1
4
+ version: 0.1.2
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-07-24 00:00:00.000000000 Z
11
+ date: 2017-08-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -36,7 +36,7 @@ dependencies:
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: '1.0'
39
+ version: '1.4'
40
40
  - - "<"
41
41
  - !ruby/object:Gem::Version
42
42
  version: '2'
@@ -46,7 +46,7 @@ dependencies:
46
46
  requirements:
47
47
  - - "~>"
48
48
  - !ruby/object:Gem::Version
49
- version: '1.0'
49
+ version: '1.4'
50
50
  - - "<"
51
51
  - !ruby/object:Gem::Version
52
52
  version: '2'
@@ -335,6 +335,7 @@ files:
335
335
  - spec/fixtures/get_entity_types_area.json
336
336
  - spec/fixtures/get_entity_types_community.json
337
337
  - spec/fixtures/get_entity_types_fancy_org.json
338
+ - spec/fixtures/get_entity_types_fancy_org_assignment.json
338
339
  - spec/fixtures/get_entity_types_fancy_org_partial.json
339
340
  - spec/fixtures/get_entity_types_ministry.json
340
341
  - spec/fixtures/get_entity_types_person.json
@@ -349,12 +350,14 @@ files:
349
350
  - spec/fixtures/post_entity_types_address.json
350
351
  - spec/fixtures/post_entity_types_fancy_org.json
351
352
  - spec/fixtures/post_entity_types_person.json
353
+ - spec/fixtures/post_relationship_types_assigned_by.json
352
354
  - spec/fixtures/post_relationship_types_community_ministry.json
353
355
  - spec/fixtures/post_relationship_types_fancy_org_area.json
354
356
  - spec/fixtures/post_relationship_types_person_fancy_org.json
355
357
  - spec/fixtures/put_entities_address.json
356
358
  - spec/fixtures/put_entities_community_relationship.json
357
359
  - spec/fixtures/put_entities_fancy_org_area_relationship.json
360
+ - spec/fixtures/put_entities_fancy_org_assignment_assigned_by.json
358
361
  - spec/fixtures/put_entities_fancy_org_relationship.json
359
362
  - spec/fixtures/put_entities_person_country_relationship.json
360
363
  - spec/fixtures/put_entities_person_relationship.json
@@ -424,6 +427,7 @@ test_files:
424
427
  - spec/fixtures/get_entity_types_area.json
425
428
  - spec/fixtures/get_entity_types_community.json
426
429
  - spec/fixtures/get_entity_types_fancy_org.json
430
+ - spec/fixtures/get_entity_types_fancy_org_assignment.json
427
431
  - spec/fixtures/get_entity_types_fancy_org_partial.json
428
432
  - spec/fixtures/get_entity_types_ministry.json
429
433
  - spec/fixtures/get_entity_types_person.json
@@ -438,12 +442,14 @@ test_files:
438
442
  - spec/fixtures/post_entity_types_address.json
439
443
  - spec/fixtures/post_entity_types_fancy_org.json
440
444
  - spec/fixtures/post_entity_types_person.json
445
+ - spec/fixtures/post_relationship_types_assigned_by.json
441
446
  - spec/fixtures/post_relationship_types_community_ministry.json
442
447
  - spec/fixtures/post_relationship_types_fancy_org_area.json
443
448
  - spec/fixtures/post_relationship_types_person_fancy_org.json
444
449
  - spec/fixtures/put_entities_address.json
445
450
  - spec/fixtures/put_entities_community_relationship.json
446
451
  - spec/fixtures/put_entities_fancy_org_area_relationship.json
452
+ - spec/fixtures/put_entities_fancy_org_assignment_assigned_by.json
447
453
  - spec/fixtures/put_entities_fancy_org_relationship.json
448
454
  - spec/fixtures/put_entities_person_country_relationship.json
449
455
  - spec/fixtures/put_entities_person_relationship.json