diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/OnboardingController.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/OnboardingController.java index ad15324ac..a4cd07668 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/OnboardingController.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/OnboardingController.java @@ -134,10 +134,12 @@ public Uni getOnboardingWithFilter(@QueryParam(value = "p return onboardingService.onboardingGet(productId, taxCode, status, from, to, page, size); } + @Operation(summary = "Perform reject operation of an onboarding request receiving onboarding id." + + "Function change status to REJECT for an onboarding request that is not COMPLETED. " ) @PUT - @Path("/{onboardingId}/delete") + @Path("/{onboardingId}/reject") public Uni delete(@PathParam(value = "onboardingId") String onboardingId) { - return onboardingService.deleteOnboarding(onboardingId) + return onboardingService.rejectOnboarding(onboardingId) .map(ignore -> Response .status(HttpStatus.SC_NO_CONTENT) .build()); diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingService.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingService.java index 18ff9afc7..96ff3ca4a 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingService.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingService.java @@ -28,7 +28,7 @@ public interface OnboardingService { Uni onboardingGet(String productId, String taxCode, String status, String from, String to, Integer page, Integer size); - Uni deleteOnboarding(String onboardingId); + Uni rejectOnboarding(String onboardingId); Uni onboardingPending(String onboardingId); diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceDefault.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceDefault.java index 44baaf67a..02b297aa9 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceDefault.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceDefault.java @@ -557,10 +557,14 @@ private List convertOnboardingListToResponse(List ite } @Override - public Uni deleteOnboarding(String onboardingId) { + public Uni rejectOnboarding(String onboardingId) { return checkOnboardingIdFormat(onboardingId) - .onItem() - .transformToUni(id -> updateStatus(onboardingId, OnboardingStatus.DELETED)); + .onItem().transformToUni(ignore -> Onboarding.findById(new ObjectId(onboardingId)) + .onItem().transform(onboarding -> (Onboarding) onboarding)) + .onItem().transformToUni(onboardingGet -> OnboardingStatus.COMPLETED.equals(onboardingGet.getStatus()) + ? Uni.createFrom().failure(new InvalidRequestException(String.format("Onboarding with id %s is COMPLETED!", onboardingId))) + : Uni.createFrom().item(onboardingGet)) + .onItem().transformToUni(id -> updateStatus(onboardingId, OnboardingStatus.REJECTED)); } /** diff --git a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/controller/OnboardingControllerTest.java b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/controller/OnboardingControllerTest.java index 42288e018..5da7a2305 100644 --- a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/controller/OnboardingControllerTest.java +++ b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/controller/OnboardingControllerTest.java @@ -232,19 +232,19 @@ void complete() throws IOException { void deleteOK(){ String onboardingId = "actual-onboarding-id"; - when(onboardingService.deleteOnboarding(onboardingId)) + when(onboardingService.rejectOnboarding(onboardingId)) .thenReturn(Uni.createFrom().item(1L)); given() .when() .pathParam("onboardingId", onboardingId) - .put("/{onboardingId}/delete") + .put("/{onboardingId}/reject") .then() .statusCode(204); ArgumentCaptor expectedId = ArgumentCaptor.forClass(String.class); verify(onboardingService, times(1)) - .deleteOnboarding(expectedId.capture()); + .rejectOnboarding(expectedId.capture()); assertEquals(expectedId.getValue(), onboardingId); } @@ -253,19 +253,19 @@ void deleteOK(){ void deleteInvalidOnboardingIdOrOnboardingNotFound(){ String onboardingId = "actual-onboarding-id"; - when(onboardingService.deleteOnboarding(onboardingId)) + when(onboardingService.rejectOnboarding(onboardingId)) .thenThrow(InvalidRequestException.class); given() .when() .pathParam("onboardingId", onboardingId) - .put("/{onboardingId}/delete") + .put("/{onboardingId}/reject") .then() .statusCode(400); ArgumentCaptor expectedId = ArgumentCaptor.forClass(String.class); verify(onboardingService, times(1)) - .deleteOnboarding(expectedId.capture()); + .rejectOnboarding(expectedId.capture()); assertEquals(expectedId.getValue(), onboardingId); } diff --git a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceDefaultTest.java b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceDefaultTest.java index 7cae44fd1..990145e67 100644 --- a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceDefaultTest.java +++ b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceDefaultTest.java @@ -1003,10 +1003,15 @@ private Onboarding createDummyOnboarding() { @Test void testOnboardingUpdateStatusOK() { - String onboardingId = "655df045dc52ea5f37c80955"; - mockUpdateOnboarding(onboardingId, 1L); + + Onboarding onboarding = createDummyOnboarding(); + PanacheMock.mock(Onboarding.class); + when(Onboarding.findById(onboarding.getId())) + .thenReturn(Uni.createFrom().item(onboarding)); + + mockUpdateOnboarding(onboarding.getId().toHexString(), 1L); UniAssertSubscriber subscriber = onboardingService - .deleteOnboarding(onboardingId) + .rejectOnboarding(onboarding.getId().toHexString()) .subscribe() .withSubscriber(UniAssertSubscriber.create()); @@ -1017,29 +1022,51 @@ void testOnboardingUpdateStatusOK() { void testOnboardingUpdateStatusInvalidOnboardingId() { String onboardingId = "123456"; UniAssertSubscriber subscriber = onboardingService - .deleteOnboarding(onboardingId) + .rejectOnboarding(onboardingId) .subscribe() .withSubscriber(UniAssertSubscriber.create()); subscriber.assertFailedWith(InvalidRequestException.class, "Given onboardingId [123456] has wrong format"); } + @Test + void rejectOnboarding_statusIsCOMPLETED() { + Onboarding onboarding = createDummyOnboarding(); + onboarding.setStatus(OnboardingStatus.COMPLETED); + PanacheMock.mock(Onboarding.class); + when(Onboarding.findById(onboarding.getId())) + .thenReturn(Uni.createFrom().item(onboarding)); + + mockUpdateOnboarding(onboarding.getId().toHexString(), 1L); + UniAssertSubscriber subscriber = onboardingService + .rejectOnboarding(onboarding.getId().toHexString()) + .subscribe() + .withSubscriber(UniAssertSubscriber.create()); + + subscriber.assertFailedWith(InvalidRequestException.class); + } + @Test void testOnboardingDeleteOnboardingNotFoundOrAlreadyDeleted() { - String onboardingId = "655df045dc52ea5f37c80955"; - mockUpdateOnboarding(onboardingId, 0L); + + Onboarding onboarding = createDummyOnboarding(); + PanacheMock.mock(Onboarding.class); + when(Onboarding.findById(onboarding.getId())) + .thenReturn(Uni.createFrom().item(onboarding)); + mockUpdateOnboarding(onboarding.getId().toHexString(), 0L); + UniAssertSubscriber subscriber = onboardingService - .deleteOnboarding(onboardingId) + .rejectOnboarding(onboarding.getId().toHexString()) .subscribe() .withSubscriber(UniAssertSubscriber.create()); - subscriber.assertFailedWith(InvalidRequestException.class, "Onboarding with id 655df045dc52ea5f37c80955 not found or already deleted"); + subscriber.assertFailedWith(InvalidRequestException.class); } private void mockUpdateOnboarding(String onboardingId, Long updatedItemCount) { ReactivePanacheUpdate query = mock(ReactivePanacheUpdate.class); PanacheMock.mock(Onboarding.class); - when(Onboarding.update(Onboarding.Fields.status.name(), OnboardingStatus.DELETED)).thenReturn(query); + when(Onboarding.update(Onboarding.Fields.status.name(), OnboardingStatus.REJECTED)).thenReturn(query); when(query.where("_id", onboardingId)).thenReturn(Uni.createFrom().item(updatedItemCount)); }