From 6d43cc252c278dcf48316c888b80aa8bb2aed91d Mon Sep 17 00:00:00 2001 From: pierpaolodidato89 <137791912+pierpaolodidato89@users.noreply.github.com> Date: Mon, 22 Jul 2024 16:50:52 +0200 Subject: [PATCH] [SELC-5276] fix: Throw exception in of 404 for getUOFromRecipientCode --- .../service/OnboardingServiceDefault.java | 2 +- .../service/util/OnboardingUtils.java | 16 +++++++++- .../service/OnboardingServiceDefaultTest.java | 31 +++++++++++++++++++ 3 files changed, 47 insertions(+), 2 deletions(-) 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 4a39fc5ab..e91a43728 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 @@ -1080,7 +1080,7 @@ public Uni checkManager(OnboardingUserRequest onboardingUserRequest) { } public Uni checkRecipientCode(String recipientCode, String originId) { - return uoApi.findByUnicodeUsingGET1(recipientCode, null).onItem() + return onboardingUtils.getUoFromRecipientCode(recipientCode).onItem() .transformToUni(uoResource -> onboardingUtils.validationRecipientCode(originId, uoResource)); } diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/util/OnboardingUtils.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/util/OnboardingUtils.java index c21e068a8..392a03422 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/util/OnboardingUtils.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/util/OnboardingUtils.java @@ -7,10 +7,12 @@ import it.pagopa.selfcare.onboarding.entity.Onboarding; import it.pagopa.selfcare.onboarding.exception.InvalidRequestException; import it.pagopa.selfcare.onboarding.exception.OnboardingNotAllowedException; +import it.pagopa.selfcare.onboarding.exception.ResourceNotFoundException; import it.pagopa.selfcare.onboarding.util.InstitutionPaSubunitType; import it.pagopa.selfcare.product.entity.Product; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; +import jakarta.ws.rs.WebApplicationException; import org.eclipse.microprofile.rest.client.inject.RestClient; import org.openapi.quarkus.party_registry_proxy_json.api.UoApi; import org.openapi.quarkus.party_registry_proxy_json.model.UOResource; @@ -48,7 +50,8 @@ private Uni checkRecipientCode(Onboarding onboarding) { && InstitutionType.PA.equals(onboarding.getInstitution().getInstitutionType()) && Objects.nonNull(onboarding.getBilling()) && Objects.nonNull(onboarding.getBilling().getRecipientCode())) { - return uoApi.findByUnicodeUsingGET1(onboarding.getBilling().getRecipientCode(), null) + final String recipientCode = onboarding.getBilling().getRecipientCode(); + return getUoFromRecipientCode(recipientCode) .flatMap(uoResource -> validationRecipientCode(onboarding.getInstitution().getOriginId(), uoResource)) .onItem().transformToUni(customError -> { if (Objects.nonNull(customError)) { @@ -60,6 +63,17 @@ private Uni checkRecipientCode(Onboarding onboarding) { return Uni.createFrom().nullItem(); } + public Uni getUoFromRecipientCode(String recipientCode) { + return uoApi.findByUnicodeUsingGET1(recipientCode, null) + .onFailure(WebApplicationException.class) + .recoverWithUni(ex -> ((WebApplicationException) ex).getResponse().getStatus() == 404 + ? Uni.createFrom().failure(new ResourceNotFoundException( + String.format(UO_NOT_FOUND.getMessage(), + recipientCode + ))) + : Uni.createFrom().failure(ex)); + } + public Uni validationRecipientCode(String originId, UOResource uoResource) { if (!originId.equals(uoResource.getCodiceIpa())) { return Uni.createFrom().item(DENIED_NO_ASSOCIATION); 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 44d4de685..33a1eade0 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 @@ -46,6 +46,7 @@ import jakarta.inject.Inject; import jakarta.ws.rs.WebApplicationException; import jakarta.ws.rs.core.Response; +import org.apache.http.HttpStatus; import org.bson.Document; import org.eclipse.microprofile.rest.client.inject.RestClient; import org.jboss.resteasy.reactive.ClientWebApplicationException; @@ -1624,6 +1625,36 @@ void checkRecipientCodeWithValidResponse() { .assertItem(customError); } + @Test + void checkRecipientCodeWithGenericError() { + final String recipientCode = "recipientCode"; + final String originId = "originId"; + RuntimeException exception = new RuntimeException("Generic error"); + when(uoApi.findByUnicodeUsingGET1(eq(recipientCode), any())) + .thenReturn(Uni.createFrom().failure(exception)); + UniAssertSubscriber subscriber = onboardingService + .checkRecipientCode(recipientCode, originId) + .subscribe() + .withSubscriber(UniAssertSubscriber.create()); + + subscriber.assertFailedWith(RuntimeException.class); + } + + @Test + void checkRecipientCodeWithResourceNotFound() { + final String recipientCode = "recipientCode"; + final String originId = "originId"; + ClientWebApplicationException exception = new ClientWebApplicationException(HttpStatus.SC_NOT_FOUND); + when(uoApi.findByUnicodeUsingGET1(eq(recipientCode), any())) + .thenReturn(Uni.createFrom().failure(exception)); + UniAssertSubscriber subscriber = onboardingService + .checkRecipientCode(recipientCode, originId) + .subscribe() + .withSubscriber(UniAssertSubscriber.create()); + + subscriber.assertFailedWith(ResourceNotFoundException.class); + } + @Nested @TestProfile(OnboardingTestProfile.class) @TestInstance(TestInstance.Lifecycle.PER_CLASS)