From 728a4f73313bec736a36a99ecd8a99d3cb474a5f Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Fri, 15 Nov 2024 21:13:30 +0400 Subject: [PATCH 01/35] MCBFF-12: staff slips endpoints. --- descriptors/ModuleDescriptor-template.json | 90 ++++++++++-- .../client/feign/CirculationClient.java | 7 + .../client/feign/EcsTlrClient.java | 8 ++ .../controller/CirculationBffController.java | 12 ++ .../service/CirculationBffService.java | 3 + .../impl/CirculationBffServiceImpl.java | 24 ++++ .../circulationbff/util/MessageBuilder.java | 14 ++ .../swagger.api/circulation-bff.yaml | 4 + .../parameters/servicePointId.yaml | 5 + .../paths/staffSlips/pickStaffSlips.yaml | 20 +++ .../paths/staffSlips/searchStaffSlips.yaml | 20 +++ .../paths/staffSlips/staffClipsCommon.yaml | 15 ++ .../responses/staffSlipsResponse.yaml | 1 + .../schemas/dto/staffSlip/staffSlip.yaml | 133 ++++++++++++++++++ .../dto/staffSlip/staffSlipsCollection.yaml | 13 ++ .../circulationbff/api/StaffSlipApiTest.java | 82 +++++++++++ .../CirculationBffControllerTest.java | 41 ++++++ 17 files changed, 482 insertions(+), 10 deletions(-) create mode 100644 src/main/java/org/folio/circulationbff/util/MessageBuilder.java create mode 100644 src/main/resources/swagger.api/parameters/servicePointId.yaml create mode 100644 src/main/resources/swagger.api/paths/staffSlips/pickStaffSlips.yaml create mode 100644 src/main/resources/swagger.api/paths/staffSlips/searchStaffSlips.yaml create mode 100644 src/main/resources/swagger.api/paths/staffSlips/staffClipsCommon.yaml create mode 100644 src/main/resources/swagger.api/responses/staffSlipsResponse.yaml create mode 100644 src/main/resources/swagger.api/schemas/dto/staffSlip/staffSlip.yaml create mode 100644 src/main/resources/swagger.api/schemas/dto/staffSlip/staffSlipsCollection.yaml create mode 100644 src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java diff --git a/descriptors/ModuleDescriptor-template.json b/descriptors/ModuleDescriptor-template.json index 3307c24..58b181e 100644 --- a/descriptors/ModuleDescriptor-template.json +++ b/descriptors/ModuleDescriptor-template.json @@ -2,6 +2,45 @@ "id": "@artifactId@-@version@", "name": "Folio mod-circulation-bff module", "provides": [ + { + "id": "pick-slips", + "version": "1,0", + "handlers": [ + { + "methods": [ + "GET" + ], + "pathPattern": "/circulation-bff/pick-slips/{servicePointId}", + "permissionsRequired": [ + "circulation-bff.staff-slips.pick-slips.collection.get" + ], + "modulePermissions": [ + "tlr.staff-slips.pick-slips.get", + "circulation.pick-slips.get" + ] + } + ] + }, + { + "id": "search-slips", + "version": "1.0", + "handlers": [ + { + "methods": [ + "GET" + ], + "pathPattern": "/circulation-bff/search-slips/{servicePointId}", + "permissionsRequired": [ + "circulation-bff.staff-slips.search-slips.collection.get" + ], + "modulePermissions": [ + "tlr.staff-slips.search-slips.get", + "circulation.search-slips.get" + + ] + } + ] + }, { "id": "circulation-bff-users", "version": "1.0", @@ -11,7 +50,9 @@ "GET" ], "pathPattern": "/circulation-bff/external-users/{externalUserId}/tenant/{tenantId}", - "permissionsRequired": ["circulation-bff.external-users.collection.get"], + "permissionsRequired": [ + "circulation-bff.external-users.collection.get" + ], "modulePermissions": [ "users.item.get", "users.collection.get" @@ -28,7 +69,9 @@ "GET" ], "pathPattern": "/circulation-bff/requests/allowed-service-points", - "permissionsRequired": ["circulation-bff.requests.allowed-service-points.get"], + "permissionsRequired": [ + "circulation-bff.requests.allowed-service-points.get" + ], "modulePermissions": [ "tlr.ecs-tlr-allowed-service-points.get", "circulation.requests.allowed-service-points.get", @@ -43,15 +86,21 @@ "GET" ], "pathPattern": "/circulation-bff/requests/search-instances", - "permissionsRequired": ["circulation-bff.requests.search-instances.get"], - "modulePermissions": ["search.instances.collection.get"] + "permissionsRequired": [ + "circulation-bff.requests.search-instances.get" + ], + "modulePermissions": [ + "search.instances.collection.get" + ] }, { "methods": [ "POST" ], "pathPattern": "/circulation-bff/requests", - "permissionsRequired": ["circulation-bff.requests.post"], + "permissionsRequired": [ + "circulation-bff.requests.post" + ], "modulePermissions": [ "tlr.ecs-tlr-allowed-service-points.get", "circulation.requests.allowed-service-points.get", @@ -68,7 +117,9 @@ "POST" ], "pathPattern": "/circulation-bff/mediated-requests/confirm", - "permissionsRequired": ["circulation-bff.confirm-mediated-request.execute"], + "permissionsRequired": [ + "circulation-bff.confirm-mediated-request.execute" + ], "modulePermissions": [ "requests-mediated.mediated-request.item.post", "requests-mediated.mediated-request.item.put", @@ -108,7 +159,17 @@ ] } ], - "permissionSets" : [ + "permissionSets": [ + { + "permissionName": "circulation-bff.staff-slips.pick-slips.collection.get", + "displayName": "circulation BFF - pick staff slips by service point id", + "description": "pick staff slips by service point id" + }, + { + "permissionName": "circulation-bff.staff-slips.search-slips.collection.get", + "displayName": "circulation BFF - search staff slips by service point id", + "description": "search staff slips by service point id" + }, { "permissionName": "circulation-bff.external-users.collection.get", "displayName": "circulation BFF - find users by externalSystemId in the specified tenant", @@ -173,7 +234,7 @@ "version": "3.3" }, { - "id": "material-types", + "id": "material-types", "version": "2.2" } ], @@ -183,11 +244,20 @@ "dockerArgs": { "HostConfig": { "Memory": 357913941, - "PortBindings": { "8081/tcp": [ { "HostPort": "%p" } ] } + "PortBindings": { + "8081/tcp": [ + { + "HostPort": "%p" + } + ] + } } }, "env": [ - { "name": "JAVA_OPTIONS", "value": "-XX:MaxRAMPercentage=66.0"} + { + "name": "JAVA_OPTIONS", + "value": "-XX:MaxRAMPercentage=66.0" + } ] } } diff --git a/src/main/java/org/folio/circulationbff/client/feign/CirculationClient.java b/src/main/java/org/folio/circulationbff/client/feign/CirculationClient.java index ea93175..e9ed8f7 100644 --- a/src/main/java/org/folio/circulationbff/client/feign/CirculationClient.java +++ b/src/main/java/org/folio/circulationbff/client/feign/CirculationClient.java @@ -5,6 +5,7 @@ import org.folio.circulationbff.domain.dto.BffRequest; import org.folio.circulationbff.domain.dto.CirculationSettingsResponse; import org.folio.circulationbff.domain.dto.Request; +import org.folio.circulationbff.domain.dto.StaffSlipsCollection; import org.folio.spring.config.FeignClientConfiguration; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.SpringQueryMap; @@ -29,4 +30,10 @@ public interface CirculationClient { @GetMapping("/requests/{requestId}") Request getRequestById(@PathVariable("requestId") String requestId); + + @GetMapping("/pick-slips/{servicePointId}") + StaffSlipsCollection pickStaffSlips(@PathVariable ("servicePointId") String servicePointId); + + @GetMapping("/search-slips/{servicePointId}") + StaffSlipsCollection searchStaffSlips(@PathVariable ("servicePointId") String servicePointId); } diff --git a/src/main/java/org/folio/circulationbff/client/feign/EcsTlrClient.java b/src/main/java/org/folio/circulationbff/client/feign/EcsTlrClient.java index 149b389..fa15b68 100644 --- a/src/main/java/org/folio/circulationbff/client/feign/EcsTlrClient.java +++ b/src/main/java/org/folio/circulationbff/client/feign/EcsTlrClient.java @@ -4,11 +4,13 @@ import org.folio.circulationbff.domain.dto.AllowedServicePoints; import org.folio.circulationbff.domain.dto.BffRequest; import org.folio.circulationbff.domain.dto.EcsTlr; +import org.folio.circulationbff.domain.dto.StaffSlipsCollection; import org.folio.circulationbff.domain.dto.TlrSettings; import org.folio.spring.config.FeignClientConfiguration; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.SpringQueryMap; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -23,4 +25,10 @@ public interface EcsTlrClient { @PostMapping("/ecs-tlr") EcsTlr createRequest(@RequestBody BffRequest request); + + @GetMapping("/pick-slips/{servicePointId}") + StaffSlipsCollection pickStaffSlips(@PathVariable("servicePointId") String servicePointId); + + @GetMapping("/search-slips/{servicePointId}") + StaffSlipsCollection searchStaffSlips(@PathVariable ("servicePointId") String servicePointId); } diff --git a/src/main/java/org/folio/circulationbff/controller/CirculationBffController.java b/src/main/java/org/folio/circulationbff/controller/CirculationBffController.java index 9d5050b..fa46cda 100644 --- a/src/main/java/org/folio/circulationbff/controller/CirculationBffController.java +++ b/src/main/java/org/folio/circulationbff/controller/CirculationBffController.java @@ -13,6 +13,7 @@ import org.folio.circulationbff.domain.dto.EmptyBffSearchInstance; import org.folio.circulationbff.domain.dto.MediatedRequest; import org.folio.circulationbff.domain.dto.Request; +import org.folio.circulationbff.domain.dto.StaffSlipsCollection; import org.folio.circulationbff.domain.dto.UserCollection; import org.folio.circulationbff.rest.resource.CirculationBffApi; import org.folio.circulationbff.service.CirculationBffService; @@ -36,6 +37,17 @@ public class CirculationBffController implements CirculationBffApi { private final MediatedRequestsService mediatedRequestsService; private final UserService userService; + @Override + public ResponseEntity pickStaffSlips(String servicePointId) { + return ResponseEntity.status(HttpStatus.OK) + .body(circulationBffService.pickStaffSlipsByServicePointId(servicePointId)); + } + + @Override + public ResponseEntity searchStaffSlips(String servicePointId) { + return ResponseEntity.ok(circulationBffService.searchStaffSlipsByServicePointId(servicePointId)); + } + @Override public ResponseEntity getExternalUsers(String externalUserId, String tenantId) { log.info("getExternalUser:: externalUserId = {}, tenantId = {}", externalUserId, diff --git a/src/main/java/org/folio/circulationbff/service/CirculationBffService.java b/src/main/java/org/folio/circulationbff/service/CirculationBffService.java index f19689d..9cacec2 100644 --- a/src/main/java/org/folio/circulationbff/service/CirculationBffService.java +++ b/src/main/java/org/folio/circulationbff/service/CirculationBffService.java @@ -4,8 +4,11 @@ import org.folio.circulationbff.domain.dto.AllowedServicePoints; import org.folio.circulationbff.domain.dto.BffRequest; import org.folio.circulationbff.domain.dto.Request; +import org.folio.circulationbff.domain.dto.StaffSlipsCollection; public interface CirculationBffService { AllowedServicePoints getAllowedServicePoints(AllowedServicePointParams allowedServicePointParams, String tenantId); Request createRequest(BffRequest request, String tenantId); + StaffSlipsCollection pickStaffSlipsByServicePointId(String servicePointId); + StaffSlipsCollection searchStaffSlipsByServicePointId(String servicePointId); } diff --git a/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java b/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java index 1bfdafd..0bb86e2 100644 --- a/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java +++ b/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java @@ -7,9 +7,11 @@ import org.folio.circulationbff.domain.dto.BffRequest; import org.folio.circulationbff.domain.dto.EcsTlr; import org.folio.circulationbff.domain.dto.Request; +import org.folio.circulationbff.domain.dto.StaffSlipsCollection; import org.folio.circulationbff.service.CirculationBffService; import org.folio.circulationbff.service.SettingsService; import org.folio.circulationbff.service.UserTenantsService; +import org.folio.circulationbff.util.MessageBuilder; import org.springframework.stereotype.Service; import lombok.RequiredArgsConstructor; @@ -25,6 +27,28 @@ public class CirculationBffServiceImpl implements CirculationBffService { private final SettingsService settingsService; private final UserTenantsService userTenantsService; + @Override + public StaffSlipsCollection pickStaffSlipsByServicePointId(String servicePointId) { + log.info("pickStaffSlipsByServicePointId:: servicePointId: {}", servicePointId); + var isEcsTlrFeatureEnabled = ecsTlrClient.getTlrSettings().getEcsTlrFeatureEnabled(); + log.info("pickStaffSlipsByServicePointId:: {}", + MessageBuilder.buildLogMessageForStaffSlipsFetching(isEcsTlrFeatureEnabled)); + return isEcsTlrFeatureEnabled + ? ecsTlrClient.pickStaffSlips(servicePointId) + : circulationClient.pickStaffSlips(servicePointId); + } + + @Override + public StaffSlipsCollection searchStaffSlipsByServicePointId(String servicePointId) { + log.info("searchStaffSlipsByServicePointId:: servicePointId: {}", servicePointId); + var isEcsTlrFeatureEnabled = ecsTlrClient.getTlrSettings().getEcsTlrFeatureEnabled(); + log.info("searchStaffSlipsByServicePointId:: {}", + MessageBuilder.buildLogMessageForStaffSlipsFetching(isEcsTlrFeatureEnabled)); + return isEcsTlrFeatureEnabled + ? ecsTlrClient.searchStaffSlips(servicePointId) + : circulationClient.searchStaffSlips(servicePointId); + } + @Override public AllowedServicePoints getAllowedServicePoints(AllowedServicePointParams params, String tenantId) { log.info("getAllowedServicePoints:: params: {}", params); diff --git a/src/main/java/org/folio/circulationbff/util/MessageBuilder.java b/src/main/java/org/folio/circulationbff/util/MessageBuilder.java new file mode 100644 index 0000000..f102882 --- /dev/null +++ b/src/main/java/org/folio/circulationbff/util/MessageBuilder.java @@ -0,0 +1,14 @@ +package org.folio.circulationbff.util; + +import lombok.experimental.UtilityClass; + +@UtilityClass +public class MessageBuilder { + public static String buildLogMessageForStaffSlipsFetching(boolean isEcsTlrFeatureEnabled) { + String ecsTlrFeatureValueMessage = isEcsTlrFeatureEnabled ? "enabled" : "disabled"; + String staffSlipsSourceModuleName = isEcsTlrFeatureEnabled ? "mod-tlr" : "mod-circulation"; + + return String.format("Ecs TLR Feature is %s. Getting " + + "staff slips from %s", ecsTlrFeatureValueMessage, staffSlipsSourceModuleName); + } +} diff --git a/src/main/resources/swagger.api/circulation-bff.yaml b/src/main/resources/swagger.api/circulation-bff.yaml index 93781c1..0e7aa06 100644 --- a/src/main/resources/swagger.api/circulation-bff.yaml +++ b/src/main/resources/swagger.api/circulation-bff.yaml @@ -13,6 +13,10 @@ paths: $ref: 'paths/requests/requests.yaml' /circulation-bff/external-users/{externalUserId}/tenant/{tenantId}: $ref: 'paths/externalUser/externalUser.yaml' + /circulation-bff/pick-slips/{servicePointId}: + $ref: 'paths/staffSlips/pickStaffSlips.yaml' + /circulation-bff/search-slips/{servicePointId}: + $ref: 'paths/staffSlips/searchStaffSlips.yaml' components: schemas: diff --git a/src/main/resources/swagger.api/parameters/servicePointId.yaml b/src/main/resources/swagger.api/parameters/servicePointId.yaml new file mode 100644 index 0000000..1800086 --- /dev/null +++ b/src/main/resources/swagger.api/parameters/servicePointId.yaml @@ -0,0 +1,5 @@ +name: servicePointId +in: path +required: true +schema: + type: string \ No newline at end of file diff --git a/src/main/resources/swagger.api/paths/staffSlips/pickStaffSlips.yaml b/src/main/resources/swagger.api/paths/staffSlips/pickStaffSlips.yaml new file mode 100644 index 0000000..45ea0cf --- /dev/null +++ b/src/main/resources/swagger.api/paths/staffSlips/pickStaffSlips.yaml @@ -0,0 +1,20 @@ +get: + description: API for picking current staff slips + operationId: pickStaffSlips + tags: + - pickStaffSlips + parameters: + - $ref: '../../parameters/servicePointId.yaml' + responses: + '200': + description: 'A collection of staff slips' + content: + application/json: + schema: + $ref: '../../responses/staffSlipsResponse.yaml' + '404': + $ref: '../../responses/notFoundResponse.yaml' + '422': + $ref: '../../responses/unprocessableEntityResponse.yaml' + '500': + $ref: '../../responses/internalServerErrorResponse.yaml' \ No newline at end of file diff --git a/src/main/resources/swagger.api/paths/staffSlips/searchStaffSlips.yaml b/src/main/resources/swagger.api/paths/staffSlips/searchStaffSlips.yaml new file mode 100644 index 0000000..8099085 --- /dev/null +++ b/src/main/resources/swagger.api/paths/staffSlips/searchStaffSlips.yaml @@ -0,0 +1,20 @@ +get: + description: API method for searching current staff slips + operationId: searchStaffSlips + tags: + - searchStaffSlips + parameters: + - $ref: '../../parameters/servicePointId.yaml' + responses: + '200': + description: 'A collection of staff slips' + content: + application/json: + schema: + $ref: '../../responses/staffSlipsResponse.yaml' + '404': + $ref: '../../responses/notFoundResponse.yaml' + '422': + $ref: '../../responses/unprocessableEntityResponse.yaml' + '500': + $ref: '../../responses/internalServerErrorResponse.yaml' diff --git a/src/main/resources/swagger.api/paths/staffSlips/staffClipsCommon.yaml b/src/main/resources/swagger.api/paths/staffSlips/staffClipsCommon.yaml new file mode 100644 index 0000000..33dc1d0 --- /dev/null +++ b/src/main/resources/swagger.api/paths/staffSlips/staffClipsCommon.yaml @@ -0,0 +1,15 @@ +parameters: + - $ref: '../../parameters/servicePointId.yaml' +responses: + '200': + description: 'A collection of staff slips' + content: + application/json: + schema: + $ref: '../../responses/staffSlipsResponse.yaml' + '404': + $ref: '../../responses/notFoundResponse.yaml' + '422': + $ref: '../../responses/unprocessableEntityResponse.yaml' + '500': + $ref: '../../responses/internalServerErrorResponse.yaml' \ No newline at end of file diff --git a/src/main/resources/swagger.api/responses/staffSlipsResponse.yaml b/src/main/resources/swagger.api/responses/staffSlipsResponse.yaml new file mode 100644 index 0000000..535b774 --- /dev/null +++ b/src/main/resources/swagger.api/responses/staffSlipsResponse.yaml @@ -0,0 +1 @@ +$ref: "../schemas/dto/staffSlip/staffSlipsCollection.yaml" \ No newline at end of file diff --git a/src/main/resources/swagger.api/schemas/dto/staffSlip/staffSlip.yaml b/src/main/resources/swagger.api/schemas/dto/staffSlip/staffSlip.yaml new file mode 100644 index 0000000..61d2c73 --- /dev/null +++ b/src/main/resources/swagger.api/schemas/dto/staffSlip/staffSlip.yaml @@ -0,0 +1,133 @@ +description: Staff slip +type: object +properties: + currentDateTime: + type: string + format: date-time + + item: + type: object + properties: + title: + type: string + primaryContributor: + type: string + allContributors: + type: string + barcode: + type: string + status: + type: string + enumeration: + type: string + volume: + type: string + chronology: + type: string + yearCaption: + type: string + materialType: + type: string + loanType: + type: string + copy: + type: string + numberOfPieces: + type: string + displaySummary: + type: string + descriptionOfPieces: + type: string + effectiveLocationSpecific: + type: string + effectiveLocationLibrary: + type: string + effectiveLocationCampus: + type: string + effectiveLocationInstitution: + type: string + effectiveLocationDiscoveryDisplayName: + type: string + effectiveLocationPrimaryServicePointName: + type: string + callNumber: + type: string + callNumberPrefix: + type: string + callNumberSuffix: + type: string + lastCheckedInDateTime: + type: string + format: date-time + + request: + type: object + properties: + requestId: + type: string + format: uuid + servicePointPickup: + type: string + requestDate: + type: string + format: date-time + requestExpirationDate: + type: string + format: date-time + holdShelfExpirationDate: + type: string + format: date-time + additionalInfo: + type: string + reasonForCancellation: + type: string + deliveryAddressType: + type: string + patronComments: + type: string + + requester: + type: object + properties: + firstName: + type: string + preferredFirstName: + type: string + lastName: + type: string + middleName: + type: string + barcode: + type: string + patronGroup: + type: string + departments: + type: string + primaryDeliveryAddressType: + type: string + primaryAddressLine1: + type: string + primaryAddressLine2: + type: string + primaryCity: + type: string + primaryStateProvRegion: + type: string + primaryZipPostalCode: + type: string + primaryCountry: + type: string + addressType: + type: string + addressLine1: + type: string + addressLine2: + type: string + city: + type: string + region: + type: string + postalCode: + type: string + countryId: + type: string \ No newline at end of file diff --git a/src/main/resources/swagger.api/schemas/dto/staffSlip/staffSlipsCollection.yaml b/src/main/resources/swagger.api/schemas/dto/staffSlip/staffSlipsCollection.yaml new file mode 100644 index 0000000..f089ea7 --- /dev/null +++ b/src/main/resources/swagger.api/schemas/dto/staffSlip/staffSlipsCollection.yaml @@ -0,0 +1,13 @@ +description: "Collection of staff slips" +type: "object" +properties: + totalRecords: + type: "integer" + description: "Total number of staff slips" + staffSlips: + type: "array" + items: + $ref: "staffSlip.yaml" +required: + - totalRecords + - staffSlips diff --git a/src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java b/src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java new file mode 100644 index 0000000..5a5d465 --- /dev/null +++ b/src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java @@ -0,0 +1,82 @@ +package org.folio.circulationbff.api; + +import static com.github.tomakehurst.wiremock.client.WireMock.equalTo; +import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor; +import static com.github.tomakehurst.wiremock.client.WireMock.jsonResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.urlMatching; +import static com.github.tomakehurst.wiremock.client.WireMock.urlPathMatching; +import static org.apache.http.HttpStatus.SC_OK; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import java.util.List; +import java.util.UUID; +import java.util.stream.Stream; + +import org.apache.http.HttpStatus; +import org.folio.circulationbff.domain.dto.StaffSlip; +import org.folio.circulationbff.domain.dto.StaffSlipsCollection; +import org.folio.circulationbff.domain.dto.TlrSettings; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.springframework.http.MediaType; + +import com.github.tomakehurst.wiremock.client.WireMock; +import com.github.tomakehurst.wiremock.common.Json; +import com.github.tomakehurst.wiremock.matching.UrlPathPattern; + +import lombok.SneakyThrows; + +public class StaffSlipApiTest extends BaseIT{ + private static final String CIRCULATION_BFF_SEARCH_SLIPS_URL = + "/circulation-bff/search-slips/{servicePointId}"; + private static final String CIRCULATION_BFF_PICK_SLIPS_URL = + "/circulation-bff/pick-slips/{servicePointId}"; + private static final String TLR_SETTINGS_URL = "/tlr/settings"; + private static final String CIRCULATION_SEARCH_STAFF_SLIPS_URL = + "/circulation/search-slips"; + private static final String CIRCULATION_PICK_STAFF_SLIPS_URL = + "/circulation/pick-slips"; + private static final String TLR_SEARCH_STAFF_SLIPS_URL = "/tlr/search-slips"; + private static final String TLR_PICK_STAFF_SLIPS_URL = "/tlr/pick-slips"; + + @ParameterizedTest() + @MethodSource("urlToEcsTlrFeatureEnabled") + @SneakyThrows + void getStaffSlipsFromModTlr(String externalModuleUrl, String circulationBffUrl, + boolean isTlrEnabled) { + + var tlrSettings = new TlrSettings(); + tlrSettings.setEcsTlrFeatureEnabled(isTlrEnabled); + var staffSlipsCollection = new StaffSlipsCollection(1, List.of(new StaffSlip())); + var servicePointId = UUID.randomUUID().toString(); + UrlPathPattern externalModuleUrlPattern = urlPathMatching(String.format(externalModuleUrl + + "/%s", servicePointId)); + + wireMockServer.stubFor(WireMock.get(externalModuleUrlPattern) + .willReturn(jsonResponse(staffSlipsCollection, HttpStatus.SC_OK))); + + wireMockServer.stubFor(WireMock.get(urlMatching(TLR_SETTINGS_URL)) + .withHeader(HEADER_TENANT, equalTo(TENANT_ID_CONSORTIUM)) + .willReturn(jsonResponse(asJsonString(tlrSettings), SC_OK))); + + mockMvc.perform(get(circulationBffUrl, servicePointId) + .headers(defaultHeaders()) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(content().json(Json.write(staffSlipsCollection))); + + wireMockServer.verify(1, getRequestedFor(externalModuleUrlPattern)); + } + + private static Stream urlToEcsTlrFeatureEnabled() { + return Stream.of( + Arguments.of(CIRCULATION_SEARCH_STAFF_SLIPS_URL, CIRCULATION_BFF_SEARCH_SLIPS_URL, false), + Arguments.of(CIRCULATION_PICK_STAFF_SLIPS_URL, CIRCULATION_BFF_PICK_SLIPS_URL, false), + Arguments.of(TLR_SEARCH_STAFF_SLIPS_URL, CIRCULATION_BFF_SEARCH_SLIPS_URL, true), + Arguments.of(TLR_PICK_STAFF_SLIPS_URL, CIRCULATION_BFF_PICK_SLIPS_URL, true) + ); + } +} diff --git a/src/test/java/org/folio/circulationbff/controller/CirculationBffControllerTest.java b/src/test/java/org/folio/circulationbff/controller/CirculationBffControllerTest.java index 53f8e0d..455ddf1 100644 --- a/src/test/java/org/folio/circulationbff/controller/CirculationBffControllerTest.java +++ b/src/test/java/org/folio/circulationbff/controller/CirculationBffControllerTest.java @@ -13,14 +13,18 @@ import java.util.Collections; import java.util.List; +import java.util.Objects; import java.util.UUID; import java.util.stream.Stream; import org.apache.commons.lang3.StringUtils; import org.folio.circulationbff.domain.dto.BffSearchInstance; import org.folio.circulationbff.domain.dto.MediatedRequest; +import org.folio.circulationbff.domain.dto.StaffSlip; +import org.folio.circulationbff.domain.dto.StaffSlipsCollection; import org.folio.circulationbff.domain.dto.User; import org.folio.circulationbff.domain.dto.UserCollection; +import org.folio.circulationbff.service.CirculationBffService; import org.folio.circulationbff.service.MediatedRequestsService; import org.folio.circulationbff.service.SearchService; import org.folio.circulationbff.service.UserService; @@ -46,6 +50,9 @@ class CirculationBffControllerTest { @Mock private UserService userService; + @Mock + private CirculationBffService circulationBffService; + @InjectMocks private CirculationBffController controller; @@ -66,6 +73,40 @@ static Stream> externalUsersControllerReturnsTheSameUserCollectionAsU return Stream.of(null, Collections.emptyList(), List.of(new User())); } + @ParameterizedTest + @MethodSource("staffSlips") + void pickStaffSlipsControllerReturnsSuccessResponseEntity(List staffSlips) { + StaffSlipsCollection staffSlipsCollection = new StaffSlipsCollection( + Objects.isNull(staffSlips) ? 0 : staffSlips.size(), staffSlips); + + when(circulationBffService.pickStaffSlipsByServicePointId(anyString())) + .thenReturn(staffSlipsCollection); + + ResponseEntity actual = controller.pickStaffSlips(StringUtils.EMPTY); + + assertThat(actual.getStatusCode(), is(HttpStatus.OK)); + assertThat(actual.getBody(), is(staffSlipsCollection)); + } + + @ParameterizedTest + @MethodSource("staffSlips") + void searchStaffSlipsControllerReturnsSuccessResponseEntity(List staffSlips) { + StaffSlipsCollection staffSlipsCollection = new StaffSlipsCollection( + Objects.isNull(staffSlips) ? 0 : staffSlips.size(), staffSlips); + + when(circulationBffService.searchStaffSlipsByServicePointId(anyString())) + .thenReturn(staffSlipsCollection); + + ResponseEntity actual = controller.searchStaffSlips(StringUtils.EMPTY); + + assertThat(actual.getStatusCode(), is(HttpStatus.OK)); + assertThat(actual.getBody(), is(staffSlipsCollection)); + } + + private static Stream> staffSlips() { + return Stream.of(null, Collections.emptyList(), List.of(new StaffSlip())); + } + @Test void instanceFoundSuccessfully() { String instanceId = UUID.randomUUID().toString(); From 4704967caae8e2df1156342db607e5726748f48b Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Fri, 15 Nov 2024 21:23:33 +0400 Subject: [PATCH 02/35] MCBFF-12: ModuleDescriptor-template.json --- descriptors/ModuleDescriptor-template.json | 43 ++++++---------------- 1 file changed, 11 insertions(+), 32 deletions(-) diff --git a/descriptors/ModuleDescriptor-template.json b/descriptors/ModuleDescriptor-template.json index 58b181e..2758acf 100644 --- a/descriptors/ModuleDescriptor-template.json +++ b/descriptors/ModuleDescriptor-template.json @@ -50,9 +50,7 @@ "GET" ], "pathPattern": "/circulation-bff/external-users/{externalUserId}/tenant/{tenantId}", - "permissionsRequired": [ - "circulation-bff.external-users.collection.get" - ], + "permissionsRequired": ["circulation-bff.external-users.collection.get"], "modulePermissions": [ "users.item.get", "users.collection.get" @@ -69,9 +67,7 @@ "GET" ], "pathPattern": "/circulation-bff/requests/allowed-service-points", - "permissionsRequired": [ - "circulation-bff.requests.allowed-service-points.get" - ], + "permissionsRequired": ["circulation-bff.requests.allowed-service-points.get"], "modulePermissions": [ "tlr.ecs-tlr-allowed-service-points.get", "circulation.requests.allowed-service-points.get", @@ -86,21 +82,15 @@ "GET" ], "pathPattern": "/circulation-bff/requests/search-instances", - "permissionsRequired": [ - "circulation-bff.requests.search-instances.get" - ], - "modulePermissions": [ - "search.instances.collection.get" - ] + "permissionsRequired": ["circulation-bff.requests.search-instances.get"], + "modulePermissions": ["search.instances.collection.get"] }, { "methods": [ "POST" ], "pathPattern": "/circulation-bff/requests", - "permissionsRequired": [ - "circulation-bff.requests.post" - ], + "permissionsRequired": ["circulation-bff.requests.post"], "modulePermissions": [ "tlr.ecs-tlr-allowed-service-points.get", "circulation.requests.allowed-service-points.get", @@ -117,9 +107,7 @@ "POST" ], "pathPattern": "/circulation-bff/mediated-requests/confirm", - "permissionsRequired": [ - "circulation-bff.confirm-mediated-request.execute" - ], + "permissionsRequired": ["circulation-bff.confirm-mediated-request.execute"], "modulePermissions": [ "requests-mediated.mediated-request.item.post", "requests-mediated.mediated-request.item.put", @@ -159,7 +147,7 @@ ] } ], - "permissionSets": [ + "permissionSets" : [ { "permissionName": "circulation-bff.staff-slips.pick-slips.collection.get", "displayName": "circulation BFF - pick staff slips by service point id", @@ -234,7 +222,7 @@ "version": "3.3" }, { - "id": "material-types", + "id": "material-types", "version": "2.2" } ], @@ -244,20 +232,11 @@ "dockerArgs": { "HostConfig": { "Memory": 357913941, - "PortBindings": { - "8081/tcp": [ - { - "HostPort": "%p" - } - ] - } + "PortBindings": { "8081/tcp": [ { "HostPort": "%p" } ] } } }, "env": [ - { - "name": "JAVA_OPTIONS", - "value": "-XX:MaxRAMPercentage=66.0" - } + { "name": "JAVA_OPTIONS", "value": "-XX:MaxRAMPercentage=66.0"} ] } -} +} \ No newline at end of file From 69300c1d5af94e35645ec1ac7ba06a2d8bde6709 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Sat, 16 Nov 2024 12:29:41 +0400 Subject: [PATCH 03/35] MCBFF-12: sonar issues --- .../service/impl/CirculationBffServiceImpl.java | 4 ++-- .../org/folio/circulationbff/api/StaffSlipApiTest.java | 7 ++++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java b/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java index 0bb86e2..c17962e 100644 --- a/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java +++ b/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java @@ -30,7 +30,7 @@ public class CirculationBffServiceImpl implements CirculationBffService { @Override public StaffSlipsCollection pickStaffSlipsByServicePointId(String servicePointId) { log.info("pickStaffSlipsByServicePointId:: servicePointId: {}", servicePointId); - var isEcsTlrFeatureEnabled = ecsTlrClient.getTlrSettings().getEcsTlrFeatureEnabled(); + boolean isEcsTlrFeatureEnabled = ecsTlrClient.getTlrSettings().getEcsTlrFeatureEnabled(); log.info("pickStaffSlipsByServicePointId:: {}", MessageBuilder.buildLogMessageForStaffSlipsFetching(isEcsTlrFeatureEnabled)); return isEcsTlrFeatureEnabled @@ -41,7 +41,7 @@ public StaffSlipsCollection pickStaffSlipsByServicePointId(String servicePointId @Override public StaffSlipsCollection searchStaffSlipsByServicePointId(String servicePointId) { log.info("searchStaffSlipsByServicePointId:: servicePointId: {}", servicePointId); - var isEcsTlrFeatureEnabled = ecsTlrClient.getTlrSettings().getEcsTlrFeatureEnabled(); + boolean isEcsTlrFeatureEnabled = ecsTlrClient.getTlrSettings().getEcsTlrFeatureEnabled(); log.info("searchStaffSlipsByServicePointId:: {}", MessageBuilder.buildLogMessageForStaffSlipsFetching(isEcsTlrFeatureEnabled)); return isEcsTlrFeatureEnabled diff --git a/src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java b/src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java index 5a5d465..90ae34c 100644 --- a/src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java +++ b/src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java @@ -29,7 +29,7 @@ import lombok.SneakyThrows; -public class StaffSlipApiTest extends BaseIT{ +class StaffSlipApiTest extends BaseIT{ private static final String CIRCULATION_BFF_SEARCH_SLIPS_URL = "/circulation-bff/search-slips/{servicePointId}"; private static final String CIRCULATION_BFF_PICK_SLIPS_URL = @@ -41,6 +41,7 @@ public class StaffSlipApiTest extends BaseIT{ "/circulation/pick-slips"; private static final String TLR_SEARCH_STAFF_SLIPS_URL = "/tlr/search-slips"; private static final String TLR_PICK_STAFF_SLIPS_URL = "/tlr/pick-slips"; + private static final String URL_PATTERN = "%s/%s"; @ParameterizedTest() @MethodSource("urlToEcsTlrFeatureEnabled") @@ -52,8 +53,8 @@ void getStaffSlipsFromModTlr(String externalModuleUrl, String circulationBffUrl, tlrSettings.setEcsTlrFeatureEnabled(isTlrEnabled); var staffSlipsCollection = new StaffSlipsCollection(1, List.of(new StaffSlip())); var servicePointId = UUID.randomUUID().toString(); - UrlPathPattern externalModuleUrlPattern = urlPathMatching(String.format(externalModuleUrl + - "/%s", servicePointId)); + UrlPathPattern externalModuleUrlPattern = urlPathMatching(String.format(URL_PATTERN, + externalModuleUrl, servicePointId)); wireMockServer.stubFor(WireMock.get(externalModuleUrlPattern) .willReturn(jsonResponse(staffSlipsCollection, HttpStatus.SC_OK))); From a0036893d9eac7a5fec8d73b2d6db1312b1bfd24 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Sun, 17 Nov 2024 16:18:04 +0400 Subject: [PATCH 04/35] MCBFF-12: removed "staff" --- descriptors/ModuleDescriptor-template.json | 16 ++++----- .../client/feign/CirculationClient.java | 6 ++-- .../client/feign/EcsTlrClient.java | 6 ++-- .../controller/CirculationBffController.java | 15 +++++--- .../service/CirculationBffService.java | 6 ++-- .../impl/CirculationBffServiceImpl.java | 29 ++++++++-------- .../circulationbff/util/MessageBuilder.java | 14 -------- .../swagger.api/circulation-bff.yaml | 4 +-- .../pickSlips.yaml} | 10 +++--- .../searchSlips.yaml} | 10 +++--- .../slipsCommon.yaml} | 4 +-- .../swagger.api/responses/slipsResponse.yaml | 1 + .../responses/staffSlipsResponse.yaml | 1 - .../staffSlip.yaml => slips/slip.yaml} | 2 +- .../schemas/dto/slips/slipsCollection.yaml | 13 +++++++ .../dto/staffSlip/staffSlipsCollection.yaml | 13 ------- ...StaffSlipApiTest.java => SlipApiTest.java} | 30 ++++++++-------- .../CirculationBffControllerTest.java | 34 +++++++++---------- 18 files changed, 103 insertions(+), 111 deletions(-) delete mode 100644 src/main/java/org/folio/circulationbff/util/MessageBuilder.java rename src/main/resources/swagger.api/paths/{staffSlips/pickStaffSlips.yaml => slips/pickSlips.yaml} (63%) rename src/main/resources/swagger.api/paths/{staffSlips/searchStaffSlips.yaml => slips/searchSlips.yaml} (62%) rename src/main/resources/swagger.api/paths/{staffSlips/staffClipsCommon.yaml => slips/slipsCommon.yaml} (75%) create mode 100644 src/main/resources/swagger.api/responses/slipsResponse.yaml delete mode 100644 src/main/resources/swagger.api/responses/staffSlipsResponse.yaml rename src/main/resources/swagger.api/schemas/dto/{staffSlip/staffSlip.yaml => slips/slip.yaml} (99%) create mode 100644 src/main/resources/swagger.api/schemas/dto/slips/slipsCollection.yaml delete mode 100644 src/main/resources/swagger.api/schemas/dto/staffSlip/staffSlipsCollection.yaml rename src/test/java/org/folio/circulationbff/api/{StaffSlipApiTest.java => SlipApiTest.java} (71%) diff --git a/descriptors/ModuleDescriptor-template.json b/descriptors/ModuleDescriptor-template.json index 2758acf..f3a7abc 100644 --- a/descriptors/ModuleDescriptor-template.json +++ b/descriptors/ModuleDescriptor-template.json @@ -12,7 +12,7 @@ ], "pathPattern": "/circulation-bff/pick-slips/{servicePointId}", "permissionsRequired": [ - "circulation-bff.staff-slips.pick-slips.collection.get" + "circulation-bff.pick-slips.collection.get" ], "modulePermissions": [ "tlr.staff-slips.pick-slips.get", @@ -31,7 +31,7 @@ ], "pathPattern": "/circulation-bff/search-slips/{servicePointId}", "permissionsRequired": [ - "circulation-bff.staff-slips.search-slips.collection.get" + "circulation-bff.search-slips.collection.get" ], "modulePermissions": [ "tlr.staff-slips.search-slips.get", @@ -149,14 +149,14 @@ ], "permissionSets" : [ { - "permissionName": "circulation-bff.staff-slips.pick-slips.collection.get", - "displayName": "circulation BFF - pick staff slips by service point id", - "description": "pick staff slips by service point id" + "permissionName": "circulation-bff.pick-slips.collection.get", + "displayName": "circulation BFF - get pick slips by service point id", + "description": "get pick slips by service point id" }, { - "permissionName": "circulation-bff.staff-slips.search-slips.collection.get", - "displayName": "circulation BFF - search staff slips by service point id", - "description": "search staff slips by service point id" + "permissionName": "circulation-bff.search-slips.collection.get", + "displayName": "circulation BFF - get search slips by service point id", + "description": "get search slips by service point id" }, { "permissionName": "circulation-bff.external-users.collection.get", diff --git a/src/main/java/org/folio/circulationbff/client/feign/CirculationClient.java b/src/main/java/org/folio/circulationbff/client/feign/CirculationClient.java index e9ed8f7..0ae8c1d 100644 --- a/src/main/java/org/folio/circulationbff/client/feign/CirculationClient.java +++ b/src/main/java/org/folio/circulationbff/client/feign/CirculationClient.java @@ -5,7 +5,7 @@ import org.folio.circulationbff.domain.dto.BffRequest; import org.folio.circulationbff.domain.dto.CirculationSettingsResponse; import org.folio.circulationbff.domain.dto.Request; -import org.folio.circulationbff.domain.dto.StaffSlipsCollection; +import org.folio.circulationbff.domain.dto.SlipsCollection; import org.folio.spring.config.FeignClientConfiguration; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.SpringQueryMap; @@ -32,8 +32,8 @@ public interface CirculationClient { Request getRequestById(@PathVariable("requestId") String requestId); @GetMapping("/pick-slips/{servicePointId}") - StaffSlipsCollection pickStaffSlips(@PathVariable ("servicePointId") String servicePointId); + SlipsCollection getPickSlips(@PathVariable ("servicePointId") String servicePointId); @GetMapping("/search-slips/{servicePointId}") - StaffSlipsCollection searchStaffSlips(@PathVariable ("servicePointId") String servicePointId); + SlipsCollection getSearchSlips(@PathVariable ("servicePointId") String servicePointId); } diff --git a/src/main/java/org/folio/circulationbff/client/feign/EcsTlrClient.java b/src/main/java/org/folio/circulationbff/client/feign/EcsTlrClient.java index fa15b68..1cde0dc 100644 --- a/src/main/java/org/folio/circulationbff/client/feign/EcsTlrClient.java +++ b/src/main/java/org/folio/circulationbff/client/feign/EcsTlrClient.java @@ -4,7 +4,7 @@ import org.folio.circulationbff.domain.dto.AllowedServicePoints; import org.folio.circulationbff.domain.dto.BffRequest; import org.folio.circulationbff.domain.dto.EcsTlr; -import org.folio.circulationbff.domain.dto.StaffSlipsCollection; +import org.folio.circulationbff.domain.dto.SlipsCollection; import org.folio.circulationbff.domain.dto.TlrSettings; import org.folio.spring.config.FeignClientConfiguration; import org.springframework.cloud.openfeign.FeignClient; @@ -27,8 +27,8 @@ public interface EcsTlrClient { EcsTlr createRequest(@RequestBody BffRequest request); @GetMapping("/pick-slips/{servicePointId}") - StaffSlipsCollection pickStaffSlips(@PathVariable("servicePointId") String servicePointId); + SlipsCollection getPickSlips(@PathVariable("servicePointId") String servicePointId); @GetMapping("/search-slips/{servicePointId}") - StaffSlipsCollection searchStaffSlips(@PathVariable ("servicePointId") String servicePointId); + SlipsCollection getSearchSlips(@PathVariable ("servicePointId") String servicePointId); } diff --git a/src/main/java/org/folio/circulationbff/controller/CirculationBffController.java b/src/main/java/org/folio/circulationbff/controller/CirculationBffController.java index fa46cda..80d3e5c 100644 --- a/src/main/java/org/folio/circulationbff/controller/CirculationBffController.java +++ b/src/main/java/org/folio/circulationbff/controller/CirculationBffController.java @@ -13,7 +13,7 @@ import org.folio.circulationbff.domain.dto.EmptyBffSearchInstance; import org.folio.circulationbff.domain.dto.MediatedRequest; import org.folio.circulationbff.domain.dto.Request; -import org.folio.circulationbff.domain.dto.StaffSlipsCollection; +import org.folio.circulationbff.domain.dto.SlipsCollection; import org.folio.circulationbff.domain.dto.UserCollection; import org.folio.circulationbff.rest.resource.CirculationBffApi; import org.folio.circulationbff.service.CirculationBffService; @@ -38,14 +38,19 @@ public class CirculationBffController implements CirculationBffApi { private final UserService userService; @Override - public ResponseEntity pickStaffSlips(String servicePointId) { + public ResponseEntity getPickSlips(String servicePointId) { + log.info("getPickSlips:: servicePointId = {}", servicePointId); + return ResponseEntity.status(HttpStatus.OK) - .body(circulationBffService.pickStaffSlipsByServicePointId(servicePointId)); + .body(circulationBffService.fetchPickSlipsByServicePointId(servicePointId)); } @Override - public ResponseEntity searchStaffSlips(String servicePointId) { - return ResponseEntity.ok(circulationBffService.searchStaffSlipsByServicePointId(servicePointId)); + public ResponseEntity getSearchSlips(String servicePointId) { + log.info("getSearchSlips:: servicePointId = {}", servicePointId); + + return ResponseEntity.status(HttpStatus.OK).body(circulationBffService + .fetchSearchSlipsByServicePointId(servicePointId)); } @Override diff --git a/src/main/java/org/folio/circulationbff/service/CirculationBffService.java b/src/main/java/org/folio/circulationbff/service/CirculationBffService.java index 9cacec2..8716a4f 100644 --- a/src/main/java/org/folio/circulationbff/service/CirculationBffService.java +++ b/src/main/java/org/folio/circulationbff/service/CirculationBffService.java @@ -4,11 +4,11 @@ import org.folio.circulationbff.domain.dto.AllowedServicePoints; import org.folio.circulationbff.domain.dto.BffRequest; import org.folio.circulationbff.domain.dto.Request; -import org.folio.circulationbff.domain.dto.StaffSlipsCollection; +import org.folio.circulationbff.domain.dto.SlipsCollection; public interface CirculationBffService { AllowedServicePoints getAllowedServicePoints(AllowedServicePointParams allowedServicePointParams, String tenantId); Request createRequest(BffRequest request, String tenantId); - StaffSlipsCollection pickStaffSlipsByServicePointId(String servicePointId); - StaffSlipsCollection searchStaffSlipsByServicePointId(String servicePointId); + SlipsCollection fetchPickSlipsByServicePointId(String servicePointId); + SlipsCollection fetchSearchSlipsByServicePointId(String servicePointId); } diff --git a/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java b/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java index c17962e..c058133 100644 --- a/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java +++ b/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java @@ -7,11 +7,10 @@ import org.folio.circulationbff.domain.dto.BffRequest; import org.folio.circulationbff.domain.dto.EcsTlr; import org.folio.circulationbff.domain.dto.Request; -import org.folio.circulationbff.domain.dto.StaffSlipsCollection; +import org.folio.circulationbff.domain.dto.SlipsCollection; import org.folio.circulationbff.service.CirculationBffService; import org.folio.circulationbff.service.SettingsService; import org.folio.circulationbff.service.UserTenantsService; -import org.folio.circulationbff.util.MessageBuilder; import org.springframework.stereotype.Service; import lombok.RequiredArgsConstructor; @@ -28,25 +27,27 @@ public class CirculationBffServiceImpl implements CirculationBffService { private final UserTenantsService userTenantsService; @Override - public StaffSlipsCollection pickStaffSlipsByServicePointId(String servicePointId) { - log.info("pickStaffSlipsByServicePointId:: servicePointId: {}", servicePointId); + public SlipsCollection fetchPickSlipsByServicePointId(String servicePointId) { + log.info("fetchPickSlipsByServicePointId:: servicePointId: {}", servicePointId); boolean isEcsTlrFeatureEnabled = ecsTlrClient.getTlrSettings().getEcsTlrFeatureEnabled(); - log.info("pickStaffSlipsByServicePointId:: {}", - MessageBuilder.buildLogMessageForStaffSlipsFetching(isEcsTlrFeatureEnabled)); + log.info("fetchPickSlipsByServicePointId:: isEcsTlrFeatureEnabled: {}", + isEcsTlrFeatureEnabled); + return isEcsTlrFeatureEnabled - ? ecsTlrClient.pickStaffSlips(servicePointId) - : circulationClient.pickStaffSlips(servicePointId); + ? ecsTlrClient.getPickSlips(servicePointId) + : circulationClient.getPickSlips(servicePointId); } @Override - public StaffSlipsCollection searchStaffSlipsByServicePointId(String servicePointId) { - log.info("searchStaffSlipsByServicePointId:: servicePointId: {}", servicePointId); + public SlipsCollection fetchSearchSlipsByServicePointId(String servicePointId) { + log.info("fetchSearchSlipsByServicePointId:: servicePointId: {}", servicePointId); boolean isEcsTlrFeatureEnabled = ecsTlrClient.getTlrSettings().getEcsTlrFeatureEnabled(); - log.info("searchStaffSlipsByServicePointId:: {}", - MessageBuilder.buildLogMessageForStaffSlipsFetching(isEcsTlrFeatureEnabled)); + log.info("fetchSearchSlipsByServicePointId:: isEcsTlrFeatureEnabled: {}", + isEcsTlrFeatureEnabled); + return isEcsTlrFeatureEnabled - ? ecsTlrClient.searchStaffSlips(servicePointId) - : circulationClient.searchStaffSlips(servicePointId); + ? ecsTlrClient.getSearchSlips(servicePointId) + : circulationClient.getSearchSlips(servicePointId); } @Override diff --git a/src/main/java/org/folio/circulationbff/util/MessageBuilder.java b/src/main/java/org/folio/circulationbff/util/MessageBuilder.java deleted file mode 100644 index f102882..0000000 --- a/src/main/java/org/folio/circulationbff/util/MessageBuilder.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.folio.circulationbff.util; - -import lombok.experimental.UtilityClass; - -@UtilityClass -public class MessageBuilder { - public static String buildLogMessageForStaffSlipsFetching(boolean isEcsTlrFeatureEnabled) { - String ecsTlrFeatureValueMessage = isEcsTlrFeatureEnabled ? "enabled" : "disabled"; - String staffSlipsSourceModuleName = isEcsTlrFeatureEnabled ? "mod-tlr" : "mod-circulation"; - - return String.format("Ecs TLR Feature is %s. Getting " + - "staff slips from %s", ecsTlrFeatureValueMessage, staffSlipsSourceModuleName); - } -} diff --git a/src/main/resources/swagger.api/circulation-bff.yaml b/src/main/resources/swagger.api/circulation-bff.yaml index 0e7aa06..0c7315a 100644 --- a/src/main/resources/swagger.api/circulation-bff.yaml +++ b/src/main/resources/swagger.api/circulation-bff.yaml @@ -14,9 +14,9 @@ paths: /circulation-bff/external-users/{externalUserId}/tenant/{tenantId}: $ref: 'paths/externalUser/externalUser.yaml' /circulation-bff/pick-slips/{servicePointId}: - $ref: 'paths/staffSlips/pickStaffSlips.yaml' + $ref: 'paths/slips/pickSlips.yaml' /circulation-bff/search-slips/{servicePointId}: - $ref: 'paths/staffSlips/searchStaffSlips.yaml' + $ref: 'paths/slips/searchSlips.yaml' components: schemas: diff --git a/src/main/resources/swagger.api/paths/staffSlips/pickStaffSlips.yaml b/src/main/resources/swagger.api/paths/slips/pickSlips.yaml similarity index 63% rename from src/main/resources/swagger.api/paths/staffSlips/pickStaffSlips.yaml rename to src/main/resources/swagger.api/paths/slips/pickSlips.yaml index 45ea0cf..afae4a4 100644 --- a/src/main/resources/swagger.api/paths/staffSlips/pickStaffSlips.yaml +++ b/src/main/resources/swagger.api/paths/slips/pickSlips.yaml @@ -1,17 +1,17 @@ get: - description: API for picking current staff slips - operationId: pickStaffSlips + description: API to get pick slips + operationId: getPickSlips tags: - - pickStaffSlips + - getPickSlips parameters: - $ref: '../../parameters/servicePointId.yaml' responses: '200': - description: 'A collection of staff slips' + description: 'A collection of pick slips' content: application/json: schema: - $ref: '../../responses/staffSlipsResponse.yaml' + $ref: '../../responses/slipsResponse.yaml' '404': $ref: '../../responses/notFoundResponse.yaml' '422': diff --git a/src/main/resources/swagger.api/paths/staffSlips/searchStaffSlips.yaml b/src/main/resources/swagger.api/paths/slips/searchSlips.yaml similarity index 62% rename from src/main/resources/swagger.api/paths/staffSlips/searchStaffSlips.yaml rename to src/main/resources/swagger.api/paths/slips/searchSlips.yaml index 8099085..6d62c3c 100644 --- a/src/main/resources/swagger.api/paths/staffSlips/searchStaffSlips.yaml +++ b/src/main/resources/swagger.api/paths/slips/searchSlips.yaml @@ -1,17 +1,17 @@ get: - description: API method for searching current staff slips - operationId: searchStaffSlips + description: API fro get search slips + operationId: getSearchSlips tags: - - searchStaffSlips + - getSearchSlips parameters: - $ref: '../../parameters/servicePointId.yaml' responses: '200': - description: 'A collection of staff slips' + description: 'A collection of search slips' content: application/json: schema: - $ref: '../../responses/staffSlipsResponse.yaml' + $ref: '../../responses/slipsResponse.yaml' '404': $ref: '../../responses/notFoundResponse.yaml' '422': diff --git a/src/main/resources/swagger.api/paths/staffSlips/staffClipsCommon.yaml b/src/main/resources/swagger.api/paths/slips/slipsCommon.yaml similarity index 75% rename from src/main/resources/swagger.api/paths/staffSlips/staffClipsCommon.yaml rename to src/main/resources/swagger.api/paths/slips/slipsCommon.yaml index 33dc1d0..6792a64 100644 --- a/src/main/resources/swagger.api/paths/staffSlips/staffClipsCommon.yaml +++ b/src/main/resources/swagger.api/paths/slips/slipsCommon.yaml @@ -2,11 +2,11 @@ parameters: - $ref: '../../parameters/servicePointId.yaml' responses: '200': - description: 'A collection of staff slips' + description: 'A collection of slips' content: application/json: schema: - $ref: '../../responses/staffSlipsResponse.yaml' + $ref: '../../responses/slipsResponse.yaml' '404': $ref: '../../responses/notFoundResponse.yaml' '422': diff --git a/src/main/resources/swagger.api/responses/slipsResponse.yaml b/src/main/resources/swagger.api/responses/slipsResponse.yaml new file mode 100644 index 0000000..d56bf5c --- /dev/null +++ b/src/main/resources/swagger.api/responses/slipsResponse.yaml @@ -0,0 +1 @@ +$ref: "../schemas/dto/slips/slipsCollection.yaml" \ No newline at end of file diff --git a/src/main/resources/swagger.api/responses/staffSlipsResponse.yaml b/src/main/resources/swagger.api/responses/staffSlipsResponse.yaml deleted file mode 100644 index 535b774..0000000 --- a/src/main/resources/swagger.api/responses/staffSlipsResponse.yaml +++ /dev/null @@ -1 +0,0 @@ -$ref: "../schemas/dto/staffSlip/staffSlipsCollection.yaml" \ No newline at end of file diff --git a/src/main/resources/swagger.api/schemas/dto/staffSlip/staffSlip.yaml b/src/main/resources/swagger.api/schemas/dto/slips/slip.yaml similarity index 99% rename from src/main/resources/swagger.api/schemas/dto/staffSlip/staffSlip.yaml rename to src/main/resources/swagger.api/schemas/dto/slips/slip.yaml index 61d2c73..b0b0d46 100644 --- a/src/main/resources/swagger.api/schemas/dto/staffSlip/staffSlip.yaml +++ b/src/main/resources/swagger.api/schemas/dto/slips/slip.yaml @@ -1,4 +1,4 @@ -description: Staff slip +description: Slip type: object properties: currentDateTime: diff --git a/src/main/resources/swagger.api/schemas/dto/slips/slipsCollection.yaml b/src/main/resources/swagger.api/schemas/dto/slips/slipsCollection.yaml new file mode 100644 index 0000000..690671e --- /dev/null +++ b/src/main/resources/swagger.api/schemas/dto/slips/slipsCollection.yaml @@ -0,0 +1,13 @@ +description: "Collection slips" +type: "object" +properties: + totalRecords: + type: "integer" + description: "Total number of slips" + slips: + type: "array" + items: + $ref: "slip.yaml" +required: + - totalRecords + - slips diff --git a/src/main/resources/swagger.api/schemas/dto/staffSlip/staffSlipsCollection.yaml b/src/main/resources/swagger.api/schemas/dto/staffSlip/staffSlipsCollection.yaml deleted file mode 100644 index f089ea7..0000000 --- a/src/main/resources/swagger.api/schemas/dto/staffSlip/staffSlipsCollection.yaml +++ /dev/null @@ -1,13 +0,0 @@ -description: "Collection of staff slips" -type: "object" -properties: - totalRecords: - type: "integer" - description: "Total number of staff slips" - staffSlips: - type: "array" - items: - $ref: "staffSlip.yaml" -required: - - totalRecords - - staffSlips diff --git a/src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java b/src/test/java/org/folio/circulationbff/api/SlipApiTest.java similarity index 71% rename from src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java rename to src/test/java/org/folio/circulationbff/api/SlipApiTest.java index 90ae34c..fab8e81 100644 --- a/src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java +++ b/src/test/java/org/folio/circulationbff/api/SlipApiTest.java @@ -15,8 +15,8 @@ import java.util.stream.Stream; import org.apache.http.HttpStatus; -import org.folio.circulationbff.domain.dto.StaffSlip; -import org.folio.circulationbff.domain.dto.StaffSlipsCollection; +import org.folio.circulationbff.domain.dto.Slip; +import org.folio.circulationbff.domain.dto.SlipsCollection; import org.folio.circulationbff.domain.dto.TlrSettings; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; @@ -29,35 +29,35 @@ import lombok.SneakyThrows; -class StaffSlipApiTest extends BaseIT{ +class SlipApiTest extends BaseIT{ private static final String CIRCULATION_BFF_SEARCH_SLIPS_URL = "/circulation-bff/search-slips/{servicePointId}"; private static final String CIRCULATION_BFF_PICK_SLIPS_URL = "/circulation-bff/pick-slips/{servicePointId}"; private static final String TLR_SETTINGS_URL = "/tlr/settings"; - private static final String CIRCULATION_SEARCH_STAFF_SLIPS_URL = + private static final String CIRCULATION_SEARCH_SLIPS_URL = "/circulation/search-slips"; - private static final String CIRCULATION_PICK_STAFF_SLIPS_URL = + private static final String CIRCULATION_PICK_SLIPS_URL = "/circulation/pick-slips"; - private static final String TLR_SEARCH_STAFF_SLIPS_URL = "/tlr/search-slips"; - private static final String TLR_PICK_STAFF_SLIPS_URL = "/tlr/pick-slips"; + private static final String TLR_SEARCH_SLIPS_URL = "/tlr/search-slips"; + private static final String TLR_PICK_SLIPS_URL = "/tlr/pick-slips"; private static final String URL_PATTERN = "%s/%s"; @ParameterizedTest() @MethodSource("urlToEcsTlrFeatureEnabled") @SneakyThrows - void getStaffSlipsFromModTlr(String externalModuleUrl, String circulationBffUrl, + void getSlipsApiTest(String externalModuleUrl, String circulationBffUrl, boolean isTlrEnabled) { var tlrSettings = new TlrSettings(); tlrSettings.setEcsTlrFeatureEnabled(isTlrEnabled); - var staffSlipsCollection = new StaffSlipsCollection(1, List.of(new StaffSlip())); + var slipsCollection = new SlipsCollection(1, List.of(new Slip())); var servicePointId = UUID.randomUUID().toString(); UrlPathPattern externalModuleUrlPattern = urlPathMatching(String.format(URL_PATTERN, externalModuleUrl, servicePointId)); wireMockServer.stubFor(WireMock.get(externalModuleUrlPattern) - .willReturn(jsonResponse(staffSlipsCollection, HttpStatus.SC_OK))); + .willReturn(jsonResponse(slipsCollection, HttpStatus.SC_OK))); wireMockServer.stubFor(WireMock.get(urlMatching(TLR_SETTINGS_URL)) .withHeader(HEADER_TENANT, equalTo(TENANT_ID_CONSORTIUM)) @@ -67,17 +67,17 @@ void getStaffSlipsFromModTlr(String externalModuleUrl, String circulationBffUrl, .headers(defaultHeaders()) .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) - .andExpect(content().json(Json.write(staffSlipsCollection))); + .andExpect(content().json(Json.write(slipsCollection))); wireMockServer.verify(1, getRequestedFor(externalModuleUrlPattern)); } private static Stream urlToEcsTlrFeatureEnabled() { return Stream.of( - Arguments.of(CIRCULATION_SEARCH_STAFF_SLIPS_URL, CIRCULATION_BFF_SEARCH_SLIPS_URL, false), - Arguments.of(CIRCULATION_PICK_STAFF_SLIPS_URL, CIRCULATION_BFF_PICK_SLIPS_URL, false), - Arguments.of(TLR_SEARCH_STAFF_SLIPS_URL, CIRCULATION_BFF_SEARCH_SLIPS_URL, true), - Arguments.of(TLR_PICK_STAFF_SLIPS_URL, CIRCULATION_BFF_PICK_SLIPS_URL, true) + Arguments.of(CIRCULATION_SEARCH_SLIPS_URL, CIRCULATION_BFF_SEARCH_SLIPS_URL, false), + Arguments.of(CIRCULATION_PICK_SLIPS_URL, CIRCULATION_BFF_PICK_SLIPS_URL, false), + Arguments.of(TLR_SEARCH_SLIPS_URL, CIRCULATION_BFF_SEARCH_SLIPS_URL, true), + Arguments.of(TLR_PICK_SLIPS_URL, CIRCULATION_BFF_PICK_SLIPS_URL, true) ); } } diff --git a/src/test/java/org/folio/circulationbff/controller/CirculationBffControllerTest.java b/src/test/java/org/folio/circulationbff/controller/CirculationBffControllerTest.java index 455ddf1..b582ec5 100644 --- a/src/test/java/org/folio/circulationbff/controller/CirculationBffControllerTest.java +++ b/src/test/java/org/folio/circulationbff/controller/CirculationBffControllerTest.java @@ -20,8 +20,8 @@ import org.apache.commons.lang3.StringUtils; import org.folio.circulationbff.domain.dto.BffSearchInstance; import org.folio.circulationbff.domain.dto.MediatedRequest; -import org.folio.circulationbff.domain.dto.StaffSlip; -import org.folio.circulationbff.domain.dto.StaffSlipsCollection; +import org.folio.circulationbff.domain.dto.Slip; +import org.folio.circulationbff.domain.dto.SlipsCollection; import org.folio.circulationbff.domain.dto.User; import org.folio.circulationbff.domain.dto.UserCollection; import org.folio.circulationbff.service.CirculationBffService; @@ -74,37 +74,37 @@ static Stream> externalUsersControllerReturnsTheSameUserCollectionAsU } @ParameterizedTest - @MethodSource("staffSlips") - void pickStaffSlipsControllerReturnsSuccessResponseEntity(List staffSlips) { - StaffSlipsCollection staffSlipsCollection = new StaffSlipsCollection( + @MethodSource("slips") + void pickStaffSlipsControllerReturnsSuccessResponseEntity(List staffSlips) { + SlipsCollection staffSlipsCollection = new SlipsCollection( Objects.isNull(staffSlips) ? 0 : staffSlips.size(), staffSlips); - when(circulationBffService.pickStaffSlipsByServicePointId(anyString())) + when(circulationBffService.fetchPickSlipsByServicePointId(anyString())) .thenReturn(staffSlipsCollection); - ResponseEntity actual = controller.pickStaffSlips(StringUtils.EMPTY); + ResponseEntity actual = controller.getPickSlips(StringUtils.EMPTY); assertThat(actual.getStatusCode(), is(HttpStatus.OK)); assertThat(actual.getBody(), is(staffSlipsCollection)); } @ParameterizedTest - @MethodSource("staffSlips") - void searchStaffSlipsControllerReturnsSuccessResponseEntity(List staffSlips) { - StaffSlipsCollection staffSlipsCollection = new StaffSlipsCollection( - Objects.isNull(staffSlips) ? 0 : staffSlips.size(), staffSlips); + @MethodSource("slips") + void searchStaffSlipsControllerReturnsSuccessResponseEntity(List slips) { + SlipsCollection slipsCollection = new SlipsCollection( + Objects.isNull(slips) ? 0 : slips.size(), slips); - when(circulationBffService.searchStaffSlipsByServicePointId(anyString())) - .thenReturn(staffSlipsCollection); + when(circulationBffService.fetchSearchSlipsByServicePointId(anyString())) + .thenReturn(slipsCollection); - ResponseEntity actual = controller.searchStaffSlips(StringUtils.EMPTY); + ResponseEntity actual = controller.getSearchSlips(StringUtils.EMPTY); assertThat(actual.getStatusCode(), is(HttpStatus.OK)); - assertThat(actual.getBody(), is(staffSlipsCollection)); + assertThat(actual.getBody(), is(slipsCollection)); } - private static Stream> staffSlips() { - return Stream.of(null, Collections.emptyList(), List.of(new StaffSlip())); + private static Stream> slips() { + return Stream.of(null, Collections.emptyList(), List.of(new Slip())); } @Test From e3f119680a186f70caac238a20a2582ccaabc921 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Mon, 18 Nov 2024 14:41:29 +0400 Subject: [PATCH 05/35] MCBFF-12: add "staff" in Unit Tests --- ...{SlipApiTest.java => StaffSlipApiTest.java} | 10 +++++----- .../CirculationBffControllerTest.java | 18 +++++++++--------- 2 files changed, 14 insertions(+), 14 deletions(-) rename src/test/java/org/folio/circulationbff/api/{SlipApiTest.java => StaffSlipApiTest.java} (91%) diff --git a/src/test/java/org/folio/circulationbff/api/SlipApiTest.java b/src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java similarity index 91% rename from src/test/java/org/folio/circulationbff/api/SlipApiTest.java rename to src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java index fab8e81..3009a80 100644 --- a/src/test/java/org/folio/circulationbff/api/SlipApiTest.java +++ b/src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java @@ -29,7 +29,7 @@ import lombok.SneakyThrows; -class SlipApiTest extends BaseIT{ +class StaffSlipApiTest extends BaseIT{ private static final String CIRCULATION_BFF_SEARCH_SLIPS_URL = "/circulation-bff/search-slips/{servicePointId}"; private static final String CIRCULATION_BFF_PICK_SLIPS_URL = @@ -46,18 +46,18 @@ class SlipApiTest extends BaseIT{ @ParameterizedTest() @MethodSource("urlToEcsTlrFeatureEnabled") @SneakyThrows - void getSlipsApiTest(String externalModuleUrl, String circulationBffUrl, + void getStaffSlipsApiTest(String externalModuleUrl, String circulationBffUrl, boolean isTlrEnabled) { var tlrSettings = new TlrSettings(); tlrSettings.setEcsTlrFeatureEnabled(isTlrEnabled); - var slipsCollection = new SlipsCollection(1, List.of(new Slip())); + var staffSlipsCollection = new SlipsCollection(1, List.of(new Slip())); var servicePointId = UUID.randomUUID().toString(); UrlPathPattern externalModuleUrlPattern = urlPathMatching(String.format(URL_PATTERN, externalModuleUrl, servicePointId)); wireMockServer.stubFor(WireMock.get(externalModuleUrlPattern) - .willReturn(jsonResponse(slipsCollection, HttpStatus.SC_OK))); + .willReturn(jsonResponse(staffSlipsCollection, HttpStatus.SC_OK))); wireMockServer.stubFor(WireMock.get(urlMatching(TLR_SETTINGS_URL)) .withHeader(HEADER_TENANT, equalTo(TENANT_ID_CONSORTIUM)) @@ -67,7 +67,7 @@ void getSlipsApiTest(String externalModuleUrl, String circulationBffUrl, .headers(defaultHeaders()) .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) - .andExpect(content().json(Json.write(slipsCollection))); + .andExpect(content().json(Json.write(staffSlipsCollection))); wireMockServer.verify(1, getRequestedFor(externalModuleUrlPattern)); } diff --git a/src/test/java/org/folio/circulationbff/controller/CirculationBffControllerTest.java b/src/test/java/org/folio/circulationbff/controller/CirculationBffControllerTest.java index b582ec5..cf8dbd5 100644 --- a/src/test/java/org/folio/circulationbff/controller/CirculationBffControllerTest.java +++ b/src/test/java/org/folio/circulationbff/controller/CirculationBffControllerTest.java @@ -74,8 +74,8 @@ static Stream> externalUsersControllerReturnsTheSameUserCollectionAsU } @ParameterizedTest - @MethodSource("slips") - void pickStaffSlipsControllerReturnsSuccessResponseEntity(List staffSlips) { + @MethodSource("staffSlips") + void getPickSlipsControllerReturnsSuccessResponseEntity(List staffSlips) { SlipsCollection staffSlipsCollection = new SlipsCollection( Objects.isNull(staffSlips) ? 0 : staffSlips.size(), staffSlips); @@ -89,21 +89,21 @@ void pickStaffSlipsControllerReturnsSuccessResponseEntity(List staffSlips) } @ParameterizedTest - @MethodSource("slips") - void searchStaffSlipsControllerReturnsSuccessResponseEntity(List slips) { - SlipsCollection slipsCollection = new SlipsCollection( - Objects.isNull(slips) ? 0 : slips.size(), slips); + @MethodSource("staffSlips") + void getSearchSlipsControllerReturnsSuccessResponseEntity(List staffSlips) { + SlipsCollection staffSlipsCollection = new SlipsCollection( + Objects.isNull(staffSlips) ? 0 : staffSlips.size(), staffSlips); when(circulationBffService.fetchSearchSlipsByServicePointId(anyString())) - .thenReturn(slipsCollection); + .thenReturn(staffSlipsCollection); ResponseEntity actual = controller.getSearchSlips(StringUtils.EMPTY); assertThat(actual.getStatusCode(), is(HttpStatus.OK)); - assertThat(actual.getBody(), is(slipsCollection)); + assertThat(actual.getBody(), is(staffSlipsCollection)); } - private static Stream> slips() { + private static Stream> staffSlips() { return Stream.of(null, Collections.emptyList(), List.of(new Slip())); } From d9223b3b185755b58141c0a95da6605d1f8dc858 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Mon, 18 Nov 2024 17:10:30 +0400 Subject: [PATCH 06/35] MCBFF-12: add "staff" when it necessary --- descriptors/ModuleDescriptor-template.json | 10 +++++----- .../client/feign/CirculationClient.java | 6 +++--- .../client/feign/EcsTlrClient.java | 6 +++--- .../controller/CirculationBffController.java | 6 +++--- .../service/CirculationBffService.java | 6 +++--- .../impl/CirculationBffServiceImpl.java | 6 +++--- .../swagger.api/circulation-bff.yaml | 4 ++-- .../{slips => staffSlips}/pickSlips.yaml | 2 +- .../{slips => staffSlips}/searchSlips.yaml | 2 +- .../{slips => staffSlips}/slipsCommon.yaml | 2 +- .../swagger.api/responses/slipsResponse.yaml | 1 - .../responses/staffSlipsResponse.yaml | 1 + .../schemas/dto/slips/slipsCollection.yaml | 13 ------------ .../slip.yaml => staffSlips/staffSlip.yaml} | 2 +- .../dto/staffSlips/staffSlipsCollection.yaml | 13 ++++++++++++ .../circulationbff/api/StaffSlipApiTest.java | 6 +++--- .../CirculationBffControllerTest.java | 20 +++++++++---------- 17 files changed, 53 insertions(+), 53 deletions(-) rename src/main/resources/swagger.api/paths/{slips => staffSlips}/pickSlips.yaml (89%) rename src/main/resources/swagger.api/paths/{slips => staffSlips}/searchSlips.yaml (89%) rename src/main/resources/swagger.api/paths/{slips => staffSlips}/slipsCommon.yaml (86%) delete mode 100644 src/main/resources/swagger.api/responses/slipsResponse.yaml create mode 100644 src/main/resources/swagger.api/responses/staffSlipsResponse.yaml delete mode 100644 src/main/resources/swagger.api/schemas/dto/slips/slipsCollection.yaml rename src/main/resources/swagger.api/schemas/dto/{slips/slip.yaml => staffSlips/staffSlip.yaml} (99%) create mode 100644 src/main/resources/swagger.api/schemas/dto/staffSlips/staffSlipsCollection.yaml diff --git a/descriptors/ModuleDescriptor-template.json b/descriptors/ModuleDescriptor-template.json index f3a7abc..e949f65 100644 --- a/descriptors/ModuleDescriptor-template.json +++ b/descriptors/ModuleDescriptor-template.json @@ -3,8 +3,8 @@ "name": "Folio mod-circulation-bff module", "provides": [ { - "id": "pick-slips", - "version": "1,0", + "id": "circulation-bff-pick-slips", + "version": "1.0", "handlers": [ { "methods": [ @@ -15,14 +15,14 @@ "circulation-bff.pick-slips.collection.get" ], "modulePermissions": [ - "tlr.staff-slips.pick-slips.get", + "tlr.pick-slips.collection.get", "circulation.pick-slips.get" ] } ] }, { - "id": "search-slips", + "id": "circulation-bff-search-slips", "version": "1.0", "handlers": [ { @@ -34,7 +34,7 @@ "circulation-bff.search-slips.collection.get" ], "modulePermissions": [ - "tlr.staff-slips.search-slips.get", + "tlr.search-slips.collection.get", "circulation.search-slips.get" ] diff --git a/src/main/java/org/folio/circulationbff/client/feign/CirculationClient.java b/src/main/java/org/folio/circulationbff/client/feign/CirculationClient.java index 0ae8c1d..37e75ca 100644 --- a/src/main/java/org/folio/circulationbff/client/feign/CirculationClient.java +++ b/src/main/java/org/folio/circulationbff/client/feign/CirculationClient.java @@ -5,7 +5,7 @@ import org.folio.circulationbff.domain.dto.BffRequest; import org.folio.circulationbff.domain.dto.CirculationSettingsResponse; import org.folio.circulationbff.domain.dto.Request; -import org.folio.circulationbff.domain.dto.SlipsCollection; +import org.folio.circulationbff.domain.dto.StaffSlipsCollection; import org.folio.spring.config.FeignClientConfiguration; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.SpringQueryMap; @@ -32,8 +32,8 @@ public interface CirculationClient { Request getRequestById(@PathVariable("requestId") String requestId); @GetMapping("/pick-slips/{servicePointId}") - SlipsCollection getPickSlips(@PathVariable ("servicePointId") String servicePointId); + StaffSlipsCollection getPickSlips(@PathVariable ("servicePointId") String servicePointId); @GetMapping("/search-slips/{servicePointId}") - SlipsCollection getSearchSlips(@PathVariable ("servicePointId") String servicePointId); + StaffSlipsCollection getSearchSlips(@PathVariable ("servicePointId") String servicePointId); } diff --git a/src/main/java/org/folio/circulationbff/client/feign/EcsTlrClient.java b/src/main/java/org/folio/circulationbff/client/feign/EcsTlrClient.java index 1cde0dc..4b7859a 100644 --- a/src/main/java/org/folio/circulationbff/client/feign/EcsTlrClient.java +++ b/src/main/java/org/folio/circulationbff/client/feign/EcsTlrClient.java @@ -4,7 +4,7 @@ import org.folio.circulationbff.domain.dto.AllowedServicePoints; import org.folio.circulationbff.domain.dto.BffRequest; import org.folio.circulationbff.domain.dto.EcsTlr; -import org.folio.circulationbff.domain.dto.SlipsCollection; +import org.folio.circulationbff.domain.dto.StaffSlipsCollection; import org.folio.circulationbff.domain.dto.TlrSettings; import org.folio.spring.config.FeignClientConfiguration; import org.springframework.cloud.openfeign.FeignClient; @@ -27,8 +27,8 @@ public interface EcsTlrClient { EcsTlr createRequest(@RequestBody BffRequest request); @GetMapping("/pick-slips/{servicePointId}") - SlipsCollection getPickSlips(@PathVariable("servicePointId") String servicePointId); + StaffSlipsCollection getPickSlips(@PathVariable("servicePointId") String servicePointId); @GetMapping("/search-slips/{servicePointId}") - SlipsCollection getSearchSlips(@PathVariable ("servicePointId") String servicePointId); + StaffSlipsCollection getSearchSlips(@PathVariable ("servicePointId") String servicePointId); } diff --git a/src/main/java/org/folio/circulationbff/controller/CirculationBffController.java b/src/main/java/org/folio/circulationbff/controller/CirculationBffController.java index 80d3e5c..ad62611 100644 --- a/src/main/java/org/folio/circulationbff/controller/CirculationBffController.java +++ b/src/main/java/org/folio/circulationbff/controller/CirculationBffController.java @@ -13,7 +13,7 @@ import org.folio.circulationbff.domain.dto.EmptyBffSearchInstance; import org.folio.circulationbff.domain.dto.MediatedRequest; import org.folio.circulationbff.domain.dto.Request; -import org.folio.circulationbff.domain.dto.SlipsCollection; +import org.folio.circulationbff.domain.dto.StaffSlipsCollection; import org.folio.circulationbff.domain.dto.UserCollection; import org.folio.circulationbff.rest.resource.CirculationBffApi; import org.folio.circulationbff.service.CirculationBffService; @@ -38,7 +38,7 @@ public class CirculationBffController implements CirculationBffApi { private final UserService userService; @Override - public ResponseEntity getPickSlips(String servicePointId) { + public ResponseEntity getPickSlips(String servicePointId) { log.info("getPickSlips:: servicePointId = {}", servicePointId); return ResponseEntity.status(HttpStatus.OK) @@ -46,7 +46,7 @@ public ResponseEntity getPickSlips(String servicePointId) { } @Override - public ResponseEntity getSearchSlips(String servicePointId) { + public ResponseEntity getSearchSlips(String servicePointId) { log.info("getSearchSlips:: servicePointId = {}", servicePointId); return ResponseEntity.status(HttpStatus.OK).body(circulationBffService diff --git a/src/main/java/org/folio/circulationbff/service/CirculationBffService.java b/src/main/java/org/folio/circulationbff/service/CirculationBffService.java index 8716a4f..740d839 100644 --- a/src/main/java/org/folio/circulationbff/service/CirculationBffService.java +++ b/src/main/java/org/folio/circulationbff/service/CirculationBffService.java @@ -4,11 +4,11 @@ import org.folio.circulationbff.domain.dto.AllowedServicePoints; import org.folio.circulationbff.domain.dto.BffRequest; import org.folio.circulationbff.domain.dto.Request; -import org.folio.circulationbff.domain.dto.SlipsCollection; +import org.folio.circulationbff.domain.dto.StaffSlipsCollection; public interface CirculationBffService { AllowedServicePoints getAllowedServicePoints(AllowedServicePointParams allowedServicePointParams, String tenantId); Request createRequest(BffRequest request, String tenantId); - SlipsCollection fetchPickSlipsByServicePointId(String servicePointId); - SlipsCollection fetchSearchSlipsByServicePointId(String servicePointId); + StaffSlipsCollection fetchPickSlipsByServicePointId(String servicePointId); + StaffSlipsCollection fetchSearchSlipsByServicePointId(String servicePointId); } diff --git a/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java b/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java index c058133..305a178 100644 --- a/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java +++ b/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java @@ -7,7 +7,7 @@ import org.folio.circulationbff.domain.dto.BffRequest; import org.folio.circulationbff.domain.dto.EcsTlr; import org.folio.circulationbff.domain.dto.Request; -import org.folio.circulationbff.domain.dto.SlipsCollection; +import org.folio.circulationbff.domain.dto.StaffSlipsCollection; import org.folio.circulationbff.service.CirculationBffService; import org.folio.circulationbff.service.SettingsService; import org.folio.circulationbff.service.UserTenantsService; @@ -27,7 +27,7 @@ public class CirculationBffServiceImpl implements CirculationBffService { private final UserTenantsService userTenantsService; @Override - public SlipsCollection fetchPickSlipsByServicePointId(String servicePointId) { + public StaffSlipsCollection fetchPickSlipsByServicePointId(String servicePointId) { log.info("fetchPickSlipsByServicePointId:: servicePointId: {}", servicePointId); boolean isEcsTlrFeatureEnabled = ecsTlrClient.getTlrSettings().getEcsTlrFeatureEnabled(); log.info("fetchPickSlipsByServicePointId:: isEcsTlrFeatureEnabled: {}", @@ -39,7 +39,7 @@ public SlipsCollection fetchPickSlipsByServicePointId(String servicePointId) { } @Override - public SlipsCollection fetchSearchSlipsByServicePointId(String servicePointId) { + public StaffSlipsCollection fetchSearchSlipsByServicePointId(String servicePointId) { log.info("fetchSearchSlipsByServicePointId:: servicePointId: {}", servicePointId); boolean isEcsTlrFeatureEnabled = ecsTlrClient.getTlrSettings().getEcsTlrFeatureEnabled(); log.info("fetchSearchSlipsByServicePointId:: isEcsTlrFeatureEnabled: {}", diff --git a/src/main/resources/swagger.api/circulation-bff.yaml b/src/main/resources/swagger.api/circulation-bff.yaml index 0c7315a..28dcd5f 100644 --- a/src/main/resources/swagger.api/circulation-bff.yaml +++ b/src/main/resources/swagger.api/circulation-bff.yaml @@ -14,9 +14,9 @@ paths: /circulation-bff/external-users/{externalUserId}/tenant/{tenantId}: $ref: 'paths/externalUser/externalUser.yaml' /circulation-bff/pick-slips/{servicePointId}: - $ref: 'paths/slips/pickSlips.yaml' + $ref: 'paths/staffSlips/pickSlips.yaml' /circulation-bff/search-slips/{servicePointId}: - $ref: 'paths/slips/searchSlips.yaml' + $ref: 'paths/staffSlips/searchSlips.yaml' components: schemas: diff --git a/src/main/resources/swagger.api/paths/slips/pickSlips.yaml b/src/main/resources/swagger.api/paths/staffSlips/pickSlips.yaml similarity index 89% rename from src/main/resources/swagger.api/paths/slips/pickSlips.yaml rename to src/main/resources/swagger.api/paths/staffSlips/pickSlips.yaml index afae4a4..dbf7bc0 100644 --- a/src/main/resources/swagger.api/paths/slips/pickSlips.yaml +++ b/src/main/resources/swagger.api/paths/staffSlips/pickSlips.yaml @@ -11,7 +11,7 @@ get: content: application/json: schema: - $ref: '../../responses/slipsResponse.yaml' + $ref: '../../responses/staffSlipsResponse.yaml' '404': $ref: '../../responses/notFoundResponse.yaml' '422': diff --git a/src/main/resources/swagger.api/paths/slips/searchSlips.yaml b/src/main/resources/swagger.api/paths/staffSlips/searchSlips.yaml similarity index 89% rename from src/main/resources/swagger.api/paths/slips/searchSlips.yaml rename to src/main/resources/swagger.api/paths/staffSlips/searchSlips.yaml index 6d62c3c..322ecdd 100644 --- a/src/main/resources/swagger.api/paths/slips/searchSlips.yaml +++ b/src/main/resources/swagger.api/paths/staffSlips/searchSlips.yaml @@ -11,7 +11,7 @@ get: content: application/json: schema: - $ref: '../../responses/slipsResponse.yaml' + $ref: '../../responses/staffSlipsResponse.yaml' '404': $ref: '../../responses/notFoundResponse.yaml' '422': diff --git a/src/main/resources/swagger.api/paths/slips/slipsCommon.yaml b/src/main/resources/swagger.api/paths/staffSlips/slipsCommon.yaml similarity index 86% rename from src/main/resources/swagger.api/paths/slips/slipsCommon.yaml rename to src/main/resources/swagger.api/paths/staffSlips/slipsCommon.yaml index 6792a64..a550929 100644 --- a/src/main/resources/swagger.api/paths/slips/slipsCommon.yaml +++ b/src/main/resources/swagger.api/paths/staffSlips/slipsCommon.yaml @@ -6,7 +6,7 @@ responses: content: application/json: schema: - $ref: '../../responses/slipsResponse.yaml' + $ref: '../../responses/staffSlipsResponse.yaml' '404': $ref: '../../responses/notFoundResponse.yaml' '422': diff --git a/src/main/resources/swagger.api/responses/slipsResponse.yaml b/src/main/resources/swagger.api/responses/slipsResponse.yaml deleted file mode 100644 index d56bf5c..0000000 --- a/src/main/resources/swagger.api/responses/slipsResponse.yaml +++ /dev/null @@ -1 +0,0 @@ -$ref: "../schemas/dto/slips/slipsCollection.yaml" \ No newline at end of file diff --git a/src/main/resources/swagger.api/responses/staffSlipsResponse.yaml b/src/main/resources/swagger.api/responses/staffSlipsResponse.yaml new file mode 100644 index 0000000..d05f6b6 --- /dev/null +++ b/src/main/resources/swagger.api/responses/staffSlipsResponse.yaml @@ -0,0 +1 @@ +$ref: "../schemas/dto/staffSlips/staffSlipsCollection.yaml" \ No newline at end of file diff --git a/src/main/resources/swagger.api/schemas/dto/slips/slipsCollection.yaml b/src/main/resources/swagger.api/schemas/dto/slips/slipsCollection.yaml deleted file mode 100644 index 690671e..0000000 --- a/src/main/resources/swagger.api/schemas/dto/slips/slipsCollection.yaml +++ /dev/null @@ -1,13 +0,0 @@ -description: "Collection slips" -type: "object" -properties: - totalRecords: - type: "integer" - description: "Total number of slips" - slips: - type: "array" - items: - $ref: "slip.yaml" -required: - - totalRecords - - slips diff --git a/src/main/resources/swagger.api/schemas/dto/slips/slip.yaml b/src/main/resources/swagger.api/schemas/dto/staffSlips/staffSlip.yaml similarity index 99% rename from src/main/resources/swagger.api/schemas/dto/slips/slip.yaml rename to src/main/resources/swagger.api/schemas/dto/staffSlips/staffSlip.yaml index b0b0d46..61d2c73 100644 --- a/src/main/resources/swagger.api/schemas/dto/slips/slip.yaml +++ b/src/main/resources/swagger.api/schemas/dto/staffSlips/staffSlip.yaml @@ -1,4 +1,4 @@ -description: Slip +description: Staff slip type: object properties: currentDateTime: diff --git a/src/main/resources/swagger.api/schemas/dto/staffSlips/staffSlipsCollection.yaml b/src/main/resources/swagger.api/schemas/dto/staffSlips/staffSlipsCollection.yaml new file mode 100644 index 0000000..f089ea7 --- /dev/null +++ b/src/main/resources/swagger.api/schemas/dto/staffSlips/staffSlipsCollection.yaml @@ -0,0 +1,13 @@ +description: "Collection of staff slips" +type: "object" +properties: + totalRecords: + type: "integer" + description: "Total number of staff slips" + staffSlips: + type: "array" + items: + $ref: "staffSlip.yaml" +required: + - totalRecords + - staffSlips diff --git a/src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java b/src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java index 3009a80..69d060a 100644 --- a/src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java +++ b/src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java @@ -15,8 +15,8 @@ import java.util.stream.Stream; import org.apache.http.HttpStatus; -import org.folio.circulationbff.domain.dto.Slip; -import org.folio.circulationbff.domain.dto.SlipsCollection; +import org.folio.circulationbff.domain.dto.StaffSlip; +import org.folio.circulationbff.domain.dto.StaffSlipsCollection; import org.folio.circulationbff.domain.dto.TlrSettings; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; @@ -51,7 +51,7 @@ void getStaffSlipsApiTest(String externalModuleUrl, String circulationBffUrl, var tlrSettings = new TlrSettings(); tlrSettings.setEcsTlrFeatureEnabled(isTlrEnabled); - var staffSlipsCollection = new SlipsCollection(1, List.of(new Slip())); + var staffSlipsCollection = new StaffSlipsCollection(1, List.of(new StaffSlip())); var servicePointId = UUID.randomUUID().toString(); UrlPathPattern externalModuleUrlPattern = urlPathMatching(String.format(URL_PATTERN, externalModuleUrl, servicePointId)); diff --git a/src/test/java/org/folio/circulationbff/controller/CirculationBffControllerTest.java b/src/test/java/org/folio/circulationbff/controller/CirculationBffControllerTest.java index cf8dbd5..b23c437 100644 --- a/src/test/java/org/folio/circulationbff/controller/CirculationBffControllerTest.java +++ b/src/test/java/org/folio/circulationbff/controller/CirculationBffControllerTest.java @@ -20,8 +20,8 @@ import org.apache.commons.lang3.StringUtils; import org.folio.circulationbff.domain.dto.BffSearchInstance; import org.folio.circulationbff.domain.dto.MediatedRequest; -import org.folio.circulationbff.domain.dto.Slip; -import org.folio.circulationbff.domain.dto.SlipsCollection; +import org.folio.circulationbff.domain.dto.StaffSlip; +import org.folio.circulationbff.domain.dto.StaffSlipsCollection; import org.folio.circulationbff.domain.dto.User; import org.folio.circulationbff.domain.dto.UserCollection; import org.folio.circulationbff.service.CirculationBffService; @@ -75,14 +75,14 @@ static Stream> externalUsersControllerReturnsTheSameUserCollectionAsU @ParameterizedTest @MethodSource("staffSlips") - void getPickSlipsControllerReturnsSuccessResponseEntity(List staffSlips) { - SlipsCollection staffSlipsCollection = new SlipsCollection( + void getPickSlipsControllerReturnsSuccessResponseEntity(List staffSlips) { + StaffSlipsCollection staffSlipsCollection = new StaffSlipsCollection( Objects.isNull(staffSlips) ? 0 : staffSlips.size(), staffSlips); when(circulationBffService.fetchPickSlipsByServicePointId(anyString())) .thenReturn(staffSlipsCollection); - ResponseEntity actual = controller.getPickSlips(StringUtils.EMPTY); + ResponseEntity actual = controller.getPickSlips(StringUtils.EMPTY); assertThat(actual.getStatusCode(), is(HttpStatus.OK)); assertThat(actual.getBody(), is(staffSlipsCollection)); @@ -90,21 +90,21 @@ void getPickSlipsControllerReturnsSuccessResponseEntity(List staffSlips) { @ParameterizedTest @MethodSource("staffSlips") - void getSearchSlipsControllerReturnsSuccessResponseEntity(List staffSlips) { - SlipsCollection staffSlipsCollection = new SlipsCollection( + void getSearchSlipsControllerReturnsSuccessResponseEntity(List staffSlips) { + StaffSlipsCollection staffSlipsCollection = new StaffSlipsCollection( Objects.isNull(staffSlips) ? 0 : staffSlips.size(), staffSlips); when(circulationBffService.fetchSearchSlipsByServicePointId(anyString())) .thenReturn(staffSlipsCollection); - ResponseEntity actual = controller.getSearchSlips(StringUtils.EMPTY); + ResponseEntity actual = controller.getSearchSlips(StringUtils.EMPTY); assertThat(actual.getStatusCode(), is(HttpStatus.OK)); assertThat(actual.getBody(), is(staffSlipsCollection)); } - private static Stream> staffSlips() { - return Stream.of(null, Collections.emptyList(), List.of(new Slip())); + private static Stream> staffSlips() { + return Stream.of(null, Collections.emptyList(), List.of(new StaffSlip())); } @Test From b0a8a24a53856a4ae5b43f92c91d071087ab5fdb Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Mon, 18 Nov 2024 17:56:07 +0400 Subject: [PATCH 07/35] MCBFF-12: deleted staffSlipsCommon.yaml --- .../swagger.api/paths/staffSlips/slipsCommon.yaml | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 src/main/resources/swagger.api/paths/staffSlips/slipsCommon.yaml diff --git a/src/main/resources/swagger.api/paths/staffSlips/slipsCommon.yaml b/src/main/resources/swagger.api/paths/staffSlips/slipsCommon.yaml deleted file mode 100644 index a550929..0000000 --- a/src/main/resources/swagger.api/paths/staffSlips/slipsCommon.yaml +++ /dev/null @@ -1,15 +0,0 @@ -parameters: - - $ref: '../../parameters/servicePointId.yaml' -responses: - '200': - description: 'A collection of slips' - content: - application/json: - schema: - $ref: '../../responses/staffSlipsResponse.yaml' - '404': - $ref: '../../responses/notFoundResponse.yaml' - '422': - $ref: '../../responses/unprocessableEntityResponse.yaml' - '500': - $ref: '../../responses/internalServerErrorResponse.yaml' \ No newline at end of file From 6e23ef21ae613393cb6a1569b12be263cec10756 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Tue, 19 Nov 2024 14:28:02 +0400 Subject: [PATCH 08/35] MCBFF-12: added dependencies to mod-tlr and mod-circulation interfaces. removed plural from collection name --- descriptors/ModuleDescriptor-template.json | 13 ++++++++++++- .../client/feign/CirculationClient.java | 6 +++--- .../circulationbff/client/feign/EcsTlrClient.java | 6 +++--- .../controller/CirculationBffController.java | 6 +++--- .../service/CirculationBffService.java | 6 +++--- .../service/impl/CirculationBffServiceImpl.java | 6 +++--- .../swagger.api/paths/staffSlips/searchSlips.yaml | 2 +- .../swagger.api/responses/staffSlipsResponse.yaml | 2 +- ...lipsCollection.yaml => staffSlipCollection.yaml} | 0 .../folio/circulationbff/api/StaffSlipApiTest.java | 4 ++-- .../controller/CirculationBffControllerTest.java | 10 +++++----- 11 files changed, 36 insertions(+), 25 deletions(-) rename src/main/resources/swagger.api/schemas/dto/staffSlips/{staffSlipsCollection.yaml => staffSlipCollection.yaml} (100%) diff --git a/descriptors/ModuleDescriptor-template.json b/descriptors/ModuleDescriptor-template.json index e949f65..274f3d7 100644 --- a/descriptors/ModuleDescriptor-template.json +++ b/descriptors/ModuleDescriptor-template.json @@ -36,7 +36,6 @@ "modulePermissions": [ "tlr.search-slips.collection.get", "circulation.search-slips.get" - ] } ] @@ -185,6 +184,18 @@ } ], "requires": [ + { + "id": "tlr-staff-slips", + "version": "1.0" + }, + { + "id": "pick-slips", + "version": "0.4" + }, + { + "id": "search-slips", + "version": "0.1" + }, { "id": "search", "version": "1.3" diff --git a/src/main/java/org/folio/circulationbff/client/feign/CirculationClient.java b/src/main/java/org/folio/circulationbff/client/feign/CirculationClient.java index 37e75ca..f11ae1d 100644 --- a/src/main/java/org/folio/circulationbff/client/feign/CirculationClient.java +++ b/src/main/java/org/folio/circulationbff/client/feign/CirculationClient.java @@ -5,7 +5,7 @@ import org.folio.circulationbff.domain.dto.BffRequest; import org.folio.circulationbff.domain.dto.CirculationSettingsResponse; import org.folio.circulationbff.domain.dto.Request; -import org.folio.circulationbff.domain.dto.StaffSlipsCollection; +import org.folio.circulationbff.domain.dto.StaffSlipCollection; import org.folio.spring.config.FeignClientConfiguration; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.SpringQueryMap; @@ -32,8 +32,8 @@ public interface CirculationClient { Request getRequestById(@PathVariable("requestId") String requestId); @GetMapping("/pick-slips/{servicePointId}") - StaffSlipsCollection getPickSlips(@PathVariable ("servicePointId") String servicePointId); + StaffSlipCollection getPickSlips(@PathVariable ("servicePointId") String servicePointId); @GetMapping("/search-slips/{servicePointId}") - StaffSlipsCollection getSearchSlips(@PathVariable ("servicePointId") String servicePointId); + StaffSlipCollection getSearchSlips(@PathVariable ("servicePointId") String servicePointId); } diff --git a/src/main/java/org/folio/circulationbff/client/feign/EcsTlrClient.java b/src/main/java/org/folio/circulationbff/client/feign/EcsTlrClient.java index 4b7859a..1669c5c 100644 --- a/src/main/java/org/folio/circulationbff/client/feign/EcsTlrClient.java +++ b/src/main/java/org/folio/circulationbff/client/feign/EcsTlrClient.java @@ -4,7 +4,7 @@ import org.folio.circulationbff.domain.dto.AllowedServicePoints; import org.folio.circulationbff.domain.dto.BffRequest; import org.folio.circulationbff.domain.dto.EcsTlr; -import org.folio.circulationbff.domain.dto.StaffSlipsCollection; +import org.folio.circulationbff.domain.dto.StaffSlipCollection; import org.folio.circulationbff.domain.dto.TlrSettings; import org.folio.spring.config.FeignClientConfiguration; import org.springframework.cloud.openfeign.FeignClient; @@ -27,8 +27,8 @@ public interface EcsTlrClient { EcsTlr createRequest(@RequestBody BffRequest request); @GetMapping("/pick-slips/{servicePointId}") - StaffSlipsCollection getPickSlips(@PathVariable("servicePointId") String servicePointId); + StaffSlipCollection getPickSlips(@PathVariable("servicePointId") String servicePointId); @GetMapping("/search-slips/{servicePointId}") - StaffSlipsCollection getSearchSlips(@PathVariable ("servicePointId") String servicePointId); + StaffSlipCollection getSearchSlips(@PathVariable ("servicePointId") String servicePointId); } diff --git a/src/main/java/org/folio/circulationbff/controller/CirculationBffController.java b/src/main/java/org/folio/circulationbff/controller/CirculationBffController.java index ad62611..598e37c 100644 --- a/src/main/java/org/folio/circulationbff/controller/CirculationBffController.java +++ b/src/main/java/org/folio/circulationbff/controller/CirculationBffController.java @@ -13,7 +13,7 @@ import org.folio.circulationbff.domain.dto.EmptyBffSearchInstance; import org.folio.circulationbff.domain.dto.MediatedRequest; import org.folio.circulationbff.domain.dto.Request; -import org.folio.circulationbff.domain.dto.StaffSlipsCollection; +import org.folio.circulationbff.domain.dto.StaffSlipCollection; import org.folio.circulationbff.domain.dto.UserCollection; import org.folio.circulationbff.rest.resource.CirculationBffApi; import org.folio.circulationbff.service.CirculationBffService; @@ -38,7 +38,7 @@ public class CirculationBffController implements CirculationBffApi { private final UserService userService; @Override - public ResponseEntity getPickSlips(String servicePointId) { + public ResponseEntity getPickSlips(String servicePointId) { log.info("getPickSlips:: servicePointId = {}", servicePointId); return ResponseEntity.status(HttpStatus.OK) @@ -46,7 +46,7 @@ public ResponseEntity getPickSlips(String servicePointId) } @Override - public ResponseEntity getSearchSlips(String servicePointId) { + public ResponseEntity getSearchSlips(String servicePointId) { log.info("getSearchSlips:: servicePointId = {}", servicePointId); return ResponseEntity.status(HttpStatus.OK).body(circulationBffService diff --git a/src/main/java/org/folio/circulationbff/service/CirculationBffService.java b/src/main/java/org/folio/circulationbff/service/CirculationBffService.java index 740d839..4f78ce7 100644 --- a/src/main/java/org/folio/circulationbff/service/CirculationBffService.java +++ b/src/main/java/org/folio/circulationbff/service/CirculationBffService.java @@ -4,11 +4,11 @@ import org.folio.circulationbff.domain.dto.AllowedServicePoints; import org.folio.circulationbff.domain.dto.BffRequest; import org.folio.circulationbff.domain.dto.Request; -import org.folio.circulationbff.domain.dto.StaffSlipsCollection; +import org.folio.circulationbff.domain.dto.StaffSlipCollection; public interface CirculationBffService { AllowedServicePoints getAllowedServicePoints(AllowedServicePointParams allowedServicePointParams, String tenantId); Request createRequest(BffRequest request, String tenantId); - StaffSlipsCollection fetchPickSlipsByServicePointId(String servicePointId); - StaffSlipsCollection fetchSearchSlipsByServicePointId(String servicePointId); + StaffSlipCollection fetchPickSlipsByServicePointId(String servicePointId); + StaffSlipCollection fetchSearchSlipsByServicePointId(String servicePointId); } diff --git a/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java b/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java index 305a178..026eff8 100644 --- a/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java +++ b/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java @@ -7,7 +7,7 @@ import org.folio.circulationbff.domain.dto.BffRequest; import org.folio.circulationbff.domain.dto.EcsTlr; import org.folio.circulationbff.domain.dto.Request; -import org.folio.circulationbff.domain.dto.StaffSlipsCollection; +import org.folio.circulationbff.domain.dto.StaffSlipCollection; import org.folio.circulationbff.service.CirculationBffService; import org.folio.circulationbff.service.SettingsService; import org.folio.circulationbff.service.UserTenantsService; @@ -27,7 +27,7 @@ public class CirculationBffServiceImpl implements CirculationBffService { private final UserTenantsService userTenantsService; @Override - public StaffSlipsCollection fetchPickSlipsByServicePointId(String servicePointId) { + public StaffSlipCollection fetchPickSlipsByServicePointId(String servicePointId) { log.info("fetchPickSlipsByServicePointId:: servicePointId: {}", servicePointId); boolean isEcsTlrFeatureEnabled = ecsTlrClient.getTlrSettings().getEcsTlrFeatureEnabled(); log.info("fetchPickSlipsByServicePointId:: isEcsTlrFeatureEnabled: {}", @@ -39,7 +39,7 @@ public StaffSlipsCollection fetchPickSlipsByServicePointId(String servicePointId } @Override - public StaffSlipsCollection fetchSearchSlipsByServicePointId(String servicePointId) { + public StaffSlipCollection fetchSearchSlipsByServicePointId(String servicePointId) { log.info("fetchSearchSlipsByServicePointId:: servicePointId: {}", servicePointId); boolean isEcsTlrFeatureEnabled = ecsTlrClient.getTlrSettings().getEcsTlrFeatureEnabled(); log.info("fetchSearchSlipsByServicePointId:: isEcsTlrFeatureEnabled: {}", diff --git a/src/main/resources/swagger.api/paths/staffSlips/searchSlips.yaml b/src/main/resources/swagger.api/paths/staffSlips/searchSlips.yaml index 322ecdd..8483d87 100644 --- a/src/main/resources/swagger.api/paths/staffSlips/searchSlips.yaml +++ b/src/main/resources/swagger.api/paths/staffSlips/searchSlips.yaml @@ -1,5 +1,5 @@ get: - description: API fro get search slips + description: API to get search slips operationId: getSearchSlips tags: - getSearchSlips diff --git a/src/main/resources/swagger.api/responses/staffSlipsResponse.yaml b/src/main/resources/swagger.api/responses/staffSlipsResponse.yaml index d05f6b6..90c8e3b 100644 --- a/src/main/resources/swagger.api/responses/staffSlipsResponse.yaml +++ b/src/main/resources/swagger.api/responses/staffSlipsResponse.yaml @@ -1 +1 @@ -$ref: "../schemas/dto/staffSlips/staffSlipsCollection.yaml" \ No newline at end of file +$ref: "../schemas/dto/staffSlips/staffSlipCollection.yaml" \ No newline at end of file diff --git a/src/main/resources/swagger.api/schemas/dto/staffSlips/staffSlipsCollection.yaml b/src/main/resources/swagger.api/schemas/dto/staffSlips/staffSlipCollection.yaml similarity index 100% rename from src/main/resources/swagger.api/schemas/dto/staffSlips/staffSlipsCollection.yaml rename to src/main/resources/swagger.api/schemas/dto/staffSlips/staffSlipCollection.yaml diff --git a/src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java b/src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java index 69d060a..41e7691 100644 --- a/src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java +++ b/src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java @@ -16,7 +16,7 @@ import org.apache.http.HttpStatus; import org.folio.circulationbff.domain.dto.StaffSlip; -import org.folio.circulationbff.domain.dto.StaffSlipsCollection; +import org.folio.circulationbff.domain.dto.StaffSlipCollection; import org.folio.circulationbff.domain.dto.TlrSettings; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; @@ -51,7 +51,7 @@ void getStaffSlipsApiTest(String externalModuleUrl, String circulationBffUrl, var tlrSettings = new TlrSettings(); tlrSettings.setEcsTlrFeatureEnabled(isTlrEnabled); - var staffSlipsCollection = new StaffSlipsCollection(1, List.of(new StaffSlip())); + var staffSlipsCollection = new StaffSlipCollection(1, List.of(new StaffSlip())); var servicePointId = UUID.randomUUID().toString(); UrlPathPattern externalModuleUrlPattern = urlPathMatching(String.format(URL_PATTERN, externalModuleUrl, servicePointId)); diff --git a/src/test/java/org/folio/circulationbff/controller/CirculationBffControllerTest.java b/src/test/java/org/folio/circulationbff/controller/CirculationBffControllerTest.java index b23c437..97fb31d 100644 --- a/src/test/java/org/folio/circulationbff/controller/CirculationBffControllerTest.java +++ b/src/test/java/org/folio/circulationbff/controller/CirculationBffControllerTest.java @@ -21,7 +21,7 @@ import org.folio.circulationbff.domain.dto.BffSearchInstance; import org.folio.circulationbff.domain.dto.MediatedRequest; import org.folio.circulationbff.domain.dto.StaffSlip; -import org.folio.circulationbff.domain.dto.StaffSlipsCollection; +import org.folio.circulationbff.domain.dto.StaffSlipCollection; import org.folio.circulationbff.domain.dto.User; import org.folio.circulationbff.domain.dto.UserCollection; import org.folio.circulationbff.service.CirculationBffService; @@ -76,13 +76,13 @@ static Stream> externalUsersControllerReturnsTheSameUserCollectionAsU @ParameterizedTest @MethodSource("staffSlips") void getPickSlipsControllerReturnsSuccessResponseEntity(List staffSlips) { - StaffSlipsCollection staffSlipsCollection = new StaffSlipsCollection( + StaffSlipCollection staffSlipsCollection = new StaffSlipCollection( Objects.isNull(staffSlips) ? 0 : staffSlips.size(), staffSlips); when(circulationBffService.fetchPickSlipsByServicePointId(anyString())) .thenReturn(staffSlipsCollection); - ResponseEntity actual = controller.getPickSlips(StringUtils.EMPTY); + ResponseEntity actual = controller.getPickSlips(StringUtils.EMPTY); assertThat(actual.getStatusCode(), is(HttpStatus.OK)); assertThat(actual.getBody(), is(staffSlipsCollection)); @@ -91,13 +91,13 @@ void getPickSlipsControllerReturnsSuccessResponseEntity(List staffSli @ParameterizedTest @MethodSource("staffSlips") void getSearchSlipsControllerReturnsSuccessResponseEntity(List staffSlips) { - StaffSlipsCollection staffSlipsCollection = new StaffSlipsCollection( + StaffSlipCollection staffSlipsCollection = new StaffSlipCollection( Objects.isNull(staffSlips) ? 0 : staffSlips.size(), staffSlips); when(circulationBffService.fetchSearchSlipsByServicePointId(anyString())) .thenReturn(staffSlipsCollection); - ResponseEntity actual = controller.getSearchSlips(StringUtils.EMPTY); + ResponseEntity actual = controller.getSearchSlips(StringUtils.EMPTY); assertThat(actual.getStatusCode(), is(HttpStatus.OK)); assertThat(actual.getBody(), is(staffSlipsCollection)); From fd171dbc33fa5dcf27d588479caaf02ec2958b5a Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Tue, 19 Nov 2024 14:32:43 +0400 Subject: [PATCH 09/35] MCBFF-12: removed quotes --- .../schemas/dto/staffSlips/staffSlipCollection.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/resources/swagger.api/schemas/dto/staffSlips/staffSlipCollection.yaml b/src/main/resources/swagger.api/schemas/dto/staffSlips/staffSlipCollection.yaml index f089ea7..858ffe6 100644 --- a/src/main/resources/swagger.api/schemas/dto/staffSlips/staffSlipCollection.yaml +++ b/src/main/resources/swagger.api/schemas/dto/staffSlips/staffSlipCollection.yaml @@ -1,11 +1,11 @@ -description: "Collection of staff slips" -type: "object" +description: Collection of staff slips +type: object properties: totalRecords: - type: "integer" - description: "Total number of staff slips" + type: integer + description: Total number of staff slips staffSlips: - type: "array" + type: array items: $ref: "staffSlip.yaml" required: From 17815e73669385eddac60f79c119f7d43ad2909e Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Tue, 19 Nov 2024 18:21:55 +0400 Subject: [PATCH 10/35] MCBFF-12: add logic for checking is tenantId central --- .../service/SettingsService.java | 1 + .../service/UserTenantsService.java | 1 + .../impl/CirculationBffServiceImpl.java | 4 +- .../service/impl/SettingsServiceImpl.java | 7 ++ .../service/impl/UserTenantsServiceImpl.java | 23 ++++- .../service/SettingServiceTest.java | 93 +++++++++++++++++++ .../service/UserTenantsServiceTest.java | 55 +++++++++++ 7 files changed, 181 insertions(+), 3 deletions(-) create mode 100644 src/test/java/org/folio/circulationbff/service/SettingServiceTest.java create mode 100644 src/test/java/org/folio/circulationbff/service/UserTenantsServiceTest.java diff --git a/src/main/java/org/folio/circulationbff/service/SettingsService.java b/src/main/java/org/folio/circulationbff/service/SettingsService.java index 1c8b61d..f2c6485 100644 --- a/src/main/java/org/folio/circulationbff/service/SettingsService.java +++ b/src/main/java/org/folio/circulationbff/service/SettingsService.java @@ -1,5 +1,6 @@ package org.folio.circulationbff.service; public interface SettingsService { + boolean isEcsTlrFeatureEnabled(); boolean isEcsTlrFeatureEnabled(String tenantId); } diff --git a/src/main/java/org/folio/circulationbff/service/UserTenantsService.java b/src/main/java/org/folio/circulationbff/service/UserTenantsService.java index cb11378..2e91a3a 100644 --- a/src/main/java/org/folio/circulationbff/service/UserTenantsService.java +++ b/src/main/java/org/folio/circulationbff/service/UserTenantsService.java @@ -1,5 +1,6 @@ package org.folio.circulationbff.service; public interface UserTenantsService { + boolean isCentralTenant(); boolean isCentralTenant(String tenantId); } diff --git a/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java b/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java index 026eff8..1c68386 100644 --- a/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java +++ b/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java @@ -29,7 +29,7 @@ public class CirculationBffServiceImpl implements CirculationBffService { @Override public StaffSlipCollection fetchPickSlipsByServicePointId(String servicePointId) { log.info("fetchPickSlipsByServicePointId:: servicePointId: {}", servicePointId); - boolean isEcsTlrFeatureEnabled = ecsTlrClient.getTlrSettings().getEcsTlrFeatureEnabled(); + boolean isEcsTlrFeatureEnabled = settingsService.isEcsTlrFeatureEnabled(); log.info("fetchPickSlipsByServicePointId:: isEcsTlrFeatureEnabled: {}", isEcsTlrFeatureEnabled); @@ -41,7 +41,7 @@ public StaffSlipCollection fetchPickSlipsByServicePointId(String servicePointId) @Override public StaffSlipCollection fetchSearchSlipsByServicePointId(String servicePointId) { log.info("fetchSearchSlipsByServicePointId:: servicePointId: {}", servicePointId); - boolean isEcsTlrFeatureEnabled = ecsTlrClient.getTlrSettings().getEcsTlrFeatureEnabled(); + boolean isEcsTlrFeatureEnabled = settingsService.isEcsTlrFeatureEnabled(); log.info("fetchSearchSlipsByServicePointId:: isEcsTlrFeatureEnabled: {}", isEcsTlrFeatureEnabled); diff --git a/src/main/java/org/folio/circulationbff/service/impl/SettingsServiceImpl.java b/src/main/java/org/folio/circulationbff/service/impl/SettingsServiceImpl.java index fe22e1f..dcdec25 100644 --- a/src/main/java/org/folio/circulationbff/service/impl/SettingsServiceImpl.java +++ b/src/main/java/org/folio/circulationbff/service/impl/SettingsServiceImpl.java @@ -19,6 +19,13 @@ public class SettingsServiceImpl implements SettingsService { private final CirculationClient circulationClient; private final UserTenantsService userTenantsService; + @Override + public boolean isEcsTlrFeatureEnabled() { + return userTenantsService.isCentralTenant() + ? ecsTlrClient.getTlrSettings().getEcsTlrFeatureEnabled() + : isTlrEnabledInCirculationSettings(); + } + @Override public boolean isEcsTlrFeatureEnabled(String tenantId) { if (userTenantsService.isCentralTenant(tenantId)) { diff --git a/src/main/java/org/folio/circulationbff/service/impl/UserTenantsServiceImpl.java b/src/main/java/org/folio/circulationbff/service/impl/UserTenantsServiceImpl.java index 187237f..dbbcaed 100644 --- a/src/main/java/org/folio/circulationbff/service/impl/UserTenantsServiceImpl.java +++ b/src/main/java/org/folio/circulationbff/service/impl/UserTenantsServiceImpl.java @@ -19,10 +19,31 @@ public class UserTenantsServiceImpl implements UserTenantsService { private final UserTenantsClient userTenantsClient; @Override - public boolean isCentralTenant(String tenantId) { + public boolean isCentralTenant() { + UserTenant firstUserTenant = getFirstUserTenantOrLogFailure(); + if (firstUserTenant == null) { + return false; + } + String centralTenantId = firstUserTenant.getCentralTenantId(); + String tenantId = firstUserTenant.getTenantId(); + log.info("isCentralTenant:: centralTenantId-{}, tenantId={}", centralTenantId, + tenantId); + + return centralTenantId.equals(tenantId); + } + + private UserTenant getFirstUserTenantOrLogFailure() { UserTenant firstUserTenant = findFirstUserTenant(); if (firstUserTenant == null) { log.info("processUserGroupEvent: Failed to get user-tenants info"); + } + return firstUserTenant; + } + + @Override + public boolean isCentralTenant(String tenantId) { + UserTenant firstUserTenant = getFirstUserTenantOrLogFailure(); + if (firstUserTenant == null) { return false; } String centralTenantId = firstUserTenant.getCentralTenantId(); diff --git a/src/test/java/org/folio/circulationbff/service/SettingServiceTest.java b/src/test/java/org/folio/circulationbff/service/SettingServiceTest.java new file mode 100644 index 0000000..a4aea53 --- /dev/null +++ b/src/test/java/org/folio/circulationbff/service/SettingServiceTest.java @@ -0,0 +1,93 @@ +package org.folio.circulationbff.service; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.when; + +import java.util.stream.Stream; + +import org.folio.circulationbff.client.feign.CirculationClient; +import org.folio.circulationbff.client.feign.EcsTlrClient; +import org.folio.circulationbff.domain.dto.CirculationSettings; +import org.folio.circulationbff.domain.dto.CirculationSettingsResponse; +import org.folio.circulationbff.domain.dto.CirculationSettingsValue; +import org.folio.circulationbff.domain.dto.TlrSettings; +import org.folio.circulationbff.service.impl.SettingsServiceImpl; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.testcontainers.shaded.org.apache.commons.lang3.BooleanUtils; + +@ExtendWith(MockitoExtension.class) +class SettingServiceTest { + + @Mock + private EcsTlrClient ecsTlrClient; + + @Mock + private CirculationClient circulationClient; + + @Mock + private UserTenantsService userTenantsService; + + @InjectMocks + private SettingsServiceImpl service; + + @ParameterizedTest + @MethodSource("settingsToResponse") + void isEcsTlrSettingsEnabledTest(boolean isCentralTenant, TlrSettings tlrSettings, + CirculationSettingsResponse circulationSettingsResponse, boolean expectedValue) { + + when(userTenantsService.isCentralTenant()).thenReturn(isCentralTenant); + mockByIsCentralTenantId(circulationSettingsResponse, tlrSettings, isCentralTenant); + + assertThat(service.isEcsTlrFeatureEnabled(), equalTo(expectedValue)); + } + + private void mockByIsCentralTenantId(CirculationSettingsResponse circulationSettingsResponse, + TlrSettings tlrSettings, boolean isCentralTenant) { + + if (BooleanUtils.isTrue(isCentralTenant)) { + when(ecsTlrClient.getTlrSettings()).thenReturn(tlrSettings); + } else { + when(circulationClient.getCirculationSettingsByQuery(anyString())) + .thenReturn(circulationSettingsResponse); + } + } + + private static CirculationSettingsResponse buildCirculationSettingsResponse( + boolean isEcsTlrEnabled) { + + CirculationSettingsResponse circulationSettingsResponse = new CirculationSettingsResponse(); + CirculationSettings circulationSettings = new CirculationSettings(); + CirculationSettingsValue value = new CirculationSettingsValue(); + value.enabled(isEcsTlrEnabled); + circulationSettings.setValue(value); + circulationSettingsResponse.addCirculationSettingsItem(circulationSettings); + circulationSettingsResponse.setTotalRecords(1); + return circulationSettingsResponse; + } + + private static TlrSettings buildTlrSettings(boolean isTlrEnabled) { + TlrSettings tlrSettings = new TlrSettings(); + tlrSettings.setEcsTlrFeatureEnabled(isTlrEnabled); + return tlrSettings; + } + + private static Stream settingsToResponse() { + return Stream.of( + Arguments.of(true, buildTlrSettings(true), null, true), + Arguments.of(true, buildTlrSettings(false), null, false), + Arguments.of(false, null, buildCirculationSettingsResponse(true), + true), + Arguments.of(false, null, buildCirculationSettingsResponse(false), + false) + ); + } + +} diff --git a/src/test/java/org/folio/circulationbff/service/UserTenantsServiceTest.java b/src/test/java/org/folio/circulationbff/service/UserTenantsServiceTest.java new file mode 100644 index 0000000..0634726 --- /dev/null +++ b/src/test/java/org/folio/circulationbff/service/UserTenantsServiceTest.java @@ -0,0 +1,55 @@ +package org.folio.circulationbff.service; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.Mockito.when; + +import java.util.List; +import java.util.stream.Stream; + +import org.folio.circulationbff.client.feign.UserTenantsClient; +import org.folio.circulationbff.domain.dto.UserTenant; +import org.folio.circulationbff.domain.dto.UserTenantCollection; +import org.folio.circulationbff.service.impl.UserTenantsServiceImpl; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +public class UserTenantsServiceTest { + private static final String CENTRAL_TENANT_ID = "consortium"; + private static final String TENANT_ID = "university"; + + @Mock + private UserTenantsClient userTenantsClient; + + @InjectMocks + private UserTenantsServiceImpl userTenantsService; + + @ParameterizedTest + @MethodSource("userTenantCollectionToExpectedValue") + void isCentralTenantIdTest(UserTenantCollection userTenantCollection, boolean expectedValue) { + when(userTenantsClient.getUserTenants(anyInt())).thenReturn(userTenantCollection); + + assertThat(userTenantsService.isCentralTenant(), equalTo(expectedValue)); + } + + private static Stream userTenantCollectionToExpectedValue() { + return Stream.of( + Arguments.of(buildCollection(TENANT_ID), false), + Arguments.of(buildCollection(CENTRAL_TENANT_ID), true) + ); + } + + private static UserTenantCollection buildCollection(String tenantId) { + UserTenant userTenant = new UserTenant(); + userTenant.setCentralTenantId(CENTRAL_TENANT_ID); + userTenant.setTenantId(tenantId); + return new UserTenantCollection(List.of(userTenant), 1); + } +} From 284dc2525848b6e3ed7b0578207789fd7c10524b Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Wed, 20 Nov 2024 15:28:08 +0400 Subject: [PATCH 11/35] MCBFF-12: UT refactored --- .../org/folio/circulationbff/api/BaseIT.java | 3 + .../api/CirculationBffRequestsApiTest.java | 3 - .../circulationbff/api/StaffSlipApiTest.java | 115 ++++++++++++------ .../api/StaffSlipsApiTestDataProvider.java | 81 ++++++++++++ 4 files changed, 159 insertions(+), 43 deletions(-) create mode 100644 src/test/java/org/folio/circulationbff/api/StaffSlipsApiTestDataProvider.java diff --git a/src/test/java/org/folio/circulationbff/api/BaseIT.java b/src/test/java/org/folio/circulationbff/api/BaseIT.java index b885dbd..5e2978b 100644 --- a/src/test/java/org/folio/circulationbff/api/BaseIT.java +++ b/src/test/java/org/folio/circulationbff/api/BaseIT.java @@ -44,6 +44,9 @@ @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @AutoConfigureMockMvc public class BaseIT { + protected static final String USER_TENANTS_URL = "/user-tenants"; + protected static final String CIRCULATION_SETTINGS_URL = "/circulation/settings"; + protected static final String TLR_SETTINGS_URL = "/tlr/settings"; protected static final String HEADER_TENANT = "x-okapi-tenant"; protected static final String TOKEN = "test_token"; protected static final String TENANT_ID_CONSORTIUM = "consortium"; diff --git a/src/test/java/org/folio/circulationbff/api/CirculationBffRequestsApiTest.java b/src/test/java/org/folio/circulationbff/api/CirculationBffRequestsApiTest.java index 94c2cd5..ff588fe 100644 --- a/src/test/java/org/folio/circulationbff/api/CirculationBffRequestsApiTest.java +++ b/src/test/java/org/folio/circulationbff/api/CirculationBffRequestsApiTest.java @@ -34,9 +34,6 @@ class CirculationBffRequestsApiTest extends BaseIT { private static final String ALLOWED_SERVICE_POINT_PATH = "/circulation-bff/requests/allowed" + "-service-points"; - private static final String CIRCULATION_SETTINGS_URL = "/circulation/settings"; - private static final String TLR_SETTINGS_URL = "/tlr/settings"; - private static final String USER_TENANTS_URL = "/user-tenants"; private static final String TLR_ALLOWED_SERVICE_POINT_URL = "/tlr/allowed-service-points"; private static final String CIRCULATION_ALLOWED_SERVICE_POINT_URL = "/circulation/requests" + "/allowed-service-points"; diff --git a/src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java b/src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java index 41e7691..9234f2d 100644 --- a/src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java +++ b/src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java @@ -3,24 +3,33 @@ import static com.github.tomakehurst.wiremock.client.WireMock.equalTo; import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor; import static com.github.tomakehurst.wiremock.client.WireMock.jsonResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.matching; import static com.github.tomakehurst.wiremock.client.WireMock.urlMatching; +import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo; import static com.github.tomakehurst.wiremock.client.WireMock.urlPathMatching; import static org.apache.http.HttpStatus.SC_OK; +import static org.folio.circulationbff.api.StaffSlipsApiTestDataProvider.SERVICE_POINT_ID; +import static org.folio.circulationbff.api.StaffSlipsApiTestDataProvider.buildCirculationTlrSettingsResponse; +import static org.folio.circulationbff.api.StaffSlipsApiTestDataProvider.buildStaffSlipCollection; +import static org.folio.circulationbff.api.StaffSlipsApiTestDataProvider.buildUserTenantCollection; +import static org.folio.circulationbff.api.StaffSlipsApiTestDataProvider.buildTlrSettings; +import static org.folio.circulationbff.api.StaffSlipsApiTestDataProvider.isCentralTenantToIsTlrEnabledToUrlForStaffSLipsToCircBffUrl; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; -import java.util.List; -import java.util.UUID; import java.util.stream.Stream; import org.apache.http.HttpStatus; -import org.folio.circulationbff.domain.dto.StaffSlip; +import org.folio.circulationbff.domain.dto.CirculationSettingsResponse; import org.folio.circulationbff.domain.dto.StaffSlipCollection; import org.folio.circulationbff.domain.dto.TlrSettings; +import org.folio.circulationbff.domain.dto.UserTenantCollection; +import org.folio.spring.integration.XOkapiHeaders; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; +import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import com.github.tomakehurst.wiremock.client.WireMock; @@ -29,55 +38,81 @@ import lombok.SneakyThrows; -class StaffSlipApiTest extends BaseIT{ - private static final String CIRCULATION_BFF_SEARCH_SLIPS_URL = - "/circulation-bff/search-slips/{servicePointId}"; - private static final String CIRCULATION_BFF_PICK_SLIPS_URL = - "/circulation-bff/pick-slips/{servicePointId}"; - private static final String TLR_SETTINGS_URL = "/tlr/settings"; - private static final String CIRCULATION_SEARCH_SLIPS_URL = - "/circulation/search-slips"; - private static final String CIRCULATION_PICK_SLIPS_URL = - "/circulation/pick-slips"; - private static final String TLR_SEARCH_SLIPS_URL = "/tlr/search-slips"; - private static final String TLR_PICK_SLIPS_URL = "/tlr/pick-slips"; +class StaffSlipApiTest extends BaseIT { + private static final String URL_PATTERN = "%s/%s"; + private static Stream testData() { + return isCentralTenantToIsTlrEnabledToUrlForStaffSLipsToCircBffUrl(); + } + @ParameterizedTest() - @MethodSource("urlToEcsTlrFeatureEnabled") + @MethodSource("testData") @SneakyThrows - void getStaffSlipsApiTest(String externalModuleUrl, String circulationBffUrl, - boolean isTlrEnabled) { + void getStaffSlipsApiTest(boolean isCentralTenant, boolean isTlrEnabled, String externalModuleUrl, + String circulationBffUrl) { + + var tenantId = isCentralTenant ? TENANT_ID_CONSORTIUM : TENANT_ID_COLLEGE; + StaffSlipCollection staffSlips = buildStaffSlipCollection(); - var tlrSettings = new TlrSettings(); - tlrSettings.setEcsTlrFeatureEnabled(isTlrEnabled); - var staffSlipsCollection = new StaffSlipCollection(1, List.of(new StaffSlip())); - var servicePointId = UUID.randomUUID().toString(); UrlPathPattern externalModuleUrlPattern = urlPathMatching(String.format(URL_PATTERN, - externalModuleUrl, servicePointId)); + externalModuleUrl, SERVICE_POINT_ID)); - wireMockServer.stubFor(WireMock.get(externalModuleUrlPattern) - .willReturn(jsonResponse(staffSlipsCollection, HttpStatus.SC_OK))); + mockUserTenants(buildUserTenantCollection(tenantId), tenantId); + mockTleSettings(isCentralTenant, isTlrEnabled, tenantId); + mockStaffSlips(staffSlips, externalModuleUrlPattern, tenantId); + mockPerform(circulationBffUrl, staffSlips, tenantId); - wireMockServer.stubFor(WireMock.get(urlMatching(TLR_SETTINGS_URL)) - .withHeader(HEADER_TENANT, equalTo(TENANT_ID_CONSORTIUM)) - .willReturn(jsonResponse(asJsonString(tlrSettings), SC_OK))); + wireMockServer.verify(1, getRequestedFor(externalModuleUrlPattern)); + } - mockMvc.perform(get(circulationBffUrl, servicePointId) - .headers(defaultHeaders()) - .contentType(MediaType.APPLICATION_JSON)) + @SneakyThrows + private void mockPerform(String circulationBffUrl, StaffSlipCollection staffSlips, + String tenantId) { + + HttpHeaders httpHeaders = defaultHeaders(); + httpHeaders.set(XOkapiHeaders.TENANT, tenantId); + mockMvc.perform(get(circulationBffUrl, SERVICE_POINT_ID) + .headers(httpHeaders) + .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) - .andExpect(content().json(Json.write(staffSlipsCollection))); + .andExpect(content().json(Json.write(staffSlips))); + } - wireMockServer.verify(1, getRequestedFor(externalModuleUrlPattern)); + private void mockTleSettings(boolean isCentralTenant, boolean isTlrEnabled, String tenantId) { + if (isCentralTenant) { + mockEcsTlrSettings(buildTlrSettings(isTlrEnabled), tenantId); + } else { + mockEcsTlrCirculationSettings(buildCirculationTlrSettingsResponse(isTlrEnabled), tenantId); + } + } + + private static void mockStaffSlips(StaffSlipCollection staffSlips, UrlPathPattern externalUrl, + String requesterTenantId) { + wireMockServer.stubFor(WireMock.get(externalUrl) + .withHeader(HEADER_TENANT, equalTo(requesterTenantId)) + .willReturn(jsonResponse(staffSlips, HttpStatus.SC_OK))); + } + + private void mockUserTenants(UserTenantCollection userTenants, String requesterTenantId) { + wireMockServer.stubFor(WireMock.get(urlPathEqualTo(USER_TENANTS_URL)) + .withHeader(HEADER_TENANT, equalTo(requesterTenantId)) + .withQueryParam("limit", matching("\\d*")) + .willReturn(jsonResponse(asJsonString(userTenants), SC_OK))); } - private static Stream urlToEcsTlrFeatureEnabled() { - return Stream.of( - Arguments.of(CIRCULATION_SEARCH_SLIPS_URL, CIRCULATION_BFF_SEARCH_SLIPS_URL, false), - Arguments.of(CIRCULATION_PICK_SLIPS_URL, CIRCULATION_BFF_PICK_SLIPS_URL, false), - Arguments.of(TLR_SEARCH_SLIPS_URL, CIRCULATION_BFF_SEARCH_SLIPS_URL, true), - Arguments.of(TLR_PICK_SLIPS_URL, CIRCULATION_BFF_PICK_SLIPS_URL, true) - ); + private void mockEcsTlrCirculationSettings(CirculationSettingsResponse response, + String requesterTenantId) { + + wireMockServer.stubFor(WireMock.get(urlPathEqualTo(CIRCULATION_SETTINGS_URL)) + .withHeader(HEADER_TENANT, equalTo(requesterTenantId)) + .withQueryParam("query", equalTo("name=ecsTlrFeature")) + .willReturn(jsonResponse(asJsonString(response), SC_OK))); + } + + private void mockEcsTlrSettings(TlrSettings tlrSettings, String requesterTenantId) { + wireMockServer.stubFor(WireMock.get(urlMatching(TLR_SETTINGS_URL)) + .withHeader(HEADER_TENANT, equalTo(requesterTenantId)) + .willReturn(jsonResponse(asJsonString(tlrSettings), SC_OK))); } } diff --git a/src/test/java/org/folio/circulationbff/api/StaffSlipsApiTestDataProvider.java b/src/test/java/org/folio/circulationbff/api/StaffSlipsApiTestDataProvider.java new file mode 100644 index 0000000..3893a36 --- /dev/null +++ b/src/test/java/org/folio/circulationbff/api/StaffSlipsApiTestDataProvider.java @@ -0,0 +1,81 @@ +package org.folio.circulationbff.api; + +import static org.folio.circulationbff.api.BaseIT.TENANT_ID_CONSORTIUM; + +import java.util.List; +import java.util.UUID; +import java.util.stream.Stream; + +import org.folio.circulationbff.domain.dto.CirculationSettings; +import org.folio.circulationbff.domain.dto.CirculationSettingsResponse; +import org.folio.circulationbff.domain.dto.CirculationSettingsValue; +import org.folio.circulationbff.domain.dto.StaffSlip; +import org.folio.circulationbff.domain.dto.StaffSlipCollection; +import org.folio.circulationbff.domain.dto.TlrSettings; +import org.folio.circulationbff.domain.dto.UserTenant; +import org.folio.circulationbff.domain.dto.UserTenantCollection; +import org.junit.jupiter.params.provider.Arguments; + +public class StaffSlipsApiTestDataProvider { + + private static final String CIRCULATION_BFF_SEARCH_SLIPS_URL = + "/circulation-bff/search-slips/{servicePointId}"; + private static final String CIRCULATION_BFF_PICK_SLIPS_URL = + "/circulation-bff/pick-slips/{servicePointId}"; + private static final String CIRCULATION_SEARCH_SLIPS_URL = + "/circulation/search-slips"; + private static final String CIRCULATION_PICK_SLIPS_URL = + "/circulation/pick-slips"; + private static final String TLR_SEARCH_SLIPS_URL = "/tlr/search-slips"; + private static final String TLR_PICK_SLIPS_URL = "/tlr/pick-slips"; + public static final String SERVICE_POINT_ID = UUID.randomUUID().toString(); + + public static UserTenantCollection buildUserTenantCollection(String tenantId) { + var userTenant = new UserTenant(); + userTenant.setCentralTenantId(TENANT_ID_CONSORTIUM); + userTenant.setTenantId(tenantId); + return new UserTenantCollection().addUserTenantsItem(userTenant); + } + + public static TlrSettings buildTlrSettings(boolean isTlrEnabled) { + TlrSettings tlrSettings = new TlrSettings(); + tlrSettings.setEcsTlrFeatureEnabled(isTlrEnabled); + return tlrSettings; + } + + public static CirculationSettingsResponse buildCirculationTlrSettingsResponse( + boolean isTlrEnabled) { + + var circulationSettingsResponse = new CirculationSettingsResponse(); + circulationSettingsResponse.setTotalRecords(1); + circulationSettingsResponse.setCirculationSettings(List.of( + new CirculationSettings() + .name("ecsTlrFeature") + .value(new CirculationSettingsValue().enabled(isTlrEnabled)) + )); + + return circulationSettingsResponse; + } + + public static StaffSlipCollection buildStaffSlipCollection() { + return new StaffSlipCollection(1, List.of(new StaffSlip())); + } + + public static Stream isCentralTenantToIsTlrEnabledToUrlForStaffSLipsToCircBffUrl() { + return Stream.of( + Arguments.of(false, false, CIRCULATION_SEARCH_SLIPS_URL, + CIRCULATION_BFF_SEARCH_SLIPS_URL), + Arguments.of(true, false, CIRCULATION_SEARCH_SLIPS_URL, + CIRCULATION_BFF_SEARCH_SLIPS_URL), + Arguments.of(false, false, CIRCULATION_PICK_SLIPS_URL, + CIRCULATION_BFF_PICK_SLIPS_URL), + Arguments.of(true, false, CIRCULATION_PICK_SLIPS_URL, + CIRCULATION_BFF_PICK_SLIPS_URL), + Arguments.of(false, true, TLR_SEARCH_SLIPS_URL, CIRCULATION_BFF_SEARCH_SLIPS_URL), + Arguments.of(true, true, TLR_SEARCH_SLIPS_URL, CIRCULATION_BFF_SEARCH_SLIPS_URL), + Arguments.of(false, true, TLR_PICK_SLIPS_URL, CIRCULATION_BFF_PICK_SLIPS_URL), + Arguments.of(true, true, TLR_PICK_SLIPS_URL, CIRCULATION_BFF_PICK_SLIPS_URL) + ); + } +} + From b6f9287fc6d5f8518bcf02913e3002c632fec6fe Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Wed, 20 Nov 2024 15:40:11 +0400 Subject: [PATCH 12/35] MCBFF-12: add coverage --- .../folio/circulationbff/service/UserTenantsServiceTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/test/java/org/folio/circulationbff/service/UserTenantsServiceTest.java b/src/test/java/org/folio/circulationbff/service/UserTenantsServiceTest.java index 0634726..57c9d79 100644 --- a/src/test/java/org/folio/circulationbff/service/UserTenantsServiceTest.java +++ b/src/test/java/org/folio/circulationbff/service/UserTenantsServiceTest.java @@ -42,7 +42,8 @@ void isCentralTenantIdTest(UserTenantCollection userTenantCollection, boolean ex private static Stream userTenantCollectionToExpectedValue() { return Stream.of( Arguments.of(buildCollection(TENANT_ID), false), - Arguments.of(buildCollection(CENTRAL_TENANT_ID), true) + Arguments.of(buildCollection(CENTRAL_TENANT_ID), true), + Arguments.of(null, false) ); } From a23e0f1ea91629d1009894fd524859581e7cc3f6 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Wed, 20 Nov 2024 15:56:55 +0400 Subject: [PATCH 13/35] MCBFF-12: add coverage --- .../circulationbff/service/UserTenantsServiceTest.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/test/java/org/folio/circulationbff/service/UserTenantsServiceTest.java b/src/test/java/org/folio/circulationbff/service/UserTenantsServiceTest.java index 57c9d79..05938c5 100644 --- a/src/test/java/org/folio/circulationbff/service/UserTenantsServiceTest.java +++ b/src/test/java/org/folio/circulationbff/service/UserTenantsServiceTest.java @@ -5,6 +5,7 @@ import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.when; +import java.util.Collections; import java.util.List; import java.util.stream.Stream; @@ -21,7 +22,7 @@ import org.mockito.junit.jupiter.MockitoExtension; @ExtendWith(MockitoExtension.class) -public class UserTenantsServiceTest { +class UserTenantsServiceTest { private static final String CENTRAL_TENANT_ID = "consortium"; private static final String TENANT_ID = "university"; @@ -43,7 +44,8 @@ private static Stream userTenantCollectionToExpectedValue() { return Stream.of( Arguments.of(buildCollection(TENANT_ID), false), Arguments.of(buildCollection(CENTRAL_TENANT_ID), true), - Arguments.of(null, false) + Arguments.of(null, false), + Arguments.of(new UserTenantCollection(Collections.emptyList(), 0), false) ); } From 0df71437ce87c7fa92d4e26a6d9772d8ef7debde Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Wed, 20 Nov 2024 16:00:33 +0400 Subject: [PATCH 14/35] MCBFF-12: refactored --- .../service/impl/UserTenantsServiceImpl.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/folio/circulationbff/service/impl/UserTenantsServiceImpl.java b/src/main/java/org/folio/circulationbff/service/impl/UserTenantsServiceImpl.java index dbbcaed..a210ffb 100644 --- a/src/main/java/org/folio/circulationbff/service/impl/UserTenantsServiceImpl.java +++ b/src/main/java/org/folio/circulationbff/service/impl/UserTenantsServiceImpl.java @@ -20,19 +20,19 @@ public class UserTenantsServiceImpl implements UserTenantsService { @Override public boolean isCentralTenant() { - UserTenant firstUserTenant = getFirstUserTenantOrLogFailure(); + UserTenant firstUserTenant = getFirstUserTenant(); if (firstUserTenant == null) { return false; } String centralTenantId = firstUserTenant.getCentralTenantId(); String tenantId = firstUserTenant.getTenantId(); - log.info("isCentralTenant:: centralTenantId-{}, tenantId={}", centralTenantId, + log.info("isCentralTenant:: centralTenantId={}, tenantId={}", centralTenantId, tenantId); return centralTenantId.equals(tenantId); } - private UserTenant getFirstUserTenantOrLogFailure() { + private UserTenant getFirstUserTenant() { UserTenant firstUserTenant = findFirstUserTenant(); if (firstUserTenant == null) { log.info("processUserGroupEvent: Failed to get user-tenants info"); @@ -42,7 +42,7 @@ private UserTenant getFirstUserTenantOrLogFailure() { @Override public boolean isCentralTenant(String tenantId) { - UserTenant firstUserTenant = getFirstUserTenantOrLogFailure(); + UserTenant firstUserTenant = getFirstUserTenant(); if (firstUserTenant == null) { return false; } From ea77e592fde4c50981e23068d9f00b4e626baa06 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Wed, 20 Nov 2024 16:08:30 +0400 Subject: [PATCH 15/35] MCBFF-12: refactored --- .../folio/circulationbff/service/UserTenantsServiceTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/org/folio/circulationbff/service/UserTenantsServiceTest.java b/src/test/java/org/folio/circulationbff/service/UserTenantsServiceTest.java index 05938c5..1073d34 100644 --- a/src/test/java/org/folio/circulationbff/service/UserTenantsServiceTest.java +++ b/src/test/java/org/folio/circulationbff/service/UserTenantsServiceTest.java @@ -45,7 +45,7 @@ private static Stream userTenantCollectionToExpectedValue() { Arguments.of(buildCollection(TENANT_ID), false), Arguments.of(buildCollection(CENTRAL_TENANT_ID), true), Arguments.of(null, false), - Arguments.of(new UserTenantCollection(Collections.emptyList(), 0), false) + Arguments.of(new UserTenantCollection().addUserTenantsItem(null), false) ); } From 03dd9ae4a210abbf0e11cf68fc9763542f2362d2 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Wed, 20 Nov 2024 16:16:25 +0400 Subject: [PATCH 16/35] MCBFF-12: refactored --- .../folio/circulationbff/service/UserTenantsServiceTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/org/folio/circulationbff/service/UserTenantsServiceTest.java b/src/test/java/org/folio/circulationbff/service/UserTenantsServiceTest.java index 1073d34..7a20fea 100644 --- a/src/test/java/org/folio/circulationbff/service/UserTenantsServiceTest.java +++ b/src/test/java/org/folio/circulationbff/service/UserTenantsServiceTest.java @@ -5,7 +5,6 @@ import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.when; -import java.util.Collections; import java.util.List; import java.util.stream.Stream; @@ -44,6 +43,7 @@ private static Stream userTenantCollectionToExpectedValue() { return Stream.of( Arguments.of(buildCollection(TENANT_ID), false), Arguments.of(buildCollection(CENTRAL_TENANT_ID), true), + Arguments.of(buildCollection(null), false), Arguments.of(null, false), Arguments.of(new UserTenantCollection().addUserTenantsItem(null), false) ); From 6c80bf1cf3910fa753f582dcf85f8da5074c8a25 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Thu, 21 Nov 2024 18:04:09 +0400 Subject: [PATCH 17/35] MCBFF-12: staff slips split into search and pick --- .../client/feign/CirculationClient.java | 7 +- .../client/feign/EcsTlrClient.java | 7 +- .../controller/CirculationBffController.java | 7 +- .../service/CirculationBffService.java | 7 +- .../impl/CirculationBffServiceImpl.java | 7 +- .../paths/staffSlips/pickSlips.yaml | 2 +- .../paths/staffSlips/searchSlips.yaml | 2 +- .../responses/staffSlipsResponse.yaml | 1 - .../dto/staffSlips/pickSlipCollection.yaml | 13 +++ .../dto/staffSlips/searchSlipCollection.yaml | 13 +++ .../circulationbff/api/StaffSlipApiTest.java | 95 ++++++++++++++----- .../api/StaffSlipsApiTestDataProvider.java | 38 ++++---- .../CirculationBffControllerTest.java | 19 ++-- 13 files changed, 144 insertions(+), 74 deletions(-) delete mode 100644 src/main/resources/swagger.api/responses/staffSlipsResponse.yaml create mode 100644 src/main/resources/swagger.api/schemas/dto/staffSlips/pickSlipCollection.yaml create mode 100644 src/main/resources/swagger.api/schemas/dto/staffSlips/searchSlipCollection.yaml diff --git a/src/main/java/org/folio/circulationbff/client/feign/CirculationClient.java b/src/main/java/org/folio/circulationbff/client/feign/CirculationClient.java index f11ae1d..4dc3a64 100644 --- a/src/main/java/org/folio/circulationbff/client/feign/CirculationClient.java +++ b/src/main/java/org/folio/circulationbff/client/feign/CirculationClient.java @@ -4,8 +4,9 @@ import org.folio.circulationbff.domain.dto.AllowedServicePoints; import org.folio.circulationbff.domain.dto.BffRequest; import org.folio.circulationbff.domain.dto.CirculationSettingsResponse; +import org.folio.circulationbff.domain.dto.PickSlipCollection; import org.folio.circulationbff.domain.dto.Request; -import org.folio.circulationbff.domain.dto.StaffSlipCollection; +import org.folio.circulationbff.domain.dto.SearchSlipCollection; import org.folio.spring.config.FeignClientConfiguration; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.SpringQueryMap; @@ -32,8 +33,8 @@ public interface CirculationClient { Request getRequestById(@PathVariable("requestId") String requestId); @GetMapping("/pick-slips/{servicePointId}") - StaffSlipCollection getPickSlips(@PathVariable ("servicePointId") String servicePointId); + PickSlipCollection getPickSlips(@PathVariable ("servicePointId") String servicePointId); @GetMapping("/search-slips/{servicePointId}") - StaffSlipCollection getSearchSlips(@PathVariable ("servicePointId") String servicePointId); + SearchSlipCollection getSearchSlips(@PathVariable ("servicePointId") String servicePointId); } diff --git a/src/main/java/org/folio/circulationbff/client/feign/EcsTlrClient.java b/src/main/java/org/folio/circulationbff/client/feign/EcsTlrClient.java index 1669c5c..395c935 100644 --- a/src/main/java/org/folio/circulationbff/client/feign/EcsTlrClient.java +++ b/src/main/java/org/folio/circulationbff/client/feign/EcsTlrClient.java @@ -4,7 +4,8 @@ import org.folio.circulationbff.domain.dto.AllowedServicePoints; import org.folio.circulationbff.domain.dto.BffRequest; import org.folio.circulationbff.domain.dto.EcsTlr; -import org.folio.circulationbff.domain.dto.StaffSlipCollection; +import org.folio.circulationbff.domain.dto.PickSlipCollection; +import org.folio.circulationbff.domain.dto.SearchSlipCollection; import org.folio.circulationbff.domain.dto.TlrSettings; import org.folio.spring.config.FeignClientConfiguration; import org.springframework.cloud.openfeign.FeignClient; @@ -27,8 +28,8 @@ public interface EcsTlrClient { EcsTlr createRequest(@RequestBody BffRequest request); @GetMapping("/pick-slips/{servicePointId}") - StaffSlipCollection getPickSlips(@PathVariable("servicePointId") String servicePointId); + PickSlipCollection getPickSlips(@PathVariable("servicePointId") String servicePointId); @GetMapping("/search-slips/{servicePointId}") - StaffSlipCollection getSearchSlips(@PathVariable ("servicePointId") String servicePointId); + SearchSlipCollection getSearchSlips(@PathVariable ("servicePointId") String servicePointId); } diff --git a/src/main/java/org/folio/circulationbff/controller/CirculationBffController.java b/src/main/java/org/folio/circulationbff/controller/CirculationBffController.java index 598e37c..a48f3a2 100644 --- a/src/main/java/org/folio/circulationbff/controller/CirculationBffController.java +++ b/src/main/java/org/folio/circulationbff/controller/CirculationBffController.java @@ -12,8 +12,9 @@ import org.folio.circulationbff.domain.dto.BffSearchInstance; import org.folio.circulationbff.domain.dto.EmptyBffSearchInstance; import org.folio.circulationbff.domain.dto.MediatedRequest; +import org.folio.circulationbff.domain.dto.PickSlipCollection; import org.folio.circulationbff.domain.dto.Request; -import org.folio.circulationbff.domain.dto.StaffSlipCollection; +import org.folio.circulationbff.domain.dto.SearchSlipCollection; import org.folio.circulationbff.domain.dto.UserCollection; import org.folio.circulationbff.rest.resource.CirculationBffApi; import org.folio.circulationbff.service.CirculationBffService; @@ -38,7 +39,7 @@ public class CirculationBffController implements CirculationBffApi { private final UserService userService; @Override - public ResponseEntity getPickSlips(String servicePointId) { + public ResponseEntity getPickSlips(String servicePointId) { log.info("getPickSlips:: servicePointId = {}", servicePointId); return ResponseEntity.status(HttpStatus.OK) @@ -46,7 +47,7 @@ public ResponseEntity getPickSlips(String servicePointId) { } @Override - public ResponseEntity getSearchSlips(String servicePointId) { + public ResponseEntity getSearchSlips(String servicePointId) { log.info("getSearchSlips:: servicePointId = {}", servicePointId); return ResponseEntity.status(HttpStatus.OK).body(circulationBffService diff --git a/src/main/java/org/folio/circulationbff/service/CirculationBffService.java b/src/main/java/org/folio/circulationbff/service/CirculationBffService.java index 4f78ce7..e0a91c9 100644 --- a/src/main/java/org/folio/circulationbff/service/CirculationBffService.java +++ b/src/main/java/org/folio/circulationbff/service/CirculationBffService.java @@ -3,12 +3,13 @@ import org.folio.circulationbff.domain.dto.AllowedServicePointParams; import org.folio.circulationbff.domain.dto.AllowedServicePoints; import org.folio.circulationbff.domain.dto.BffRequest; +import org.folio.circulationbff.domain.dto.PickSlipCollection; import org.folio.circulationbff.domain.dto.Request; -import org.folio.circulationbff.domain.dto.StaffSlipCollection; +import org.folio.circulationbff.domain.dto.SearchSlipCollection; public interface CirculationBffService { AllowedServicePoints getAllowedServicePoints(AllowedServicePointParams allowedServicePointParams, String tenantId); Request createRequest(BffRequest request, String tenantId); - StaffSlipCollection fetchPickSlipsByServicePointId(String servicePointId); - StaffSlipCollection fetchSearchSlipsByServicePointId(String servicePointId); + PickSlipCollection fetchPickSlipsByServicePointId(String servicePointId); + SearchSlipCollection fetchSearchSlipsByServicePointId(String servicePointId); } diff --git a/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java b/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java index 1c68386..099622a 100644 --- a/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java +++ b/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java @@ -6,8 +6,9 @@ import org.folio.circulationbff.domain.dto.AllowedServicePoints; import org.folio.circulationbff.domain.dto.BffRequest; import org.folio.circulationbff.domain.dto.EcsTlr; +import org.folio.circulationbff.domain.dto.PickSlipCollection; import org.folio.circulationbff.domain.dto.Request; -import org.folio.circulationbff.domain.dto.StaffSlipCollection; +import org.folio.circulationbff.domain.dto.SearchSlipCollection; import org.folio.circulationbff.service.CirculationBffService; import org.folio.circulationbff.service.SettingsService; import org.folio.circulationbff.service.UserTenantsService; @@ -27,7 +28,7 @@ public class CirculationBffServiceImpl implements CirculationBffService { private final UserTenantsService userTenantsService; @Override - public StaffSlipCollection fetchPickSlipsByServicePointId(String servicePointId) { + public PickSlipCollection fetchPickSlipsByServicePointId(String servicePointId) { log.info("fetchPickSlipsByServicePointId:: servicePointId: {}", servicePointId); boolean isEcsTlrFeatureEnabled = settingsService.isEcsTlrFeatureEnabled(); log.info("fetchPickSlipsByServicePointId:: isEcsTlrFeatureEnabled: {}", @@ -39,7 +40,7 @@ public StaffSlipCollection fetchPickSlipsByServicePointId(String servicePointId) } @Override - public StaffSlipCollection fetchSearchSlipsByServicePointId(String servicePointId) { + public SearchSlipCollection fetchSearchSlipsByServicePointId(String servicePointId) { log.info("fetchSearchSlipsByServicePointId:: servicePointId: {}", servicePointId); boolean isEcsTlrFeatureEnabled = settingsService.isEcsTlrFeatureEnabled(); log.info("fetchSearchSlipsByServicePointId:: isEcsTlrFeatureEnabled: {}", diff --git a/src/main/resources/swagger.api/paths/staffSlips/pickSlips.yaml b/src/main/resources/swagger.api/paths/staffSlips/pickSlips.yaml index dbf7bc0..5710a27 100644 --- a/src/main/resources/swagger.api/paths/staffSlips/pickSlips.yaml +++ b/src/main/resources/swagger.api/paths/staffSlips/pickSlips.yaml @@ -11,7 +11,7 @@ get: content: application/json: schema: - $ref: '../../responses/staffSlipsResponse.yaml' + $ref: '../../schemas/dto/staffSlips/pickSlipCollection.yaml' '404': $ref: '../../responses/notFoundResponse.yaml' '422': diff --git a/src/main/resources/swagger.api/paths/staffSlips/searchSlips.yaml b/src/main/resources/swagger.api/paths/staffSlips/searchSlips.yaml index 8483d87..44b6932 100644 --- a/src/main/resources/swagger.api/paths/staffSlips/searchSlips.yaml +++ b/src/main/resources/swagger.api/paths/staffSlips/searchSlips.yaml @@ -11,7 +11,7 @@ get: content: application/json: schema: - $ref: '../../responses/staffSlipsResponse.yaml' + $ref: '../../schemas/dto/staffSlips/searchSlipCollection.yaml' '404': $ref: '../../responses/notFoundResponse.yaml' '422': diff --git a/src/main/resources/swagger.api/responses/staffSlipsResponse.yaml b/src/main/resources/swagger.api/responses/staffSlipsResponse.yaml deleted file mode 100644 index 90c8e3b..0000000 --- a/src/main/resources/swagger.api/responses/staffSlipsResponse.yaml +++ /dev/null @@ -1 +0,0 @@ -$ref: "../schemas/dto/staffSlips/staffSlipCollection.yaml" \ No newline at end of file diff --git a/src/main/resources/swagger.api/schemas/dto/staffSlips/pickSlipCollection.yaml b/src/main/resources/swagger.api/schemas/dto/staffSlips/pickSlipCollection.yaml new file mode 100644 index 0000000..d849cba --- /dev/null +++ b/src/main/resources/swagger.api/schemas/dto/staffSlips/pickSlipCollection.yaml @@ -0,0 +1,13 @@ +description: Collection of pick slips +type: object +properties: + totalRecords: + type: integer + description: Total number of pick slips + staffSlips: + type: array + items: + $ref: "staffSlip.yaml" +required: + - totalRecords + - staffSlips \ No newline at end of file diff --git a/src/main/resources/swagger.api/schemas/dto/staffSlips/searchSlipCollection.yaml b/src/main/resources/swagger.api/schemas/dto/staffSlips/searchSlipCollection.yaml new file mode 100644 index 0000000..20e49b5 --- /dev/null +++ b/src/main/resources/swagger.api/schemas/dto/staffSlips/searchSlipCollection.yaml @@ -0,0 +1,13 @@ +description: Collection of search slips +type: object +properties: + totalRecords: + type: integer + description: Total number of search slips + staffSlips: + type: array + items: + $ref: "staffSlip.yaml" +required: + - totalRecords + - staffSlips \ No newline at end of file diff --git a/src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java b/src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java index 9234f2d..b2d176f 100644 --- a/src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java +++ b/src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java @@ -8,21 +8,26 @@ import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo; import static com.github.tomakehurst.wiremock.client.WireMock.urlPathMatching; import static org.apache.http.HttpStatus.SC_OK; +import static org.folio.circulationbff.api.StaffSlipsApiTestDataProvider.CIRCULATION_BFF_PICK_SLIPS_URL; +import static org.folio.circulationbff.api.StaffSlipsApiTestDataProvider.CIRCULATION_BFF_SEARCH_SLIPS_URL; import static org.folio.circulationbff.api.StaffSlipsApiTestDataProvider.SERVICE_POINT_ID; import static org.folio.circulationbff.api.StaffSlipsApiTestDataProvider.buildCirculationTlrSettingsResponse; -import static org.folio.circulationbff.api.StaffSlipsApiTestDataProvider.buildStaffSlipCollection; import static org.folio.circulationbff.api.StaffSlipsApiTestDataProvider.buildUserTenantCollection; import static org.folio.circulationbff.api.StaffSlipsApiTestDataProvider.buildTlrSettings; -import static org.folio.circulationbff.api.StaffSlipsApiTestDataProvider.isCentralTenantToIsTlrEnabledToUrlForStaffSLipsToCircBffUrl; +import static org.folio.circulationbff.api.StaffSlipsApiTestDataProvider.isCentralTenantToIsTlrEnabledToUrlForStaffSLipsPick; +import static org.folio.circulationbff.api.StaffSlipsApiTestDataProvider.isCentralTenantToIsTlrEnabledToUrlForStaffSLipsSearch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import java.util.List; import java.util.stream.Stream; import org.apache.http.HttpStatus; import org.folio.circulationbff.domain.dto.CirculationSettingsResponse; -import org.folio.circulationbff.domain.dto.StaffSlipCollection; +import org.folio.circulationbff.domain.dto.PickSlipCollection; +import org.folio.circulationbff.domain.dto.SearchSlipCollection; +import org.folio.circulationbff.domain.dto.StaffSlip; import org.folio.circulationbff.domain.dto.TlrSettings; import org.folio.circulationbff.domain.dto.UserTenantCollection; import org.folio.spring.integration.XOkapiHeaders; @@ -42,56 +47,88 @@ class StaffSlipApiTest extends BaseIT { private static final String URL_PATTERN = "%s/%s"; - private static Stream testData() { - return isCentralTenantToIsTlrEnabledToUrlForStaffSLipsToCircBffUrl(); + private static Stream testSearchSlipsData() { + return isCentralTenantToIsTlrEnabledToUrlForStaffSLipsSearch(); + } + + private static Stream testPickSlipsData() { + return isCentralTenantToIsTlrEnabledToUrlForStaffSLipsPick(); } @ParameterizedTest() - @MethodSource("testData") + @MethodSource("testSearchSlipsData") @SneakyThrows - void getStaffSlipsApiTest(boolean isCentralTenant, boolean isTlrEnabled, String externalModuleUrl, - String circulationBffUrl) { + void getSearchSlipsApiTest(boolean isCentralTenant, boolean isTlrEnabled, + String externalModuleUrl) { var tenantId = isCentralTenant ? TENANT_ID_CONSORTIUM : TENANT_ID_COLLEGE; - StaffSlipCollection staffSlips = buildStaffSlipCollection(); + var searchSlips = new SearchSlipCollection(1, List.of(new StaffSlip())); + var externalModuleUrlPattern = urlPathMatching(String.format(URL_PATTERN, + externalModuleUrl, SERVICE_POINT_ID)); + + mockUserTenants(buildUserTenantCollection(tenantId), tenantId); + mockTlrSettings(isCentralTenant, isTlrEnabled, tenantId); + mockSearchSlips(searchSlips, externalModuleUrlPattern, tenantId); + mockSearchSlipsPerform(searchSlips, tenantId); + + wireMockServer.verify(1, getRequestedFor(externalModuleUrlPattern)); + } + + @ParameterizedTest() + @MethodSource("testPickSlipsData") + @SneakyThrows + void getPickSlipsApiTest(boolean isCentralTenant, boolean isTlrEnabled, + String externalModuleUrl) { - UrlPathPattern externalModuleUrlPattern = urlPathMatching(String.format(URL_PATTERN, + var tenantId = isCentralTenant ? TENANT_ID_CONSORTIUM : TENANT_ID_COLLEGE; + var pickSlips = new PickSlipCollection(1, List.of(new StaffSlip())); + var externalModuleUrlPattern = urlPathMatching(String.format(URL_PATTERN, externalModuleUrl, SERVICE_POINT_ID)); mockUserTenants(buildUserTenantCollection(tenantId), tenantId); - mockTleSettings(isCentralTenant, isTlrEnabled, tenantId); - mockStaffSlips(staffSlips, externalModuleUrlPattern, tenantId); - mockPerform(circulationBffUrl, staffSlips, tenantId); + mockTlrSettings(isCentralTenant, isTlrEnabled, tenantId); + mockPickSlips(pickSlips, externalModuleUrlPattern, tenantId); + mockPickPerform(pickSlips, tenantId); wireMockServer.verify(1, getRequestedFor(externalModuleUrlPattern)); } @SneakyThrows - private void mockPerform(String circulationBffUrl, StaffSlipCollection staffSlips, - String tenantId) { + private void mockSearchSlipsPerform(SearchSlipCollection searchSlips, String tenantId) { HttpHeaders httpHeaders = defaultHeaders(); httpHeaders.set(XOkapiHeaders.TENANT, tenantId); - mockMvc.perform(get(circulationBffUrl, SERVICE_POINT_ID) + mockMvc.perform(get(CIRCULATION_BFF_SEARCH_SLIPS_URL, SERVICE_POINT_ID) .headers(httpHeaders) .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) - .andExpect(content().json(Json.write(staffSlips))); + .andExpect(content().json(Json.write(searchSlips))); } - private void mockTleSettings(boolean isCentralTenant, boolean isTlrEnabled, String tenantId) { - if (isCentralTenant) { - mockEcsTlrSettings(buildTlrSettings(isTlrEnabled), tenantId); - } else { - mockEcsTlrCirculationSettings(buildCirculationTlrSettingsResponse(isTlrEnabled), tenantId); - } + @SneakyThrows + private void mockPickPerform(PickSlipCollection pickSlips, String tenantId) { + + HttpHeaders httpHeaders = defaultHeaders(); + httpHeaders.set(XOkapiHeaders.TENANT, tenantId); + mockMvc.perform(get(CIRCULATION_BFF_PICK_SLIPS_URL, SERVICE_POINT_ID) + .headers(httpHeaders) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(content().json(Json.write(pickSlips))); + } + + private static void mockSearchSlips(SearchSlipCollection searchSlips, UrlPathPattern externalUrl, + String requesterTenantId) { + wireMockServer.stubFor(WireMock.get(externalUrl) + .withHeader(HEADER_TENANT, equalTo(requesterTenantId)) + .willReturn(jsonResponse(searchSlips, HttpStatus.SC_OK))); } - private static void mockStaffSlips(StaffSlipCollection staffSlips, UrlPathPattern externalUrl, + private static void mockPickSlips(PickSlipCollection pickSlips, UrlPathPattern externalUrl, String requesterTenantId) { wireMockServer.stubFor(WireMock.get(externalUrl) .withHeader(HEADER_TENANT, equalTo(requesterTenantId)) - .willReturn(jsonResponse(staffSlips, HttpStatus.SC_OK))); + .willReturn(jsonResponse(pickSlips, HttpStatus.SC_OK))); } private void mockUserTenants(UserTenantCollection userTenants, String requesterTenantId) { @@ -101,6 +138,14 @@ private void mockUserTenants(UserTenantCollection userTenants, String requesterT .willReturn(jsonResponse(asJsonString(userTenants), SC_OK))); } + private void mockTlrSettings(boolean isCentralTenant, boolean isTlrEnabled, String tenantId) { + if (isCentralTenant) { + mockEcsTlrSettings(buildTlrSettings(isTlrEnabled), tenantId); + } else { + mockEcsTlrCirculationSettings(buildCirculationTlrSettingsResponse(isTlrEnabled), tenantId); + } + } + private void mockEcsTlrCirculationSettings(CirculationSettingsResponse response, String requesterTenantId) { diff --git a/src/test/java/org/folio/circulationbff/api/StaffSlipsApiTestDataProvider.java b/src/test/java/org/folio/circulationbff/api/StaffSlipsApiTestDataProvider.java index 3893a36..6ff3c2a 100644 --- a/src/test/java/org/folio/circulationbff/api/StaffSlipsApiTestDataProvider.java +++ b/src/test/java/org/folio/circulationbff/api/StaffSlipsApiTestDataProvider.java @@ -9,26 +9,23 @@ import org.folio.circulationbff.domain.dto.CirculationSettings; import org.folio.circulationbff.domain.dto.CirculationSettingsResponse; import org.folio.circulationbff.domain.dto.CirculationSettingsValue; -import org.folio.circulationbff.domain.dto.StaffSlip; -import org.folio.circulationbff.domain.dto.StaffSlipCollection; import org.folio.circulationbff.domain.dto.TlrSettings; import org.folio.circulationbff.domain.dto.UserTenant; import org.folio.circulationbff.domain.dto.UserTenantCollection; import org.junit.jupiter.params.provider.Arguments; public class StaffSlipsApiTestDataProvider { - - private static final String CIRCULATION_BFF_SEARCH_SLIPS_URL = - "/circulation-bff/search-slips/{servicePointId}"; - private static final String CIRCULATION_BFF_PICK_SLIPS_URL = + public static final String CIRCULATION_BFF_PICK_SLIPS_URL = "/circulation-bff/pick-slips/{servicePointId}"; + public static final String SERVICE_POINT_ID = UUID.randomUUID().toString(); private static final String CIRCULATION_SEARCH_SLIPS_URL = "/circulation/search-slips"; private static final String CIRCULATION_PICK_SLIPS_URL = "/circulation/pick-slips"; private static final String TLR_SEARCH_SLIPS_URL = "/tlr/search-slips"; private static final String TLR_PICK_SLIPS_URL = "/tlr/pick-slips"; - public static final String SERVICE_POINT_ID = UUID.randomUUID().toString(); + public static final String CIRCULATION_BFF_SEARCH_SLIPS_URL = + "/circulation-bff/search-slips/{servicePointId}"; public static UserTenantCollection buildUserTenantCollection(String tenantId) { var userTenant = new UserTenant(); @@ -57,24 +54,21 @@ public static CirculationSettingsResponse buildCirculationTlrSettingsResponse( return circulationSettingsResponse; } - public static StaffSlipCollection buildStaffSlipCollection() { - return new StaffSlipCollection(1, List.of(new StaffSlip())); + public static Stream isCentralTenantToIsTlrEnabledToUrlForStaffSLipsPick() { + return Stream.of( + Arguments.of(false, false, CIRCULATION_PICK_SLIPS_URL), + Arguments.of(true, false, CIRCULATION_PICK_SLIPS_URL), + Arguments.of(false, true, TLR_PICK_SLIPS_URL), + Arguments.of(true, true, TLR_PICK_SLIPS_URL) + ); } - public static Stream isCentralTenantToIsTlrEnabledToUrlForStaffSLipsToCircBffUrl() { + public static Stream isCentralTenantToIsTlrEnabledToUrlForStaffSLipsSearch() { return Stream.of( - Arguments.of(false, false, CIRCULATION_SEARCH_SLIPS_URL, - CIRCULATION_BFF_SEARCH_SLIPS_URL), - Arguments.of(true, false, CIRCULATION_SEARCH_SLIPS_URL, - CIRCULATION_BFF_SEARCH_SLIPS_URL), - Arguments.of(false, false, CIRCULATION_PICK_SLIPS_URL, - CIRCULATION_BFF_PICK_SLIPS_URL), - Arguments.of(true, false, CIRCULATION_PICK_SLIPS_URL, - CIRCULATION_BFF_PICK_SLIPS_URL), - Arguments.of(false, true, TLR_SEARCH_SLIPS_URL, CIRCULATION_BFF_SEARCH_SLIPS_URL), - Arguments.of(true, true, TLR_SEARCH_SLIPS_URL, CIRCULATION_BFF_SEARCH_SLIPS_URL), - Arguments.of(false, true, TLR_PICK_SLIPS_URL, CIRCULATION_BFF_PICK_SLIPS_URL), - Arguments.of(true, true, TLR_PICK_SLIPS_URL, CIRCULATION_BFF_PICK_SLIPS_URL) + Arguments.of(false, false, CIRCULATION_SEARCH_SLIPS_URL), + Arguments.of(true, false, CIRCULATION_SEARCH_SLIPS_URL), + Arguments.of(false, true, TLR_SEARCH_SLIPS_URL), + Arguments.of(true, true, TLR_SEARCH_SLIPS_URL) ); } } diff --git a/src/test/java/org/folio/circulationbff/controller/CirculationBffControllerTest.java b/src/test/java/org/folio/circulationbff/controller/CirculationBffControllerTest.java index 97fb31d..193d699 100644 --- a/src/test/java/org/folio/circulationbff/controller/CirculationBffControllerTest.java +++ b/src/test/java/org/folio/circulationbff/controller/CirculationBffControllerTest.java @@ -20,8 +20,9 @@ import org.apache.commons.lang3.StringUtils; import org.folio.circulationbff.domain.dto.BffSearchInstance; import org.folio.circulationbff.domain.dto.MediatedRequest; +import org.folio.circulationbff.domain.dto.PickSlipCollection; +import org.folio.circulationbff.domain.dto.SearchSlipCollection; import org.folio.circulationbff.domain.dto.StaffSlip; -import org.folio.circulationbff.domain.dto.StaffSlipCollection; import org.folio.circulationbff.domain.dto.User; import org.folio.circulationbff.domain.dto.UserCollection; import org.folio.circulationbff.service.CirculationBffService; @@ -76,31 +77,31 @@ static Stream> externalUsersControllerReturnsTheSameUserCollectionAsU @ParameterizedTest @MethodSource("staffSlips") void getPickSlipsControllerReturnsSuccessResponseEntity(List staffSlips) { - StaffSlipCollection staffSlipsCollection = new StaffSlipCollection( + PickSlipCollection pickSlipsCollection = new PickSlipCollection( Objects.isNull(staffSlips) ? 0 : staffSlips.size(), staffSlips); when(circulationBffService.fetchPickSlipsByServicePointId(anyString())) - .thenReturn(staffSlipsCollection); + .thenReturn(pickSlipsCollection); - ResponseEntity actual = controller.getPickSlips(StringUtils.EMPTY); + ResponseEntity actual = controller.getPickSlips(StringUtils.EMPTY); assertThat(actual.getStatusCode(), is(HttpStatus.OK)); - assertThat(actual.getBody(), is(staffSlipsCollection)); + assertThat(actual.getBody(), is(pickSlipsCollection)); } @ParameterizedTest @MethodSource("staffSlips") void getSearchSlipsControllerReturnsSuccessResponseEntity(List staffSlips) { - StaffSlipCollection staffSlipsCollection = new StaffSlipCollection( + SearchSlipCollection searchSlipCollection = new SearchSlipCollection( Objects.isNull(staffSlips) ? 0 : staffSlips.size(), staffSlips); when(circulationBffService.fetchSearchSlipsByServicePointId(anyString())) - .thenReturn(staffSlipsCollection); + .thenReturn(searchSlipCollection); - ResponseEntity actual = controller.getSearchSlips(StringUtils.EMPTY); + ResponseEntity actual = controller.getSearchSlips(StringUtils.EMPTY); assertThat(actual.getStatusCode(), is(HttpStatus.OK)); - assertThat(actual.getBody(), is(staffSlipsCollection)); + assertThat(actual.getBody(), is(searchSlipCollection)); } private static Stream> staffSlips() { From d7bc7bb4541ead9f706fd7d5e06c9dc2915cf13a Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Thu, 21 Nov 2024 18:08:53 +0400 Subject: [PATCH 18/35] MCBFF-12: staff slips split into search and pick --- .../swagger.api/responses/staffSlipsResponse.yaml | 1 - .../schemas/dto/staffSlips/staffSlipCollection.yaml | 13 ------------- 2 files changed, 14 deletions(-) delete mode 100644 src/main/resources/swagger.api/responses/staffSlipsResponse.yaml delete mode 100644 src/main/resources/swagger.api/schemas/dto/staffSlips/staffSlipCollection.yaml diff --git a/src/main/resources/swagger.api/responses/staffSlipsResponse.yaml b/src/main/resources/swagger.api/responses/staffSlipsResponse.yaml deleted file mode 100644 index 90c8e3b..0000000 --- a/src/main/resources/swagger.api/responses/staffSlipsResponse.yaml +++ /dev/null @@ -1 +0,0 @@ -$ref: "../schemas/dto/staffSlips/staffSlipCollection.yaml" \ No newline at end of file diff --git a/src/main/resources/swagger.api/schemas/dto/staffSlips/staffSlipCollection.yaml b/src/main/resources/swagger.api/schemas/dto/staffSlips/staffSlipCollection.yaml deleted file mode 100644 index 858ffe6..0000000 --- a/src/main/resources/swagger.api/schemas/dto/staffSlips/staffSlipCollection.yaml +++ /dev/null @@ -1,13 +0,0 @@ -description: Collection of staff slips -type: object -properties: - totalRecords: - type: integer - description: Total number of staff slips - staffSlips: - type: array - items: - $ref: "staffSlip.yaml" -required: - - totalRecords - - staffSlips From b755f58a506209c81720d0ca22eecb264966edc3 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Thu, 21 Nov 2024 19:39:53 +0400 Subject: [PATCH 19/35] MCBFF-12: urls. arrays naming --- .../org/folio/circulationbff/client/feign/EcsTlrClient.java | 4 ++-- .../schemas/dto/staffSlips/pickSlipCollection.yaml | 4 ++-- .../schemas/dto/staffSlips/searchSlipCollection.yaml | 4 ++-- .../circulationbff/api/StaffSlipsApiTestDataProvider.java | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/folio/circulationbff/client/feign/EcsTlrClient.java b/src/main/java/org/folio/circulationbff/client/feign/EcsTlrClient.java index 395c935..0787f7b 100644 --- a/src/main/java/org/folio/circulationbff/client/feign/EcsTlrClient.java +++ b/src/main/java/org/folio/circulationbff/client/feign/EcsTlrClient.java @@ -27,9 +27,9 @@ public interface EcsTlrClient { @PostMapping("/ecs-tlr") EcsTlr createRequest(@RequestBody BffRequest request); - @GetMapping("/pick-slips/{servicePointId}") + @GetMapping("/staff-slips/pick-slips/{servicePointId}") PickSlipCollection getPickSlips(@PathVariable("servicePointId") String servicePointId); - @GetMapping("/search-slips/{servicePointId}") + @GetMapping("/staff-slips/search-slips/{servicePointId}") SearchSlipCollection getSearchSlips(@PathVariable ("servicePointId") String servicePointId); } diff --git a/src/main/resources/swagger.api/schemas/dto/staffSlips/pickSlipCollection.yaml b/src/main/resources/swagger.api/schemas/dto/staffSlips/pickSlipCollection.yaml index d849cba..19aee76 100644 --- a/src/main/resources/swagger.api/schemas/dto/staffSlips/pickSlipCollection.yaml +++ b/src/main/resources/swagger.api/schemas/dto/staffSlips/pickSlipCollection.yaml @@ -4,10 +4,10 @@ properties: totalRecords: type: integer description: Total number of pick slips - staffSlips: + pickSlips: type: array items: $ref: "staffSlip.yaml" required: - totalRecords - - staffSlips \ No newline at end of file + - pickSlips \ No newline at end of file diff --git a/src/main/resources/swagger.api/schemas/dto/staffSlips/searchSlipCollection.yaml b/src/main/resources/swagger.api/schemas/dto/staffSlips/searchSlipCollection.yaml index 20e49b5..ddc9629 100644 --- a/src/main/resources/swagger.api/schemas/dto/staffSlips/searchSlipCollection.yaml +++ b/src/main/resources/swagger.api/schemas/dto/staffSlips/searchSlipCollection.yaml @@ -4,10 +4,10 @@ properties: totalRecords: type: integer description: Total number of search slips - staffSlips: + searchSlips: type: array items: $ref: "staffSlip.yaml" required: - totalRecords - - staffSlips \ No newline at end of file + - searchSlips \ No newline at end of file diff --git a/src/test/java/org/folio/circulationbff/api/StaffSlipsApiTestDataProvider.java b/src/test/java/org/folio/circulationbff/api/StaffSlipsApiTestDataProvider.java index 6ff3c2a..00eef04 100644 --- a/src/test/java/org/folio/circulationbff/api/StaffSlipsApiTestDataProvider.java +++ b/src/test/java/org/folio/circulationbff/api/StaffSlipsApiTestDataProvider.java @@ -22,8 +22,8 @@ public class StaffSlipsApiTestDataProvider { "/circulation/search-slips"; private static final String CIRCULATION_PICK_SLIPS_URL = "/circulation/pick-slips"; - private static final String TLR_SEARCH_SLIPS_URL = "/tlr/search-slips"; - private static final String TLR_PICK_SLIPS_URL = "/tlr/pick-slips"; + private static final String TLR_SEARCH_SLIPS_URL = "/tlr/staff-slips/search-slips"; + private static final String TLR_PICK_SLIPS_URL = "/tlr/staff-slips/pick-slips"; public static final String CIRCULATION_BFF_SEARCH_SLIPS_URL = "/circulation-bff/search-slips/{servicePointId}"; From c4fb06493a29107b6f8834058d6aceb53430107a Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Fri, 22 Nov 2024 11:26:00 +0400 Subject: [PATCH 20/35] MCBFF-12: test data provider methods naming --- .../folio/circulationbff/api/StaffSlipApiTest.java | 14 ++++++-------- .../api/StaffSlipsApiTestDataProvider.java | 4 ++-- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java b/src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java index b2d176f..ecb8352 100644 --- a/src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java +++ b/src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java @@ -14,8 +14,6 @@ import static org.folio.circulationbff.api.StaffSlipsApiTestDataProvider.buildCirculationTlrSettingsResponse; import static org.folio.circulationbff.api.StaffSlipsApiTestDataProvider.buildUserTenantCollection; import static org.folio.circulationbff.api.StaffSlipsApiTestDataProvider.buildTlrSettings; -import static org.folio.circulationbff.api.StaffSlipsApiTestDataProvider.isCentralTenantToIsTlrEnabledToUrlForStaffSLipsPick; -import static org.folio.circulationbff.api.StaffSlipsApiTestDataProvider.isCentralTenantToIsTlrEnabledToUrlForStaffSLipsSearch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -47,16 +45,16 @@ class StaffSlipApiTest extends BaseIT { private static final String URL_PATTERN = "%s/%s"; - private static Stream testSearchSlipsData() { - return isCentralTenantToIsTlrEnabledToUrlForStaffSLipsSearch(); + private static Stream searchSlipsTestData() { + return StaffSlipsApiTestDataProvider.searchSlipsTestData(); } - private static Stream testPickSlipsData() { - return isCentralTenantToIsTlrEnabledToUrlForStaffSLipsPick(); + private static Stream pickSlipsTestData() { + return StaffSlipsApiTestDataProvider.pickSlipsTestData(); } @ParameterizedTest() - @MethodSource("testSearchSlipsData") + @MethodSource("searchSlipsTestData") @SneakyThrows void getSearchSlipsApiTest(boolean isCentralTenant, boolean isTlrEnabled, String externalModuleUrl) { @@ -75,7 +73,7 @@ void getSearchSlipsApiTest(boolean isCentralTenant, boolean isTlrEnabled, } @ParameterizedTest() - @MethodSource("testPickSlipsData") + @MethodSource("pickSlipsTestData") @SneakyThrows void getPickSlipsApiTest(boolean isCentralTenant, boolean isTlrEnabled, String externalModuleUrl) { diff --git a/src/test/java/org/folio/circulationbff/api/StaffSlipsApiTestDataProvider.java b/src/test/java/org/folio/circulationbff/api/StaffSlipsApiTestDataProvider.java index 00eef04..e37bbbd 100644 --- a/src/test/java/org/folio/circulationbff/api/StaffSlipsApiTestDataProvider.java +++ b/src/test/java/org/folio/circulationbff/api/StaffSlipsApiTestDataProvider.java @@ -54,7 +54,7 @@ public static CirculationSettingsResponse buildCirculationTlrSettingsResponse( return circulationSettingsResponse; } - public static Stream isCentralTenantToIsTlrEnabledToUrlForStaffSLipsPick() { + public static Stream pickSlipsTestData() { return Stream.of( Arguments.of(false, false, CIRCULATION_PICK_SLIPS_URL), Arguments.of(true, false, CIRCULATION_PICK_SLIPS_URL), @@ -63,7 +63,7 @@ public static Stream isCentralTenantToIsTlrEnabledToUrlForStaffSLipsP ); } - public static Stream isCentralTenantToIsTlrEnabledToUrlForStaffSLipsSearch() { + public static Stream searchSlipsTestData() { return Stream.of( Arguments.of(false, false, CIRCULATION_SEARCH_SLIPS_URL), Arguments.of(true, false, CIRCULATION_SEARCH_SLIPS_URL), From 0399a5e27d76495de2479d4bc03d6a4fec9691c4 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Fri, 22 Nov 2024 14:25:06 +0400 Subject: [PATCH 21/35] MCBFF-12: increased openapi-generator version to 7.9.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 494cecc..c6b0c67 100644 --- a/pom.xml +++ b/pom.xml @@ -28,7 +28,7 @@ 8.2.1 - 7.3.0 + 7.9.0 1.6.2 From 6421c8125b26a05928dba0d06287c582a993974e Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Fri, 22 Nov 2024 14:29:44 +0400 Subject: [PATCH 22/35] MCBFF-12: added necessary permissions --- descriptors/ModuleDescriptor-template.json | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/descriptors/ModuleDescriptor-template.json b/descriptors/ModuleDescriptor-template.json index 6ac88e8..e31871d 100644 --- a/descriptors/ModuleDescriptor-template.json +++ b/descriptors/ModuleDescriptor-template.json @@ -16,7 +16,11 @@ ], "modulePermissions": [ "tlr.pick-slips.collection.get", - "circulation.pick-slips.get" + "tlr.settings.get", + "circulation.settings.item.get", + "circulation.settings.collection.get", + "circulation.pick-slips.get", + "user-tenants.collection.get" ] } ] @@ -35,7 +39,11 @@ ], "modulePermissions": [ "tlr.search-slips.collection.get", - "circulation.search-slips.get" + "tlr.settings.get", + "circulation.settings.item.get", + "circulation.settings.collection.get", + "circulation.pick-slips.get", + "user-tenants.collection.get" ] } ] From 62647092d66191a25aa166289be817d6f7fcd1a7 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Fri, 22 Nov 2024 14:33:03 +0400 Subject: [PATCH 23/35] MCBFF-12: added necessary permissions --- descriptors/ModuleDescriptor-template.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/descriptors/ModuleDescriptor-template.json b/descriptors/ModuleDescriptor-template.json index e31871d..3997919 100644 --- a/descriptors/ModuleDescriptor-template.json +++ b/descriptors/ModuleDescriptor-template.json @@ -42,7 +42,7 @@ "tlr.settings.get", "circulation.settings.item.get", "circulation.settings.collection.get", - "circulation.pick-slips.get", + "circulation.search-slips.get", "user-tenants.collection.get" ] } From f29687cbf9bd7680e9d62ffbb2b7ba4a92ee1215 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Fri, 22 Nov 2024 14:36:38 +0400 Subject: [PATCH 24/35] MCBFF-12: user-tenants dependency as required --- descriptors/ModuleDescriptor-template.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/descriptors/ModuleDescriptor-template.json b/descriptors/ModuleDescriptor-template.json index 3997919..3c375c0 100644 --- a/descriptors/ModuleDescriptor-template.json +++ b/descriptors/ModuleDescriptor-template.json @@ -208,6 +208,10 @@ "id": "requests-mediated", "version": "2.0" }, + { + "id": "user-tenants", + "version": "1.0" + }, { "id": "users", "version": "16.0" From acff7cf7269689887d12cddd6e3b4ff9d1f76f6d Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Fri, 22 Nov 2024 15:47:23 +0400 Subject: [PATCH 25/35] MCBFF-12: decreased openapi codegen version to previous. removed proxy yaml schema --- pom.xml | 2 +- .../resources/swagger.api/paths/externalUser/externalUser.yaml | 2 +- .../resources/swagger.api/responses/externalUsersResponse.yaml | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) delete mode 100644 src/main/resources/swagger.api/responses/externalUsersResponse.yaml diff --git a/pom.xml b/pom.xml index c6b0c67..494cecc 100644 --- a/pom.xml +++ b/pom.xml @@ -28,7 +28,7 @@ 8.2.1 - 7.9.0 + 7.3.0 1.6.2 diff --git a/src/main/resources/swagger.api/paths/externalUser/externalUser.yaml b/src/main/resources/swagger.api/paths/externalUser/externalUser.yaml index 4c7bd16..1869a77 100644 --- a/src/main/resources/swagger.api/paths/externalUser/externalUser.yaml +++ b/src/main/resources/swagger.api/paths/externalUser/externalUser.yaml @@ -12,7 +12,7 @@ get: content: application/json: schema: - $ref: '../../responses/externalUsersResponse.yaml' + $ref: '../../schemas/response/userCollection.json' '404': $ref: '../../responses/notFoundResponse.yaml' '422': diff --git a/src/main/resources/swagger.api/responses/externalUsersResponse.yaml b/src/main/resources/swagger.api/responses/externalUsersResponse.yaml deleted file mode 100644 index afebfa9..0000000 --- a/src/main/resources/swagger.api/responses/externalUsersResponse.yaml +++ /dev/null @@ -1 +0,0 @@ -$ref: '../schemas/response/userCollection.json' \ No newline at end of file From 6b9f8537516583b2dcd16749c12d2253d5c15b49 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Fri, 22 Nov 2024 16:42:33 +0400 Subject: [PATCH 26/35] MCBFF-12: refactored empty lines --- .../java/org/folio/circulationbff/api/StaffSlipApiTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java b/src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java index ecb8352..a5f022c 100644 --- a/src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java +++ b/src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java @@ -93,7 +93,6 @@ void getPickSlipsApiTest(boolean isCentralTenant, boolean isTlrEnabled, @SneakyThrows private void mockSearchSlipsPerform(SearchSlipCollection searchSlips, String tenantId) { - HttpHeaders httpHeaders = defaultHeaders(); httpHeaders.set(XOkapiHeaders.TENANT, tenantId); mockMvc.perform(get(CIRCULATION_BFF_SEARCH_SLIPS_URL, SERVICE_POINT_ID) @@ -105,7 +104,6 @@ private void mockSearchSlipsPerform(SearchSlipCollection searchSlips, String ten @SneakyThrows private void mockPickPerform(PickSlipCollection pickSlips, String tenantId) { - HttpHeaders httpHeaders = defaultHeaders(); httpHeaders.set(XOkapiHeaders.TENANT, tenantId); mockMvc.perform(get(CIRCULATION_BFF_PICK_SLIPS_URL, SERVICE_POINT_ID) @@ -117,6 +115,7 @@ private void mockPickPerform(PickSlipCollection pickSlips, String tenantId) { private static void mockSearchSlips(SearchSlipCollection searchSlips, UrlPathPattern externalUrl, String requesterTenantId) { + wireMockServer.stubFor(WireMock.get(externalUrl) .withHeader(HEADER_TENANT, equalTo(requesterTenantId)) .willReturn(jsonResponse(searchSlips, HttpStatus.SC_OK))); @@ -124,6 +123,7 @@ private static void mockSearchSlips(SearchSlipCollection searchSlips, UrlPathPat private static void mockPickSlips(PickSlipCollection pickSlips, UrlPathPattern externalUrl, String requesterTenantId) { + wireMockServer.stubFor(WireMock.get(externalUrl) .withHeader(HEADER_TENANT, equalTo(requesterTenantId)) .willReturn(jsonResponse(pickSlips, HttpStatus.SC_OK))); From 076ad6798df9592ca6189a33e398a4936adbf129 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Sat, 23 Nov 2024 16:57:54 +0400 Subject: [PATCH 27/35] MCBFF-12: changed logic with routing --- .../service/SettingsService.java | 1 - .../impl/CirculationBffServiceImpl.java | 18 +- .../service/impl/SettingsServiceImpl.java | 7 - .../api/StaffSlipsApiTestDataProvider.java | 12 +- .../service/SettingServiceTest.java | 186 +++++++++--------- 5 files changed, 109 insertions(+), 115 deletions(-) diff --git a/src/main/java/org/folio/circulationbff/service/SettingsService.java b/src/main/java/org/folio/circulationbff/service/SettingsService.java index f2c6485..1c8b61d 100644 --- a/src/main/java/org/folio/circulationbff/service/SettingsService.java +++ b/src/main/java/org/folio/circulationbff/service/SettingsService.java @@ -1,6 +1,5 @@ package org.folio.circulationbff.service; public interface SettingsService { - boolean isEcsTlrFeatureEnabled(); boolean isEcsTlrFeatureEnabled(String tenantId); } diff --git a/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java b/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java index 099622a..731aade 100644 --- a/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java +++ b/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java @@ -30,11 +30,12 @@ public class CirculationBffServiceImpl implements CirculationBffService { @Override public PickSlipCollection fetchPickSlipsByServicePointId(String servicePointId) { log.info("fetchPickSlipsByServicePointId:: servicePointId: {}", servicePointId); - boolean isEcsTlrFeatureEnabled = settingsService.isEcsTlrFeatureEnabled(); - log.info("fetchPickSlipsByServicePointId:: isEcsTlrFeatureEnabled: {}", + boolean isCentralTenant = userTenantsService.isCentralTenant(); + log.info("fetchPickSlipsByServicePointId:: isCentralTenant={}", isCentralTenant); + boolean isEcsTlrFeatureEnabled = ecsTlrClient.getTlrSettings().getEcsTlrFeatureEnabled(); + log.info("fetchPickSlipsByServicePointId:: isEcsTlrFeatureEnabled from mod-tlr: {}", isEcsTlrFeatureEnabled); - - return isEcsTlrFeatureEnabled + return isCentralTenant && isEcsTlrFeatureEnabled ? ecsTlrClient.getPickSlips(servicePointId) : circulationClient.getPickSlips(servicePointId); } @@ -42,11 +43,12 @@ public PickSlipCollection fetchPickSlipsByServicePointId(String servicePointId) @Override public SearchSlipCollection fetchSearchSlipsByServicePointId(String servicePointId) { log.info("fetchSearchSlipsByServicePointId:: servicePointId: {}", servicePointId); - boolean isEcsTlrFeatureEnabled = settingsService.isEcsTlrFeatureEnabled(); - log.info("fetchSearchSlipsByServicePointId:: isEcsTlrFeatureEnabled: {}", + boolean isCentralTenant = userTenantsService.isCentralTenant(); + log.info("fetchSearchSlipsByServicePointId:: isCentralTenant={}", isCentralTenant); + boolean isEcsTlrFeatureEnabled = ecsTlrClient.getTlrSettings().getEcsTlrFeatureEnabled(); + log.info("fetchSearchSlipsByServicePointId:: isEcsTlrFeatureEnabled from mod-tlr: {}", isEcsTlrFeatureEnabled); - - return isEcsTlrFeatureEnabled + return isCentralTenant && isEcsTlrFeatureEnabled ? ecsTlrClient.getSearchSlips(servicePointId) : circulationClient.getSearchSlips(servicePointId); } diff --git a/src/main/java/org/folio/circulationbff/service/impl/SettingsServiceImpl.java b/src/main/java/org/folio/circulationbff/service/impl/SettingsServiceImpl.java index dcdec25..fe22e1f 100644 --- a/src/main/java/org/folio/circulationbff/service/impl/SettingsServiceImpl.java +++ b/src/main/java/org/folio/circulationbff/service/impl/SettingsServiceImpl.java @@ -19,13 +19,6 @@ public class SettingsServiceImpl implements SettingsService { private final CirculationClient circulationClient; private final UserTenantsService userTenantsService; - @Override - public boolean isEcsTlrFeatureEnabled() { - return userTenantsService.isCentralTenant() - ? ecsTlrClient.getTlrSettings().getEcsTlrFeatureEnabled() - : isTlrEnabledInCirculationSettings(); - } - @Override public boolean isEcsTlrFeatureEnabled(String tenantId) { if (userTenantsService.isCentralTenant(tenantId)) { diff --git a/src/test/java/org/folio/circulationbff/api/StaffSlipsApiTestDataProvider.java b/src/test/java/org/folio/circulationbff/api/StaffSlipsApiTestDataProvider.java index e37bbbd..6ea15ca 100644 --- a/src/test/java/org/folio/circulationbff/api/StaffSlipsApiTestDataProvider.java +++ b/src/test/java/org/folio/circulationbff/api/StaffSlipsApiTestDataProvider.java @@ -57,18 +57,18 @@ public static CirculationSettingsResponse buildCirculationTlrSettingsResponse( public static Stream pickSlipsTestData() { return Stream.of( Arguments.of(false, false, CIRCULATION_PICK_SLIPS_URL), - Arguments.of(true, false, CIRCULATION_PICK_SLIPS_URL), - Arguments.of(false, true, TLR_PICK_SLIPS_URL), - Arguments.of(true, true, TLR_PICK_SLIPS_URL) + Arguments.of(false, true, CIRCULATION_PICK_SLIPS_URL), + Arguments.of(true, true, TLR_PICK_SLIPS_URL), + Arguments.of(true, false, CIRCULATION_PICK_SLIPS_URL) ); } public static Stream searchSlipsTestData() { return Stream.of( Arguments.of(false, false, CIRCULATION_SEARCH_SLIPS_URL), - Arguments.of(true, false, CIRCULATION_SEARCH_SLIPS_URL), - Arguments.of(false, true, TLR_SEARCH_SLIPS_URL), - Arguments.of(true, true, TLR_SEARCH_SLIPS_URL) + Arguments.of(false, true, CIRCULATION_SEARCH_SLIPS_URL), + Arguments.of(true, true, TLR_SEARCH_SLIPS_URL), + Arguments.of(true, false, CIRCULATION_SEARCH_SLIPS_URL) ); } } diff --git a/src/test/java/org/folio/circulationbff/service/SettingServiceTest.java b/src/test/java/org/folio/circulationbff/service/SettingServiceTest.java index a4aea53..85b3b6c 100644 --- a/src/test/java/org/folio/circulationbff/service/SettingServiceTest.java +++ b/src/test/java/org/folio/circulationbff/service/SettingServiceTest.java @@ -1,93 +1,93 @@ -package org.folio.circulationbff.service; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.when; - -import java.util.stream.Stream; - -import org.folio.circulationbff.client.feign.CirculationClient; -import org.folio.circulationbff.client.feign.EcsTlrClient; -import org.folio.circulationbff.domain.dto.CirculationSettings; -import org.folio.circulationbff.domain.dto.CirculationSettingsResponse; -import org.folio.circulationbff.domain.dto.CirculationSettingsValue; -import org.folio.circulationbff.domain.dto.TlrSettings; -import org.folio.circulationbff.service.impl.SettingsServiceImpl; -import org.junit.jupiter.api.extension.ExtendWith; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.Arguments; -import org.junit.jupiter.params.provider.MethodSource; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; -import org.testcontainers.shaded.org.apache.commons.lang3.BooleanUtils; - -@ExtendWith(MockitoExtension.class) -class SettingServiceTest { - - @Mock - private EcsTlrClient ecsTlrClient; - - @Mock - private CirculationClient circulationClient; - - @Mock - private UserTenantsService userTenantsService; - - @InjectMocks - private SettingsServiceImpl service; - - @ParameterizedTest - @MethodSource("settingsToResponse") - void isEcsTlrSettingsEnabledTest(boolean isCentralTenant, TlrSettings tlrSettings, - CirculationSettingsResponse circulationSettingsResponse, boolean expectedValue) { - - when(userTenantsService.isCentralTenant()).thenReturn(isCentralTenant); - mockByIsCentralTenantId(circulationSettingsResponse, tlrSettings, isCentralTenant); - - assertThat(service.isEcsTlrFeatureEnabled(), equalTo(expectedValue)); - } - - private void mockByIsCentralTenantId(CirculationSettingsResponse circulationSettingsResponse, - TlrSettings tlrSettings, boolean isCentralTenant) { - - if (BooleanUtils.isTrue(isCentralTenant)) { - when(ecsTlrClient.getTlrSettings()).thenReturn(tlrSettings); - } else { - when(circulationClient.getCirculationSettingsByQuery(anyString())) - .thenReturn(circulationSettingsResponse); - } - } - - private static CirculationSettingsResponse buildCirculationSettingsResponse( - boolean isEcsTlrEnabled) { - - CirculationSettingsResponse circulationSettingsResponse = new CirculationSettingsResponse(); - CirculationSettings circulationSettings = new CirculationSettings(); - CirculationSettingsValue value = new CirculationSettingsValue(); - value.enabled(isEcsTlrEnabled); - circulationSettings.setValue(value); - circulationSettingsResponse.addCirculationSettingsItem(circulationSettings); - circulationSettingsResponse.setTotalRecords(1); - return circulationSettingsResponse; - } - - private static TlrSettings buildTlrSettings(boolean isTlrEnabled) { - TlrSettings tlrSettings = new TlrSettings(); - tlrSettings.setEcsTlrFeatureEnabled(isTlrEnabled); - return tlrSettings; - } - - private static Stream settingsToResponse() { - return Stream.of( - Arguments.of(true, buildTlrSettings(true), null, true), - Arguments.of(true, buildTlrSettings(false), null, false), - Arguments.of(false, null, buildCirculationSettingsResponse(true), - true), - Arguments.of(false, null, buildCirculationSettingsResponse(false), - false) - ); - } - -} +//package org.folio.circulationbff.service; +// +//import static org.hamcrest.MatcherAssert.assertThat; +//import static org.hamcrest.Matchers.equalTo; +//import static org.mockito.ArgumentMatchers.anyString; +//import static org.mockito.Mockito.when; +// +//import java.util.stream.Stream; +// +//import org.folio.circulationbff.client.feign.CirculationClient; +//import org.folio.circulationbff.client.feign.EcsTlrClient; +//import org.folio.circulationbff.domain.dto.CirculationSettings; +//import org.folio.circulationbff.domain.dto.CirculationSettingsResponse; +//import org.folio.circulationbff.domain.dto.CirculationSettingsValue; +//import org.folio.circulationbff.domain.dto.TlrSettings; +//import org.folio.circulationbff.service.impl.SettingsServiceImpl; +//import org.junit.jupiter.api.extension.ExtendWith; +//import org.junit.jupiter.params.ParameterizedTest; +//import org.junit.jupiter.params.provider.Arguments; +//import org.junit.jupiter.params.provider.MethodSource; +//import org.mockito.InjectMocks; +//import org.mockito.Mock; +//import org.mockito.junit.jupiter.MockitoExtension; +//import org.testcontainers.shaded.org.apache.commons.lang3.BooleanUtils; +// +//@ExtendWith(MockitoExtension.class) +//class SettingServiceTest { +// +// @Mock +// private EcsTlrClient ecsTlrClient; +// +// @Mock +// private CirculationClient circulationClient; +// +// @Mock +// private UserTenantsService userTenantsService; +// +// @InjectMocks +// private SettingsServiceImpl service; +// +// @ParameterizedTest +// @MethodSource("settingsToResponse") +// void isEcsTlrSettingsEnabledTest(boolean isCentralTenant, TlrSettings tlrSettings, boolean expectedValue) { +// +// when(userTenantsService.isCentralTenant()).thenReturn(isCentralTenant); +// when(ecsTlrClient.getTlrSettings()).thenReturn(tlrSettings); +//// mockByIsCentralTenantId(circulationSettingsResponse, tlrSettings, isCentralTenant); +// +// assertThat(service.isEcsTlrFeatureEnabled(isCentralTenant), equalTo(expectedValue)); +// } +// +// private void mockByIsCentralTenantId(CirculationSettingsResponse circulationSettingsResponse, +// TlrSettings tlrSettings, boolean isCentralTenant) { +// +//// if (BooleanUtils.isTrue(isCentralTenant)) { +//// when(ecsTlrClient.getTlrSettings()).thenReturn(tlrSettings); +//// } else { +//// when(circulationClient.getCirculationSettingsByQuery(anyString())) +//// .thenReturn(circulationSettingsResponse); +//// } +// } +// +// private static CirculationSettingsResponse buildCirculationSettingsResponse( +// boolean isEcsTlrEnabled) { +// +// CirculationSettingsResponse circulationSettingsResponse = new CirculationSettingsResponse(); +// CirculationSettings circulationSettings = new CirculationSettings(); +// CirculationSettingsValue value = new CirculationSettingsValue(); +// value.enabled(isEcsTlrEnabled); +// circulationSettings.setValue(value); +// circulationSettingsResponse.addCirculationSettingsItem(circulationSettings); +// circulationSettingsResponse.setTotalRecords(1); +// return circulationSettingsResponse; +// } +// +// private static TlrSettings buildTlrSettings(boolean isTlrEnabled) { +// TlrSettings tlrSettings = new TlrSettings(); +// tlrSettings.setEcsTlrFeatureEnabled(isTlrEnabled); +// return tlrSettings; +// } +// +// private static Stream settingsToResponse() { +// return Stream.of( +// Arguments.of(true, buildTlrSettings(true), true), +// Arguments.of(true, buildTlrSettings(false), false) +//// Arguments.of(false, null, buildCirculationSettingsResponse(true), +//// true), +//// Arguments.of(false, null, buildCirculationSettingsResponse(false), +//// false) +// ); +// } +// +//} From acdb4c0c12547ff830ba1f71205c5598d62ac6e1 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Sat, 23 Nov 2024 17:10:58 +0400 Subject: [PATCH 28/35] MCBFF-12: UT refactored --- .../circulationbff/api/StaffSlipApiTest.java | 23 ++----------------- 1 file changed, 2 insertions(+), 21 deletions(-) diff --git a/src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java b/src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java index a5f022c..b166acd 100644 --- a/src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java +++ b/src/test/java/org/folio/circulationbff/api/StaffSlipApiTest.java @@ -11,7 +11,6 @@ import static org.folio.circulationbff.api.StaffSlipsApiTestDataProvider.CIRCULATION_BFF_PICK_SLIPS_URL; import static org.folio.circulationbff.api.StaffSlipsApiTestDataProvider.CIRCULATION_BFF_SEARCH_SLIPS_URL; import static org.folio.circulationbff.api.StaffSlipsApiTestDataProvider.SERVICE_POINT_ID; -import static org.folio.circulationbff.api.StaffSlipsApiTestDataProvider.buildCirculationTlrSettingsResponse; import static org.folio.circulationbff.api.StaffSlipsApiTestDataProvider.buildUserTenantCollection; import static org.folio.circulationbff.api.StaffSlipsApiTestDataProvider.buildTlrSettings; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; @@ -22,7 +21,6 @@ import java.util.stream.Stream; import org.apache.http.HttpStatus; -import org.folio.circulationbff.domain.dto.CirculationSettingsResponse; import org.folio.circulationbff.domain.dto.PickSlipCollection; import org.folio.circulationbff.domain.dto.SearchSlipCollection; import org.folio.circulationbff.domain.dto.StaffSlip; @@ -65,7 +63,7 @@ void getSearchSlipsApiTest(boolean isCentralTenant, boolean isTlrEnabled, externalModuleUrl, SERVICE_POINT_ID)); mockUserTenants(buildUserTenantCollection(tenantId), tenantId); - mockTlrSettings(isCentralTenant, isTlrEnabled, tenantId); + mockEcsTlrSettings(buildTlrSettings(isTlrEnabled), tenantId); mockSearchSlips(searchSlips, externalModuleUrlPattern, tenantId); mockSearchSlipsPerform(searchSlips, tenantId); @@ -84,7 +82,7 @@ void getPickSlipsApiTest(boolean isCentralTenant, boolean isTlrEnabled, externalModuleUrl, SERVICE_POINT_ID)); mockUserTenants(buildUserTenantCollection(tenantId), tenantId); - mockTlrSettings(isCentralTenant, isTlrEnabled, tenantId); + mockEcsTlrSettings(buildTlrSettings(isTlrEnabled), tenantId); mockPickSlips(pickSlips, externalModuleUrlPattern, tenantId); mockPickPerform(pickSlips, tenantId); @@ -136,23 +134,6 @@ private void mockUserTenants(UserTenantCollection userTenants, String requesterT .willReturn(jsonResponse(asJsonString(userTenants), SC_OK))); } - private void mockTlrSettings(boolean isCentralTenant, boolean isTlrEnabled, String tenantId) { - if (isCentralTenant) { - mockEcsTlrSettings(buildTlrSettings(isTlrEnabled), tenantId); - } else { - mockEcsTlrCirculationSettings(buildCirculationTlrSettingsResponse(isTlrEnabled), tenantId); - } - } - - private void mockEcsTlrCirculationSettings(CirculationSettingsResponse response, - String requesterTenantId) { - - wireMockServer.stubFor(WireMock.get(urlPathEqualTo(CIRCULATION_SETTINGS_URL)) - .withHeader(HEADER_TENANT, equalTo(requesterTenantId)) - .withQueryParam("query", equalTo("name=ecsTlrFeature")) - .willReturn(jsonResponse(asJsonString(response), SC_OK))); - } - private void mockEcsTlrSettings(TlrSettings tlrSettings, String requesterTenantId) { wireMockServer.stubFor(WireMock.get(urlMatching(TLR_SETTINGS_URL)) .withHeader(HEADER_TENANT, equalTo(requesterTenantId)) From a34d5831e58de4c9772e39dbbf378a9f37e5188c Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Sat, 23 Nov 2024 18:04:29 +0400 Subject: [PATCH 29/35] MCBFF-12: removed unnecessary logic --- .../service/impl/CirculationBffServiceImpl.java | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java b/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java index 731aade..0d399c9 100644 --- a/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java +++ b/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java @@ -31,11 +31,7 @@ public class CirculationBffServiceImpl implements CirculationBffService { public PickSlipCollection fetchPickSlipsByServicePointId(String servicePointId) { log.info("fetchPickSlipsByServicePointId:: servicePointId: {}", servicePointId); boolean isCentralTenant = userTenantsService.isCentralTenant(); - log.info("fetchPickSlipsByServicePointId:: isCentralTenant={}", isCentralTenant); - boolean isEcsTlrFeatureEnabled = ecsTlrClient.getTlrSettings().getEcsTlrFeatureEnabled(); - log.info("fetchPickSlipsByServicePointId:: isEcsTlrFeatureEnabled from mod-tlr: {}", - isEcsTlrFeatureEnabled); - return isCentralTenant && isEcsTlrFeatureEnabled + return isCentralTenant && ecsTlrClient.getTlrSettings().getEcsTlrFeatureEnabled() ? ecsTlrClient.getPickSlips(servicePointId) : circulationClient.getPickSlips(servicePointId); } @@ -44,11 +40,7 @@ public PickSlipCollection fetchPickSlipsByServicePointId(String servicePointId) public SearchSlipCollection fetchSearchSlipsByServicePointId(String servicePointId) { log.info("fetchSearchSlipsByServicePointId:: servicePointId: {}", servicePointId); boolean isCentralTenant = userTenantsService.isCentralTenant(); - log.info("fetchSearchSlipsByServicePointId:: isCentralTenant={}", isCentralTenant); - boolean isEcsTlrFeatureEnabled = ecsTlrClient.getTlrSettings().getEcsTlrFeatureEnabled(); - log.info("fetchSearchSlipsByServicePointId:: isEcsTlrFeatureEnabled from mod-tlr: {}", - isEcsTlrFeatureEnabled); - return isCentralTenant && isEcsTlrFeatureEnabled + return isCentralTenant && ecsTlrClient.getTlrSettings().getEcsTlrFeatureEnabled() ? ecsTlrClient.getSearchSlips(servicePointId) : circulationClient.getSearchSlips(servicePointId); } From d1b0b863a3498154abc70e28e3d85a7f5a165863 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Sat, 23 Nov 2024 18:05:54 +0400 Subject: [PATCH 30/35] MCBFF-12: removed unnecessary permissions --- descriptors/ModuleDescriptor-template.json | 4 ---- 1 file changed, 4 deletions(-) diff --git a/descriptors/ModuleDescriptor-template.json b/descriptors/ModuleDescriptor-template.json index 3c375c0..b22baad 100644 --- a/descriptors/ModuleDescriptor-template.json +++ b/descriptors/ModuleDescriptor-template.json @@ -17,8 +17,6 @@ "modulePermissions": [ "tlr.pick-slips.collection.get", "tlr.settings.get", - "circulation.settings.item.get", - "circulation.settings.collection.get", "circulation.pick-slips.get", "user-tenants.collection.get" ] @@ -40,8 +38,6 @@ "modulePermissions": [ "tlr.search-slips.collection.get", "tlr.settings.get", - "circulation.settings.item.get", - "circulation.settings.collection.get", "circulation.search-slips.get", "user-tenants.collection.get" ] From c19aa99e7101567dda3f3c088ceee3e3fc1cab81 Mon Sep 17 00:00:00 2001 From: alexanderkurash Date: Sat, 23 Nov 2024 16:18:33 +0200 Subject: [PATCH 31/35] MCBFF-12 Refactor --- .../service/impl/CirculationBffServiceImpl.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java b/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java index 0d399c9..bc4015f 100644 --- a/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java +++ b/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java @@ -30,8 +30,7 @@ public class CirculationBffServiceImpl implements CirculationBffService { @Override public PickSlipCollection fetchPickSlipsByServicePointId(String servicePointId) { log.info("fetchPickSlipsByServicePointId:: servicePointId: {}", servicePointId); - boolean isCentralTenant = userTenantsService.isCentralTenant(); - return isCentralTenant && ecsTlrClient.getTlrSettings().getEcsTlrFeatureEnabled() + return shouldFetchStaffSlipsFromModTlr() ? ecsTlrClient.getPickSlips(servicePointId) : circulationClient.getPickSlips(servicePointId); } @@ -39,12 +38,21 @@ public PickSlipCollection fetchPickSlipsByServicePointId(String servicePointId) @Override public SearchSlipCollection fetchSearchSlipsByServicePointId(String servicePointId) { log.info("fetchSearchSlipsByServicePointId:: servicePointId: {}", servicePointId); - boolean isCentralTenant = userTenantsService.isCentralTenant(); - return isCentralTenant && ecsTlrClient.getTlrSettings().getEcsTlrFeatureEnabled() + return shouldFetchStaffSlipsFromModTlr() ? ecsTlrClient.getSearchSlips(servicePointId) : circulationClient.getSearchSlips(servicePointId); } + private boolean shouldFetchStaffSlipsFromModTlr() { + boolean isCentralTenant = userTenantsService.isCentralTenant(); + boolean ecsTlrFeatureIsEnabledInModTlr = false; + if (isCentralTenant) { + ecsTlrFeatureIsEnabledInModTlr = ecsTlrClient.getTlrSettings().getEcsTlrFeatureEnabled(); + } + log.info("shouldFetchStaffSlipsFromModTlr:: {}", ecsTlrFeatureIsEnabledInModTlr); + return ecsTlrFeatureIsEnabledInModTlr; + } + @Override public AllowedServicePoints getAllowedServicePoints(AllowedServicePointParams params, String tenantId) { log.info("getAllowedServicePoints:: params: {}", params); From 973fe2f6bb1e7e6f71bdb09673a961a13204249d Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Sat, 23 Nov 2024 18:30:02 +0400 Subject: [PATCH 32/35] MCBFF-12: refactored --- .../impl/CirculationBffServiceImpl.java | 20 ++-- .../service/SettingServiceTest.java | 93 ------------------- 2 files changed, 10 insertions(+), 103 deletions(-) delete mode 100644 src/test/java/org/folio/circulationbff/service/SettingServiceTest.java diff --git a/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java b/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java index bc4015f..c7e4a68 100644 --- a/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java +++ b/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java @@ -43,16 +43,6 @@ public SearchSlipCollection fetchSearchSlipsByServicePointId(String servicePoint : circulationClient.getSearchSlips(servicePointId); } - private boolean shouldFetchStaffSlipsFromModTlr() { - boolean isCentralTenant = userTenantsService.isCentralTenant(); - boolean ecsTlrFeatureIsEnabledInModTlr = false; - if (isCentralTenant) { - ecsTlrFeatureIsEnabledInModTlr = ecsTlrClient.getTlrSettings().getEcsTlrFeatureEnabled(); - } - log.info("shouldFetchStaffSlipsFromModTlr:: {}", ecsTlrFeatureIsEnabledInModTlr); - return ecsTlrFeatureIsEnabledInModTlr; - } - @Override public AllowedServicePoints getAllowedServicePoints(AllowedServicePointParams params, String tenantId) { log.info("getAllowedServicePoints:: params: {}", params); @@ -79,4 +69,14 @@ public Request createRequest(BffRequest request, String tenantId) { return circulationClient.createRequest(request); } } + + private boolean shouldFetchStaffSlipsFromModTlr() { + boolean isCentralTenant = userTenantsService.isCentralTenant(); + boolean ecsTlrFeatureIsEnabledInModTlr = false; + if (isCentralTenant) { + ecsTlrFeatureIsEnabledInModTlr = ecsTlrClient.getTlrSettings().getEcsTlrFeatureEnabled(); + } + log.info("shouldFetchStaffSlipsFromModTlr:: {}", ecsTlrFeatureIsEnabledInModTlr); + return ecsTlrFeatureIsEnabledInModTlr; + } } diff --git a/src/test/java/org/folio/circulationbff/service/SettingServiceTest.java b/src/test/java/org/folio/circulationbff/service/SettingServiceTest.java deleted file mode 100644 index 85b3b6c..0000000 --- a/src/test/java/org/folio/circulationbff/service/SettingServiceTest.java +++ /dev/null @@ -1,93 +0,0 @@ -//package org.folio.circulationbff.service; -// -//import static org.hamcrest.MatcherAssert.assertThat; -//import static org.hamcrest.Matchers.equalTo; -//import static org.mockito.ArgumentMatchers.anyString; -//import static org.mockito.Mockito.when; -// -//import java.util.stream.Stream; -// -//import org.folio.circulationbff.client.feign.CirculationClient; -//import org.folio.circulationbff.client.feign.EcsTlrClient; -//import org.folio.circulationbff.domain.dto.CirculationSettings; -//import org.folio.circulationbff.domain.dto.CirculationSettingsResponse; -//import org.folio.circulationbff.domain.dto.CirculationSettingsValue; -//import org.folio.circulationbff.domain.dto.TlrSettings; -//import org.folio.circulationbff.service.impl.SettingsServiceImpl; -//import org.junit.jupiter.api.extension.ExtendWith; -//import org.junit.jupiter.params.ParameterizedTest; -//import org.junit.jupiter.params.provider.Arguments; -//import org.junit.jupiter.params.provider.MethodSource; -//import org.mockito.InjectMocks; -//import org.mockito.Mock; -//import org.mockito.junit.jupiter.MockitoExtension; -//import org.testcontainers.shaded.org.apache.commons.lang3.BooleanUtils; -// -//@ExtendWith(MockitoExtension.class) -//class SettingServiceTest { -// -// @Mock -// private EcsTlrClient ecsTlrClient; -// -// @Mock -// private CirculationClient circulationClient; -// -// @Mock -// private UserTenantsService userTenantsService; -// -// @InjectMocks -// private SettingsServiceImpl service; -// -// @ParameterizedTest -// @MethodSource("settingsToResponse") -// void isEcsTlrSettingsEnabledTest(boolean isCentralTenant, TlrSettings tlrSettings, boolean expectedValue) { -// -// when(userTenantsService.isCentralTenant()).thenReturn(isCentralTenant); -// when(ecsTlrClient.getTlrSettings()).thenReturn(tlrSettings); -//// mockByIsCentralTenantId(circulationSettingsResponse, tlrSettings, isCentralTenant); -// -// assertThat(service.isEcsTlrFeatureEnabled(isCentralTenant), equalTo(expectedValue)); -// } -// -// private void mockByIsCentralTenantId(CirculationSettingsResponse circulationSettingsResponse, -// TlrSettings tlrSettings, boolean isCentralTenant) { -// -//// if (BooleanUtils.isTrue(isCentralTenant)) { -//// when(ecsTlrClient.getTlrSettings()).thenReturn(tlrSettings); -//// } else { -//// when(circulationClient.getCirculationSettingsByQuery(anyString())) -//// .thenReturn(circulationSettingsResponse); -//// } -// } -// -// private static CirculationSettingsResponse buildCirculationSettingsResponse( -// boolean isEcsTlrEnabled) { -// -// CirculationSettingsResponse circulationSettingsResponse = new CirculationSettingsResponse(); -// CirculationSettings circulationSettings = new CirculationSettings(); -// CirculationSettingsValue value = new CirculationSettingsValue(); -// value.enabled(isEcsTlrEnabled); -// circulationSettings.setValue(value); -// circulationSettingsResponse.addCirculationSettingsItem(circulationSettings); -// circulationSettingsResponse.setTotalRecords(1); -// return circulationSettingsResponse; -// } -// -// private static TlrSettings buildTlrSettings(boolean isTlrEnabled) { -// TlrSettings tlrSettings = new TlrSettings(); -// tlrSettings.setEcsTlrFeatureEnabled(isTlrEnabled); -// return tlrSettings; -// } -// -// private static Stream settingsToResponse() { -// return Stream.of( -// Arguments.of(true, buildTlrSettings(true), true), -// Arguments.of(true, buildTlrSettings(false), false) -//// Arguments.of(false, null, buildCirculationSettingsResponse(true), -//// true), -//// Arguments.of(false, null, buildCirculationSettingsResponse(false), -//// false) -// ); -// } -// -//} From dcd829860492e7b187762577b3a23de8c848115a Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Sat, 23 Nov 2024 19:22:06 +0400 Subject: [PATCH 33/35] MCBFF-12: turned on feign logging --- src/main/resources/application.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 06cbd8c..992ae61 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -33,6 +33,10 @@ folio: password: ${SYSTEM_USER_PASSWORD:mod-circulation-bff} lastname: System permissionsFilePath: permissions/mod-circulation-bff.csv + logging: + feign: + enabled: true + level: full management: endpoints: web: From 6e2065bf416eb9696ce1f26ce2ac6618c6631074 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Sun, 24 Nov 2024 13:47:34 +0400 Subject: [PATCH 34/35] MCBFF-12: test logging --- .../impl/CirculationBffServiceImpl.java | 28 +++++++++++++++---- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java b/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java index c7e4a68..2c773dd 100644 --- a/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java +++ b/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java @@ -30,17 +30,33 @@ public class CirculationBffServiceImpl implements CirculationBffService { @Override public PickSlipCollection fetchPickSlipsByServicePointId(String servicePointId) { log.info("fetchPickSlipsByServicePointId:: servicePointId: {}", servicePointId); - return shouldFetchStaffSlipsFromModTlr() - ? ecsTlrClient.getPickSlips(servicePointId) - : circulationClient.getPickSlips(servicePointId); + PickSlipCollection pickSlips = null; + if(shouldFetchStaffSlipsFromModTlr()) { + log.info("fetchPickSlipsByServicePointId:: BEFORE TLR CLIENT client; pickSlips: {}", pickSlips); + pickSlips = ecsTlrClient.getPickSlips(servicePointId); + log.info("fetchPickSlipsByServicePointId:: AFTER TLR CLIENT client; pickSlips: {}", pickSlips); + } else { + log.info("fetchPickSlipsByServicePointId:: BEFORE CIRCULATION CLIENT client; pickSlips: {}", pickSlips); + pickSlips = ecsTlrClient.getPickSlips(servicePointId); + log.info("fetchPickSlipsByServicePointId:: AFTER CIRCULATION CLIENT client; pickSlips: {}", pickSlips); + } + return pickSlips; } @Override public SearchSlipCollection fetchSearchSlipsByServicePointId(String servicePointId) { log.info("fetchSearchSlipsByServicePointId:: servicePointId: {}", servicePointId); - return shouldFetchStaffSlipsFromModTlr() - ? ecsTlrClient.getSearchSlips(servicePointId) - : circulationClient.getSearchSlips(servicePointId); + SearchSlipCollection searchSlips = null; + if(shouldFetchStaffSlipsFromModTlr()) { + log.info("fetchSearchSlipsByServicePointId:: BEFORE TLR CLIENT client; searchSlips: {}", searchSlips); + searchSlips = ecsTlrClient.getSearchSlips(servicePointId); + log.info("fetchSearchSlipsByServicePointId:: AFTER TLR CLIENT client; searchSlips: {}", searchSlips); + } else { + log.info("fetchSearchSlipsByServicePointId:: BEFORE CIRCULATION CLIENT client; searchSlips: {}", searchSlips); + searchSlips = ecsTlrClient.getSearchSlips(servicePointId); + log.info("fetchSearchSlipsByServicePointId:: AFTER CIRCULATION CLIENT client; searchSlips: {}", searchSlips); + } + return searchSlips; } @Override From 1cbbd1e9af0a6ceaffc7bd0144836c87c5366723 Mon Sep 17 00:00:00 2001 From: Antony_Hruschev Date: Mon, 25 Nov 2024 05:28:12 +0400 Subject: [PATCH 35/35] MCBFF-12: circ client --- .../service/impl/CirculationBffServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java b/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java index 2c773dd..55697a3 100644 --- a/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java +++ b/src/main/java/org/folio/circulationbff/service/impl/CirculationBffServiceImpl.java @@ -37,7 +37,7 @@ public PickSlipCollection fetchPickSlipsByServicePointId(String servicePointId) log.info("fetchPickSlipsByServicePointId:: AFTER TLR CLIENT client; pickSlips: {}", pickSlips); } else { log.info("fetchPickSlipsByServicePointId:: BEFORE CIRCULATION CLIENT client; pickSlips: {}", pickSlips); - pickSlips = ecsTlrClient.getPickSlips(servicePointId); + pickSlips = circulationClient.getPickSlips(servicePointId); log.info("fetchPickSlipsByServicePointId:: AFTER CIRCULATION CLIENT client; pickSlips: {}", pickSlips); } return pickSlips; @@ -53,7 +53,7 @@ public SearchSlipCollection fetchSearchSlipsByServicePointId(String servicePoint log.info("fetchSearchSlipsByServicePointId:: AFTER TLR CLIENT client; searchSlips: {}", searchSlips); } else { log.info("fetchSearchSlipsByServicePointId:: BEFORE CIRCULATION CLIENT client; searchSlips: {}", searchSlips); - searchSlips = ecsTlrClient.getSearchSlips(servicePointId); + searchSlips = circulationClient.getSearchSlips(servicePointId); log.info("fetchSearchSlipsByServicePointId:: AFTER CIRCULATION CLIENT client; searchSlips: {}", searchSlips); } return searchSlips;