From 44950de59f0ecd9715735b933f9c6ba85fbb54fb Mon Sep 17 00:00:00 2001 From: RiccardoGiuliani Date: Thu, 18 Apr 2024 12:36:40 +0200 Subject: [PATCH 1/3] Created controller and service for delete terminal --- .../mil/resource/TerminalResource.java | 55 +++++++++++ .../swclient/mil/service/TerminalService.java | 29 ++++++ .../pagopa/swclient/mil/util/ErrorCodes.java | 3 + .../swclient/mil/TerminalResourceTest.java | 94 +++++++++++++++++++ .../mil/service/TerminalServiceTest.java | 38 ++++++++ 5 files changed, 219 insertions(+) diff --git a/src/main/java/it/pagopa/swclient/mil/resource/TerminalResource.java b/src/main/java/it/pagopa/swclient/mil/resource/TerminalResource.java index 9b9871a..88350a6 100644 --- a/src/main/java/it/pagopa/swclient/mil/resource/TerminalResource.java +++ b/src/main/java/it/pagopa/swclient/mil/resource/TerminalResource.java @@ -124,4 +124,59 @@ public Uni getTerminals( }); }); } + + @DELETE + @Path("/{terminalUuid}") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + @RolesAllowed({"pos_service_provider"}) + public Uni deleteTerminal( + @HeaderParam("RequestId") @NotNull(message = ErrorCodes.ERROR_REQUESTID_MUST_NOT_BE_NULL_MSG) @Pattern(regexp = RegexPatterns.REQUEST_ID_PATTERN) String requestId, + @PathParam(value = "terminalUuid") String terminalUuid) { + + Log.debugf("TerminalResource -> deleteTerminal - Input requestId, terminalUuid: %s, %s", requestId, terminalUuid); + + String serviceProviderId = jwt.getSubject(); + + return terminalService.findTerminal(serviceProviderId, terminalUuid) + .onFailure() + .transform(err -> { + Log.errorf(err, "TerminalResource -> deleteTerminal: error during search terminal with terminalUuid, serviceProviderId: [%s, %s]", terminalUuid, serviceProviderId); + + return new InternalServerErrorException(Response + .status(Response.Status.INTERNAL_SERVER_ERROR) + .entity(new Errors(ErrorCodes.ERROR_GENERIC_FROM_DB, ErrorCodes.ERROR_GENERIC_FROM_DB_MSG)) + .build()); + }) + .onItem() + .transformToUni(terminalEntity -> { + if (terminalEntity == null) { + Log.errorf("TerminalResource -> deleteTerminal: error 404 during searching terminal with terminalUuid, serviceProviderId: [%s, %s]", terminalUuid, serviceProviderId); + + return Uni.createFrom().failure(new NotFoundException(Response + .status(Response.Status.NOT_FOUND) + .entity(new Errors(ErrorCodes.ERROR_TERMINAL_NOT_FOUND, ErrorCodes.ERROR_TERMINAL_NOT_FOUND_MSG)) + .build())); + } + + return terminalService.deleteTerminal(terminalEntity) + .onFailure() + .transform(err -> { + Log.errorf(err, "TerminalResource -> deleteTerminal: error during deleting terminal [%s]", terminalEntity); + + return new InternalServerErrorException(Response + .status(Response.Status.INTERNAL_SERVER_ERROR) + .entity(new Errors(ErrorCodes.ERROR_GENERIC_FROM_DB, ErrorCodes.ERROR_GENERIC_FROM_DB_MSG)) + .build()); + }) + .onItem() + .transform(terminalUpdated -> { + Log.debugf("TerminalResource -> deleteTerminal: terminal deleted correctly on DB [%s]", terminalUpdated); + + return Response + .status(Response.Status.NO_CONTENT) + .build(); + }); + }); + } } diff --git a/src/main/java/it/pagopa/swclient/mil/service/TerminalService.java b/src/main/java/it/pagopa/swclient/mil/service/TerminalService.java index f409090..71893cd 100644 --- a/src/main/java/it/pagopa/swclient/mil/service/TerminalService.java +++ b/src/main/java/it/pagopa/swclient/mil/service/TerminalService.java @@ -83,4 +83,33 @@ private TerminalEntity createTerminalEntity(TerminalDto terminalDto, String serv .terminal(terminal) .build(); } + + /** + * Find first terminal equals to serviceProviderId and terminalUuid given in input. + * + * @param serviceProviderId service provider id + * @param terminalUuid uuid of terminal + * @return terminal founded + */ + public Uni findTerminal(String serviceProviderId, String terminalUuid) { + + return terminalRepository + .find("serviceProviderId = ?1 and _id = ?2", serviceProviderId, terminalUuid) + .firstResult(); + } + + /** + * Update terminal starting from a terminalDto. + * + * @param terminal terminal to be deleted + * @return void + */ + public Uni deleteTerminal(TerminalEntity terminal) { + + return terminalRepository.delete(terminal) + .onFailure() + .transform(error -> error) + .onItem() + .transform(terminalDeleted -> terminalDeleted); + } } diff --git a/src/main/java/it/pagopa/swclient/mil/util/ErrorCodes.java b/src/main/java/it/pagopa/swclient/mil/util/ErrorCodes.java index fa8d917..f832030 100644 --- a/src/main/java/it/pagopa/swclient/mil/util/ErrorCodes.java +++ b/src/main/java/it/pagopa/swclient/mil/util/ErrorCodes.java @@ -35,6 +35,7 @@ private ErrorCodes() { public static final String ERROR_GENERIC_FROM_DB = MODULE_ID + "000201"; public static final String ERROR_COUNTING_TERMINALS = MODULE_ID + "000202"; public static final String ERROR_LIST_TERMINALS = MODULE_ID + "000203"; + public static final String ERROR_TERMINAL_NOT_FOUND = MODULE_ID + "000204"; @@ -59,6 +60,7 @@ private ErrorCodes() { private static final String ERROR_GENERIC_FROM_DB_DESCR = "unexpected error from db"; private static final String ERROR_COUNTING_TERMINALS_DESCR = "error occurred while counting terminal"; private static final String ERROR_LIST_TERMINALS_DESCR = "error occurred while retrieving list of paginated terminals"; + private static final String ERROR_TERMINAL_NOT_FOUND_DESCR = "terminal not founded on db"; @@ -83,5 +85,6 @@ private ErrorCodes() { public static final String ERROR_GENERIC_FROM_DB_MSG = "[" + ERROR_GENERIC_FROM_DB + "] " + ERROR_GENERIC_FROM_DB_DESCR; public static final String ERROR_COUNTING_TERMINALS_MSG = "[" + ERROR_COUNTING_TERMINALS + "] " + ERROR_COUNTING_TERMINALS_DESCR; public static final String ERROR_LIST_TERMINALS_MSG = "[" + ERROR_LIST_TERMINALS + "] " + ERROR_LIST_TERMINALS_DESCR; + public static final String ERROR_TERMINAL_NOT_FOUND_MSG = "[" + ERROR_TERMINAL_NOT_FOUND + "] " + ERROR_TERMINAL_NOT_FOUND_DESCR; } diff --git a/src/test/java/it/pagopa/swclient/mil/TerminalResourceTest.java b/src/test/java/it/pagopa/swclient/mil/TerminalResourceTest.java index 909a808..061c1aa 100644 --- a/src/test/java/it/pagopa/swclient/mil/TerminalResourceTest.java +++ b/src/test/java/it/pagopa/swclient/mil/TerminalResourceTest.java @@ -214,4 +214,98 @@ void testGetTerminalsEndpoint_500TLP() { Assertions.assertEquals(500, response.statusCode()); } + @Test + @TestSecurity(user = "testUser", roles = {"pos_service_provider"}) + @JwtSecurity(claims = { + @Claim(key = "sub", value = "1234567890") + }) + void testDeleteTerminal_204() { + Mockito.when(terminalService.findTerminal(any(String.class), any(String.class))) + .thenReturn(Uni.createFrom().item(terminalEntity)); + + Mockito.when(terminalService.deleteTerminal(any(TerminalEntity.class))) + .thenReturn(Uni.createFrom().voidItem()); + + Response response = given() + .contentType(ContentType.JSON) + .header("RequestId", "1a2b3c4d-5e6f-789a-bcde-f0123456789a") + .and() + .when() + .delete("/d43d21a5-f8a7-4a68-8320-60b8f342c4aa") + .then() + .extract().response(); + + Assertions.assertEquals(204, response.statusCode()); + } + + @Test + @TestSecurity(user = "testUser", roles = {"pos_service_provider"}) + @JwtSecurity(claims = { + @Claim(key = "sub", value = "1234567890") + }) + void testDeleteTerminal_404() { + terminalEntity = null; + Mockito.when(terminalService.findTerminal(any(String.class), any(String.class))) + .thenReturn(Uni.createFrom().item(terminalEntity)); + + Response response = given() + .contentType(ContentType.JSON) + .header("RequestId", "1a2b3c4d-5e6f-789a-bcde-f0123456789a") + .and() + .body(terminalDto) + .when() + .delete("/d43d21a5-f8a7-4a68-8320-60b8f342c4aa") + .then() + .extract().response(); + + terminalEntity = TerminalTestData.getCorrectTerminalEntity(); + Assertions.assertEquals(404, response.statusCode()); + } + + @Test + @TestSecurity(user = "testUser", roles = {"pos_service_provider"}) + @JwtSecurity(claims = { + @Claim(key = "sub", value = "1234567890") + }) + void testDeleteTerminal_500FT() { + Mockito.when(terminalService.findTerminal(any(String.class), any(String.class))) + .thenReturn(Uni.createFrom().failure(new WebApplicationException())); + + Response response = given() + .contentType(ContentType.JSON) + .header("RequestId", "1a2b3c4d-5e6f-789a-bcde-f0123456789a") + .and() + .body(terminalDto) + .when() + .delete("/d43d21a5-f8a7-4a68-8320-60b8f342c4aa") + .then() + .extract().response(); + + Assertions.assertEquals(500, response.statusCode()); + } + + @Test + @TestSecurity(user = "testUser", roles = {"pos_service_provider"}) + @JwtSecurity(claims = { + @Claim(key = "sub", value = "1234567890") + }) + void testDeleteTerminal_500UT() { + Mockito.when(terminalService.findTerminal(any(String.class), any(String.class))) + .thenReturn(Uni.createFrom().item(terminalEntity)); + + Mockito.when(terminalService.deleteTerminal(any(TerminalEntity.class))) + .thenReturn(Uni.createFrom().failure(new WebApplicationException())); + + Response response = given() + .contentType(ContentType.JSON) + .header("RequestId", "1a2b3c4d-5e6f-789a-bcde-f0123456789a") + .and() + .body(terminalDto) + .when() + .delete("/d43d21a5-f8a7-4a68-8320-60b8f342c4aa") + .then() + .extract().response(); + + Assertions.assertEquals(500, response.statusCode()); + } } \ No newline at end of file diff --git a/src/test/java/it/pagopa/swclient/mil/service/TerminalServiceTest.java b/src/test/java/it/pagopa/swclient/mil/service/TerminalServiceTest.java index 8deea48..352c30c 100644 --- a/src/test/java/it/pagopa/swclient/mil/service/TerminalServiceTest.java +++ b/src/test/java/it/pagopa/swclient/mil/service/TerminalServiceTest.java @@ -12,6 +12,7 @@ import it.pagopa.swclient.mil.dao.TerminalEntity; import it.pagopa.swclient.mil.dao.TerminalRepository; import it.pagopa.swclient.mil.util.TerminalTestData; +import jakarta.ws.rs.WebApplicationException; import org.bson.BsonDocument; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; @@ -99,6 +100,43 @@ void whenGetTerminalCountThenSuccess() { .assertItem(10L); } + @Test + void testFindTerminal_Success() { + ReactivePanacheQuery query = Mockito.mock(ReactivePanacheQuery.class); + Mockito.when(query.firstResult()).thenReturn(Uni.createFrom().item(terminalEntity)); + Mockito.when(terminalRepository.find("serviceProviderId = ?1 and _id = ?2", "serviceProviderId", "terminalUuid")).thenReturn(query); + + Uni terminalEntityUni = terminalService.findTerminal("serviceProviderId", "terminalUuid"); + + terminalEntityUni + .subscribe() + .withSubscriber(UniAssertSubscriber.create()) + .assertItem(terminalEntity); + } + + @Test + void testDeleteTerminal_Success() { + Mockito.when(terminalRepository.delete(any(TerminalEntity.class))) + .thenReturn(Uni.createFrom().voidItem()); + + Uni result = terminalService.deleteTerminal(terminalEntity); + + result.subscribe() + .with(Assertions::assertNull); + } + + @Test + void testDeleteTerminal_Failure() { + Mockito.when(terminalRepository.delete(any(TerminalEntity.class))) + .thenReturn(Uni.createFrom().failure(new WebApplicationException())); + + Uni result = terminalService.deleteTerminal(terminalEntity); + + result.subscribe() + .withSubscriber(UniAssertSubscriber.create()) + .assertFailedWith(WebApplicationException.class); + } + private List mockedList() { return List.of( TerminalEntity.builder() From 6f8e2aac08da3a608cb1cb6b66c48136af0964b8 Mon Sep 17 00:00:00 2001 From: RiccardoGiuliani Date: Wed, 24 Apr 2024 14:57:04 +0200 Subject: [PATCH 2/3] Merged main --- .../swclient/mil/service/TerminalService.java | 14 -------------- .../mil/service/TerminalServiceTest.java | 16 ---------------- 2 files changed, 30 deletions(-) diff --git a/src/main/java/it/pagopa/swclient/mil/service/TerminalService.java b/src/main/java/it/pagopa/swclient/mil/service/TerminalService.java index 6c21fb2..5d3db18 100644 --- a/src/main/java/it/pagopa/swclient/mil/service/TerminalService.java +++ b/src/main/java/it/pagopa/swclient/mil/service/TerminalService.java @@ -120,20 +120,6 @@ private TerminalEntity createTerminalEntity(TerminalDto terminalDto, String serv return terminalEntity; } - /** - * Find first terminal equals to serviceProviderId and terminalUuid given in input. - * - * @param serviceProviderId service provider id - * @param terminalUuid uuid of terminal - * @return terminal founded - */ - public Uni findTerminal(String serviceProviderId, String terminalUuid) { - - return terminalRepository - .find("serviceProviderId = ?1 and _id = ?2", serviceProviderId, terminalUuid) - .firstResult(); - } - /** * Update terminal starting from a terminalDto. * diff --git a/src/test/java/it/pagopa/swclient/mil/service/TerminalServiceTest.java b/src/test/java/it/pagopa/swclient/mil/service/TerminalServiceTest.java index 9449c4a..bf2380e 100644 --- a/src/test/java/it/pagopa/swclient/mil/service/TerminalServiceTest.java +++ b/src/test/java/it/pagopa/swclient/mil/service/TerminalServiceTest.java @@ -134,22 +134,6 @@ void testUpdateTerminal_Failure() { .assertFailedWith(WebApplicationException.class); } - - - @Test - void testFindTerminal_Success() { - ReactivePanacheQuery query = Mockito.mock(ReactivePanacheQuery.class); - Mockito.when(query.firstResult()).thenReturn(Uni.createFrom().item(terminalEntity)); - Mockito.when(terminalRepository.find("serviceProviderId = ?1 and _id = ?2", "serviceProviderId", "terminalUuid")).thenReturn(query); - - Uni terminalEntityUni = terminalService.findTerminal("serviceProviderId", "terminalUuid"); - - terminalEntityUni - .subscribe() - .withSubscriber(UniAssertSubscriber.create()) - .assertItem(terminalEntity); - } - @Test void testDeleteTerminal_Success() { Mockito.when(terminalRepository.delete(any(TerminalEntity.class))) From f46ce6a3d91cdf5608f9b58b5c3c1669740f794b Mon Sep 17 00:00:00 2001 From: RiccardoGiuliani Date: Thu, 2 May 2024 14:17:30 +0200 Subject: [PATCH 3/3] Fix typo --- src/main/java/it/pagopa/swclient/mil/util/ErrorCodes.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/it/pagopa/swclient/mil/util/ErrorCodes.java b/src/main/java/it/pagopa/swclient/mil/util/ErrorCodes.java index f832030..7089733 100644 --- a/src/main/java/it/pagopa/swclient/mil/util/ErrorCodes.java +++ b/src/main/java/it/pagopa/swclient/mil/util/ErrorCodes.java @@ -60,7 +60,7 @@ private ErrorCodes() { private static final String ERROR_GENERIC_FROM_DB_DESCR = "unexpected error from db"; private static final String ERROR_COUNTING_TERMINALS_DESCR = "error occurred while counting terminal"; private static final String ERROR_LIST_TERMINALS_DESCR = "error occurred while retrieving list of paginated terminals"; - private static final String ERROR_TERMINAL_NOT_FOUND_DESCR = "terminal not founded on db"; + private static final String ERROR_TERMINAL_NOT_FOUND_DESCR = "terminal not found on db";