diff --git a/mod-audit-server/src/test/java/org/folio/services/diff/DiffCalculatorTest.java b/mod-audit-server/src/test/java/org/folio/services/diff/DiffCalculatorTest.java index 4b2352d1..f897dde9 100644 --- a/mod-audit-server/src/test/java/org/folio/services/diff/DiffCalculatorTest.java +++ b/mod-audit-server/src/test/java/org/folio/services/diff/DiffCalculatorTest.java @@ -293,4 +293,4 @@ void shouldDetectFieldChangesInInnerObjectCollectionAndInnerObject() { private static Map getMap(Instance obj) { return new JsonObject(Json.encode(obj)).getMap(); } -} \ No newline at end of file +} diff --git a/mod-audit-server/src/test/java/org/folio/services/diff/HoldingsDiffCalculatorTest.java b/mod-audit-server/src/test/java/org/folio/services/diff/HoldingsDiffCalculatorTest.java index 50aa4996..25fc8da2 100644 --- a/mod-audit-server/src/test/java/org/folio/services/diff/HoldingsDiffCalculatorTest.java +++ b/mod-audit-server/src/test/java/org/folio/services/diff/HoldingsDiffCalculatorTest.java @@ -4,9 +4,13 @@ import io.vertx.core.json.Json; import io.vertx.core.json.JsonObject; + +import java.util.ArrayList; +import java.util.List; import java.util.Map; import org.folio.CopilotGenerated; import org.folio.domain.diff.FieldChangeDto; +import org.folio.rest.external.AdditionalCallNumber; import org.folio.rest.external.HoldingsRecord; import org.folio.util.inventory.InventoryResourceType; import org.folio.utils.UnitTest; @@ -52,7 +56,32 @@ void shouldDetectFieldModifiedChange() { .containsExactlyInAnyOrder(FieldChangeDto.modified("callNumber", "callNumber", "Call Number 1", "Call Number 2")); } + @Test + void shouldDetectNewAdditionalCallNumber() { + List additionalCallNumberList = new ArrayList<>(); + AdditionalCallNumber additionalCallNumber = new AdditionalCallNumber().withCallNumber("123").withPrefix("A").withSuffix("Z"); + additionalCallNumberList.add(additionalCallNumber); + var oldItem = getMap(new HoldingsRecord().withId("1").withAdditionalCallNumbers(additionalCallNumberList)); + AdditionalCallNumber additionalCallNumberNew = new AdditionalCallNumber().withCallNumber("456").withPrefix("A").withSuffix("Z"); + additionalCallNumberList.add(additionalCallNumberNew); + var newItem = getMap(new HoldingsRecord().withId("1").withAdditionalCallNumbers(additionalCallNumberList)); + var changeRecordDTO = holdingsDiffCalculator.calculateDiff(oldItem, newItem); + assertThat(changeRecordDTO.getCollectionChanges()).hasSize(1); + } + + @Test + void shouldDetectAdditionalCallNumberChange() { + List additionalCallNumberList = new ArrayList<>(); + AdditionalCallNumber additionalCallNumber = new AdditionalCallNumber().withCallNumber("123").withPrefix("A").withSuffix("Z"); + additionalCallNumberList.add(additionalCallNumber); + var oldItem = getMap(new HoldingsRecord().withId("1").withAdditionalCallNumbers(additionalCallNumberList)); + additionalCallNumberList.getFirst().setCallNumber("456"); + var newItem = getMap(new HoldingsRecord().withId("1").withAdditionalCallNumbers(additionalCallNumberList)); + var changeRecordDTO = holdingsDiffCalculator.calculateDiff(oldItem, newItem); + assertThat(changeRecordDTO.getCollectionChanges()).hasSize(1); + } + private static Map getMap(HoldingsRecord obj) { return new JsonObject(Json.encode(obj)).getMap(); } -} \ No newline at end of file +} diff --git a/mod-audit-server/src/test/java/org/folio/services/diff/ItemDiffCalculatorTest.java b/mod-audit-server/src/test/java/org/folio/services/diff/ItemDiffCalculatorTest.java index cfdecc65..9dc35b34 100644 --- a/mod-audit-server/src/test/java/org/folio/services/diff/ItemDiffCalculatorTest.java +++ b/mod-audit-server/src/test/java/org/folio/services/diff/ItemDiffCalculatorTest.java @@ -4,9 +4,13 @@ import io.vertx.core.json.Json; import io.vertx.core.json.JsonObject; + +import java.util.ArrayList; +import java.util.List; import java.util.Map; import org.folio.CopilotGenerated; import org.folio.domain.diff.FieldChangeDto; +import org.folio.rest.external.AdditionalCallNumber; import org.folio.rest.external.Item; import org.folio.util.inventory.InventoryResourceType; import org.folio.utils.UnitTest; @@ -54,7 +58,32 @@ void shouldDetectFieldModifiedChange() { .containsExactlyInAnyOrder(FieldChangeDto.modified("barcode", "barcode", "Barcode 1", "Barcode 2")); } + @Test + void shouldDetectNewAdditionalCallNumber() { + List additionalCallNumberList = new ArrayList<>(); + AdditionalCallNumber additionalCallNumber = new AdditionalCallNumber().withCallNumber("123").withPrefix("A").withSuffix("Z"); + additionalCallNumberList.add(additionalCallNumber); + var oldItem = getMap(new Item().withId("1").withAdditionalCallNumbers(additionalCallNumberList)); + AdditionalCallNumber additionalCallNumberNew = new AdditionalCallNumber().withCallNumber("456").withPrefix("A").withSuffix("Z"); + additionalCallNumberList.add(additionalCallNumberNew); + var newItem = getMap(new Item().withId("1").withAdditionalCallNumbers(additionalCallNumberList)); + var changeRecordDTO = itemDiffCalculator.calculateDiff(oldItem, newItem); + assertThat(changeRecordDTO.getCollectionChanges()).hasSize(1); + } + + @Test + void shouldDetectAdditionalCallNumberChange() { + List additionalCallNumberList = new ArrayList<>(); + AdditionalCallNumber additionalCallNumber = new AdditionalCallNumber().withCallNumber("123").withPrefix("A").withSuffix("Z"); + additionalCallNumberList.add(additionalCallNumber); + var oldItem = getMap(new Item().withId("1").withAdditionalCallNumbers(additionalCallNumberList)); + additionalCallNumberList.getFirst().setCallNumber("456"); + var newItem = getMap(new Item().withId("1").withAdditionalCallNumbers(additionalCallNumberList)); + var changeRecordDTO = itemDiffCalculator.calculateDiff(oldItem, newItem); + assertThat(changeRecordDTO.getCollectionChanges()).hasSize(1); + } + private static Map getMap(Item obj) { return new JsonObject(Json.encode(obj)).getMap(); } -} \ No newline at end of file +} diff --git a/ramls/schemas/external/additionalCallNumber.json b/ramls/schemas/external/additionalCallNumber.json new file mode 100644 index 00000000..3d81d551 --- /dev/null +++ b/ramls/schemas/external/additionalCallNumber.json @@ -0,0 +1,20 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "description": "An additional call number", + "type": "object", + "properties": { + "typeId": { + "type": "string" + }, + "prefix": { + "type": "string" + }, + "callNumber": { + "type": "string" + }, + "suffix": { + "type": "string" + } + }, + "required": ["callNumber"] +} diff --git a/ramls/schemas/external/holdingsRecord.json b/ramls/schemas/external/holdingsRecord.json index 04f72041..c63a03ff 100644 --- a/ramls/schemas/external/holdingsRecord.json +++ b/ramls/schemas/external/holdingsRecord.json @@ -25,6 +25,14 @@ "callNumberTypeId": { "type": "string" }, + "additionalCallNumbers": { + "type": "array", + "items": { + "type": "object", + "$ref": "additionalCallNumber.json", + "uniqueItems": true + } + }, "copyNumber": { "type": "string" }, diff --git a/ramls/schemas/external/item.json b/ramls/schemas/external/item.json index 457e883d..541c2bce 100644 --- a/ramls/schemas/external/item.json +++ b/ramls/schemas/external/item.json @@ -155,6 +155,14 @@ "itemLevelCallNumberTypeId": { "type": "string" }, + "additionalCallNumbers": { + "type": "array", + "items": { + "type": "object", + "$ref": "additionalCallNumber.json", + "uniqueItems": true + } + }, "lastCheckIn": { "properties": { "dateTime": {