diff --git a/src/main/java/org/folio/inventory/instanceingress/handler/InstanceIngressEventHandler.java b/src/main/java/org/folio/inventory/instanceingress/handler/InstanceIngressEventHandler.java index 74bdfc146..18320b5bf 100644 --- a/src/main/java/org/folio/inventory/instanceingress/handler/InstanceIngressEventHandler.java +++ b/src/main/java/org/folio/inventory/instanceingress/handler/InstanceIngressEventHandler.java @@ -46,6 +46,7 @@ public interface InstanceIngressEventHandler { String LINKED_DATA_ID = "linkedDataId"; + String INSTANCE_ID = "instanceId"; String FAILURE = "Failed to process InstanceIngressEvent with id {}"; CompletableFuture handle(InstanceIngressEvent instanceIngressEvent); @@ -57,11 +58,15 @@ default boolean eventContainsNoData(InstanceIngressEvent event) { } default Optional getInstanceId(InstanceIngressEvent event) { - return ofNullable(event.getEventPayload().getSourceRecordIdentifier()); + return ofNullable(event.getEventPayload()) + .map(InstanceIngressPayload::getAdditionalProperties) + .map(ap -> ap.get(INSTANCE_ID)) + .map(o -> (String) o); } default Record constructMarcBibRecord(InstanceIngressPayload eventPayload) { - var recordId = UUID.randomUUID().toString(); + var recordId = ofNullable(eventPayload.getSourceRecordIdentifier()) + .orElseGet(() -> UUID.randomUUID().toString()); var marcBibRecord = new org.folio.rest.jaxrs.model.Record() .withId(recordId) .withRecordType(MARC_BIB) diff --git a/src/test/java/org/folio/inventory/instanceingress/handler/CreateInstanceIngressEventHandlerUnitTest.java b/src/test/java/org/folio/inventory/instanceingress/handler/CreateInstanceIngressEventHandlerUnitTest.java index 01dbce3ea..701f1350e 100644 --- a/src/test/java/org/folio/inventory/instanceingress/handler/CreateInstanceIngressEventHandlerUnitTest.java +++ b/src/test/java/org/folio/inventory/instanceingress/handler/CreateInstanceIngressEventHandlerUnitTest.java @@ -330,14 +330,16 @@ public void shouldReturnFailedFuture_ifItsFailedToCreateMarcRecordInSrs() throws @Test public void shouldReturnSucceededFuture_ifProcessFinishedCorrectly() throws IOException, ExecutionException, InterruptedException { // given - var linkedDataIdId = "someLinkedDataIdId"; + var linkedDataId = "someLinkedDataId"; + var instanceId = "someInstanceId"; var event = new InstanceIngressEvent() .withId(UUID.randomUUID().toString()) .withEventPayload(new InstanceIngressPayload() .withSourceRecordObject(TestUtil.readFileFromPath(BIB_RECORD_PATH)) .withSourceType(LINKED_DATA) .withSourceRecordIdentifier(UUID.randomUUID().toString()) - .withAdditionalProperty("linkedDataId", linkedDataIdId) + .withAdditionalProperty("linkedDataId", linkedDataId) + .withAdditionalProperty("instanceId", instanceId) ); doReturn(succeededFuture(null)).when(idStorageService).store(anyString(), anyString(), anyString()); var mappingRules = new JsonObject(TestUtil.readFileFromPath(MAPPING_RULES_PATH)); @@ -365,18 +367,16 @@ public void shouldReturnSucceededFuture_ifProcessFinishedCorrectly() throws IOEx assertThat(future.isDone()).isTrue(); var instance = future.get(); - assertThat(instance.getId()).isEqualTo(event.getEventPayload().getSourceRecordIdentifier()); + assertThat(instance.getId()).isEqualTo(instanceId); assertThat(instance.getSource()).isEqualTo("LINKED_DATA"); - assertThat(instance.getIdentifiers().stream().anyMatch(i -> i.value.equals("(ld) " + linkedDataIdId))).isTrue(); + assertThat(instance.getIdentifiers().stream().anyMatch(i -> i.value.equals("(ld) " + linkedDataId))).isTrue(); var recordCaptor = ArgumentCaptor.forClass(Record.class); verify(sourceStorageClient).postSourceStorageRecords(recordCaptor.capture()); var recordSentToSRS = recordCaptor.getValue(); - assertThat(recordSentToSRS.getId()).isNotNull(); - assertThat(recordSentToSRS.getId()).isNotEqualTo(event.getEventPayload().getSourceRecordIdentifier()); - assertThat(recordSentToSRS.getId()).doesNotContain(linkedDataIdId); + assertThat(recordSentToSRS.getId()).isEqualTo(event.getEventPayload().getSourceRecordIdentifier()); assertThat(recordSentToSRS.getRecordType()).isEqualTo(Record.RecordType.MARC_BIB); assertThat(AdditionalFieldsUtil.getValue(recordSentToSRS, TAG_999, SUBFIELD_I)).hasValue(instance.getId()); - assertThat(AdditionalFieldsUtil.getValue(recordSentToSRS, TAG_999, SUBFIELD_L)).hasValue(linkedDataIdId); + assertThat(AdditionalFieldsUtil.getValue(recordSentToSRS, TAG_999, SUBFIELD_L)).hasValue(linkedDataId); } } diff --git a/src/test/java/org/folio/inventory/instanceingress/handler/UpdateInstanceIngressEventHandlerUnitTest.java b/src/test/java/org/folio/inventory/instanceingress/handler/UpdateInstanceIngressEventHandlerUnitTest.java index 51a4c80c7..0c9afb4be 100644 --- a/src/test/java/org/folio/inventory/instanceingress/handler/UpdateInstanceIngressEventHandlerUnitTest.java +++ b/src/test/java/org/folio/inventory/instanceingress/handler/UpdateInstanceIngressEventHandlerUnitTest.java @@ -490,14 +490,16 @@ public void shouldReturnFailedFuture_ifCreatePrecedingSucceedingTitlesFailed() t @Test public void shouldReturnSucceededFuture_ifProcessFinishedCorrectly() throws IOException, ExecutionException, InterruptedException { // given - var linkedDataIdId = "someLinkedDataIdId"; + var linkedDataId = "someLinkedDataId"; + var instanceId = "instanceId"; var event = new InstanceIngressEvent() .withId(UUID.randomUUID().toString()) .withEventPayload(new InstanceIngressPayload() .withSourceRecordObject(TestUtil.readFileFromPath(BIB_RECORD_PATH)) .withSourceType(LINKED_DATA) .withSourceRecordIdentifier(UUID.randomUUID().toString()) - .withAdditionalProperty("linkedDataId", linkedDataIdId) + .withAdditionalProperty("linkedDataId", linkedDataId) + .withAdditionalProperty("instanceId", instanceId) ); var mappingRules = new JsonObject(TestUtil.readFileFromPath(MAPPING_RULES_PATH)); doReturn(succeededFuture(Optional.of(new MappingMetadataDto() @@ -537,10 +539,10 @@ public void shouldReturnSucceededFuture_ifProcessFinishedCorrectly() throws IOEx assertThat(future.isDone()).isTrue(); var instance = future.get(); - assertThat(instance.getId()).isEqualTo(event.getEventPayload().getSourceRecordIdentifier()); + assertThat(instance.getId()).isEqualTo(instanceId); assertThat(instance.getHrid()).isEqualTo(existedInstance.getHrid()); assertThat(instance.getSource()).isEqualTo("LINKED_DATA"); - assertThat(instance.getIdentifiers().stream().anyMatch(i -> i.value.equals("(ld) " + linkedDataIdId))).isTrue(); + assertThat(instance.getIdentifiers().stream().anyMatch(i -> i.value.equals("(ld) " + linkedDataId))).isTrue(); var recordCaptor = ArgumentCaptor.forClass(Record.class); verify(sourceStorageClient).putSourceStorageRecordsGenerationById(eq(previousSrsId), recordCaptor.capture()); @@ -548,11 +550,10 @@ public void shouldReturnSucceededFuture_ifProcessFinishedCorrectly() throws IOEx assertThat(recordSentToSRS.getId()).isNotNull(); assertThat(recordSentToSRS.getId()).isNotEqualTo(previousSrsId); assertThat(recordSentToSRS.getMatchedId()).isEqualTo(previousSrsId); - assertThat(recordSentToSRS.getId()).isNotEqualTo(event.getEventPayload().getSourceRecordIdentifier()); - assertThat(recordSentToSRS.getId()).doesNotContain(linkedDataIdId); + assertThat(recordSentToSRS.getId()).isEqualTo(event.getEventPayload().getSourceRecordIdentifier()); assertThat(recordSentToSRS.getRecordType()).isEqualTo(Record.RecordType.MARC_BIB); assertThat(AdditionalFieldsUtil.getValue(recordSentToSRS, TAG_999, SUBFIELD_I)).hasValue(instance.getId()); - assertThat(AdditionalFieldsUtil.getValue(recordSentToSRS, TAG_999, SUBFIELD_L)).hasValue(linkedDataIdId); + assertThat(AdditionalFieldsUtil.getValue(recordSentToSRS, TAG_999, SUBFIELD_L)).hasValue(linkedDataId); } }