From 2ea9199c6c830c24d8909fa602eb2dda97d44e89 Mon Sep 17 00:00:00 2001 From: viacheslav_kolesnyk Date: Fri, 21 Aug 2026 18:22:48 +0200 Subject: [PATCH 1/2] feat(packages): Update visibility hidden reason handling - always set reason='Hidden by Customer' when hidden=true - remove reason when hidden=false Implements: MODKBEKBJ-840 --- ramls/types/visibilityData.json | 4 ++-- .../CommonPackagePutRequestConverter.java | 11 ++++++++-- .../CustomPackagePutRequestConverterTest.java | 22 ++++++++++++++++++- ...ManagedPackagePutRequestConverterTest.java | 22 ++++++++++++++++++- .../rmapi/packages/put-package-custom.json | 2 +- .../packages/put-package-is-selected.json | 6 ++--- 6 files changed, 57 insertions(+), 10 deletions(-) diff --git a/ramls/types/visibilityData.json b/ramls/types/visibilityData.json index a14f04c8c..3a5573dc8 100644 --- a/ramls/types/visibilityData.json +++ b/ramls/types/visibilityData.json @@ -9,12 +9,12 @@ "isHidden": { "type": "boolean", "description": "Whether resource is hidden or not", - "example": false + "example": true }, "reason": { "type": "string", "description": "Reason why resource is hidden", - "example": "Set by System" + "example": "Hidden by Customer" } } } \ No newline at end of file diff --git a/src/main/java/org/folio/rest/converter/packages/CommonPackagePutRequestConverter.java b/src/main/java/org/folio/rest/converter/packages/CommonPackagePutRequestConverter.java index e0434f32a..e7d69011a 100644 --- a/src/main/java/org/folio/rest/converter/packages/CommonPackagePutRequestConverter.java +++ b/src/main/java/org/folio/rest/converter/packages/CommonPackagePutRequestConverter.java @@ -9,9 +9,12 @@ import org.folio.holdingsiq.model.Proxy; import org.folio.holdingsiq.model.Visibility; import org.folio.rest.jaxrs.model.PackagePutDataAttributes; +import org.folio.rest.jaxrs.model.PackageVisibility; public abstract class CommonPackagePutRequestConverter { + static final String HIDDEN_BY_CUSTOMER = "Hidden by Customer"; + protected PackagePut.PackagePutBuilder convertCommonAttributes(PackagePutDataAttributes attributes) { var builder = PackagePut.builder(); @@ -29,12 +32,16 @@ protected PackagePut.PackagePutBuilder convertCommonAttributes(PackagePutDataAtt builder.customAltNames(convertCustomAltNames(attributes)); } - builder.visibilityDetails(mapItems(attributes.getVisibility(), - pv -> new Visibility(pv.getCategory().value(), pv.getHidden(), pv.getReason()))); + builder.visibilityDetails(mapItems(attributes.getVisibility(), this::convertVisibility)); return builder; } + protected Visibility convertVisibility(PackageVisibility pv) { + var reason = Boolean.TRUE.equals(pv.getHidden()) ? HIDDEN_BY_CUSTOMER : null; + return new Visibility(pv.getCategory().value(), pv.getHidden(), reason); + } + private void convertSimpleFields(PackagePutDataAttributes attributes, PackagePut.PackagePutBuilder builder) { builder.isSelected(attributes.getIsSelected()); builder.isFullPackage(attributes.getIsFullPackage()); diff --git a/src/test/java/org/folio/rest/converter/packages/CustomPackagePutRequestConverterTest.java b/src/test/java/org/folio/rest/converter/packages/CustomPackagePutRequestConverterTest.java index 8b4ffeb7f..91495872b 100644 --- a/src/test/java/org/folio/rest/converter/packages/CustomPackagePutRequestConverterTest.java +++ b/src/test/java/org/folio/rest/converter/packages/CustomPackagePutRequestConverterTest.java @@ -1,7 +1,10 @@ package org.folio.rest.converter.packages; +import static org.folio.rest.converter.packages.CommonPackagePutRequestConverter.HIDDEN_BY_CUSTOMER; import static org.folio.util.PackagesTestUtil.getPackagePutRequest; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.List; @@ -63,6 +66,23 @@ void shouldCreateRequestToChangeCustomPackageVisibility() { .withHidden(true) .withCategory(PackageVisibility.Category.PF))) )); - assertTrue(packagePut.getVisibilityDetails().getFirst().hidden()); + var visibility = packagePut.getVisibilityDetails().getFirst(); + assertTrue(visibility.hidden()); + assertEquals(HIDDEN_BY_CUSTOMER, visibility.reason()); + } + + @Test + void shouldIgnoreIncomingReasonAndClearReasonWhenHiddenFalse() { + var packagePut = + converter.convert(getPackagePutRequest( + new PackagePutDataAttributes() + .withVisibility(List.of(new PackageVisibility() + .withHidden(false) + .withReason("some incoming reason") + .withCategory(PackageVisibility.Category.PF))) + )); + var visibility = packagePut.getVisibilityDetails().getFirst(); + assertFalse(visibility.hidden()); + assertNull(visibility.reason()); } } diff --git a/src/test/java/org/folio/rest/converter/packages/ManagedPackagePutRequestConverterTest.java b/src/test/java/org/folio/rest/converter/packages/ManagedPackagePutRequestConverterTest.java index add2bc4f4..60982fc38 100644 --- a/src/test/java/org/folio/rest/converter/packages/ManagedPackagePutRequestConverterTest.java +++ b/src/test/java/org/folio/rest/converter/packages/ManagedPackagePutRequestConverterTest.java @@ -1,7 +1,10 @@ package org.folio.rest.converter.packages; +import static org.folio.rest.converter.packages.CommonPackagePutRequestConverter.HIDDEN_BY_CUSTOMER; import static org.folio.util.PackagesTestUtil.getPackagePutRequest; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.List; @@ -31,7 +34,24 @@ void shouldCreateRequestToHidePackage() { .withHidden(true) .withCategory(PackageVisibility.Category.PF))) )); - assertTrue(packagePut.getVisibilityDetails().getFirst().hidden()); + var visibility = packagePut.getVisibilityDetails().getFirst(); + assertTrue(visibility.hidden()); + assertEquals(HIDDEN_BY_CUSTOMER, visibility.reason()); + } + + @Test + void shouldIgnoreIncomingReasonAndClearReasonWhenHiddenFalse() { + var packagePut = converter.convert(getPackagePutRequest( + new PackagePutDataAttributes() + .withIsSelected(true) + .withVisibility(List.of(new PackageVisibility() + .withHidden(false) + .withReason("some incoming reason") + .withCategory(PackageVisibility.Category.PF))) + )); + var visibility = packagePut.getVisibilityDetails().getFirst(); + assertFalse(visibility.hidden()); + assertNull(visibility.reason()); } @Test diff --git a/src/test/resources/requests/rmapi/packages/put-package-custom.json b/src/test/resources/requests/rmapi/packages/put-package-custom.json index 88555a32d..7e0c3461a 100644 --- a/src/test/resources/requests/rmapi/packages/put-package-custom.json +++ b/src/test/resources/requests/rmapi/packages/put-package-custom.json @@ -6,7 +6,7 @@ { "category": "PF", "hidden": true, - "reason": "Hidden by customer" + "reason": "Hidden by Customer" } ], "customDescription": null, diff --git a/src/test/resources/requests/rmapi/packages/put-package-is-selected.json b/src/test/resources/requests/rmapi/packages/put-package-is-selected.json index d9a64bf30..20c2000b8 100644 --- a/src/test/resources/requests/rmapi/packages/put-package-is-selected.json +++ b/src/test/resources/requests/rmapi/packages/put-package-is-selected.json @@ -6,17 +6,17 @@ { "category": "PF", "hidden": false, - "reason": "Hidden by customer" + "reason": null }, { "category": "FTF", "hidden": true, - "reason": null + "reason": "Hidden by Customer" }, { "category": "MARC", "hidden": true, - "reason": null + "reason": "Hidden by Customer" } ], "customDescription": "Custom description", From f8ee29bc13f50de60b8a253e23efc027bbd3c473 Mon Sep 17 00:00:00 2001 From: viacheslav_kolesnyk Date: Fri, 21 Aug 2026 18:27:15 +0200 Subject: [PATCH 2/2] Update NEWS --- NEWS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/NEWS.md b/NEWS.md index 6aae11483..afe03b047 100644 --- a/NEWS.md +++ b/NEWS.md @@ -9,6 +9,7 @@ ### Features * Migrate Package Endpoints to HoldingsIQ v2 API ([MODKBEKBJ-804](https://folio-org.atlassian.net/browse/MODKBEKBJ-804)) * Add additional fields to POST /eholdings/packages endpoint ([MODKBEKBJ-823](https://folio-org.atlassian.net/browse/MODKBEKBJ-823)) +* Update visibility hidden reason handling ([MODKBEKBJ-823](https://folio-org.atlassian.net/browse/MODKBEKBJ-823)) ### Bug fixes * Fix offset handling when retrieving holdings from HoldingsIQ. ([MODKBEKBJ-825](https://folio-org.atlassian.net/browse/MODKBEKBJ-825))