From bfae9ca1dd1f9bc5529910bc5b0ee95f8978faa2 Mon Sep 17 00:00:00 2001 From: pierpaolodidato89 <137791912+pierpaolodidato89@users.noreply.github.com> Date: Fri, 30 Aug 2024 09:37:23 +0200 Subject: [PATCH] Merge back into main --- .../service/OnboardingServiceDefault.java | 2 +- .../service/util/OnboardingUtils.java | 43 ++++++++-- .../service/OnboardingServiceDefaultTest.java | 2 +- .../service/util/OnboardingUtilsTest.java | 79 ++++++++++++++++--- 4 files changed, 104 insertions(+), 22 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 d255de464..2f1988c21 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 @@ -1082,7 +1082,7 @@ public Uni checkManager(OnboardingUserRequest onboardingUserRequest) { public Uni checkRecipientCode(String recipientCode, String originId) { return onboardingUtils.getUoFromRecipientCode(recipientCode).onItem() .transformToUni(uoResource -> - onboardingUtils.validationRecipientCode(originId, uoResource)); + onboardingUtils.getValidationRecipientCodeError(originId, uoResource)); } private static Uni updateOnboardingValues(String onboardingId, Onboarding onboarding) { 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 68efb42e6..675bc7ffb 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 @@ -14,11 +14,14 @@ 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.AooApi; import org.openapi.quarkus.party_registry_proxy_json.api.UoApi; import org.openapi.quarkus.party_registry_proxy_json.model.UOResource; import java.util.Objects; +import static it.pagopa.selfcare.onboarding.common.InstitutionPaSubunitType.EC; +import static it.pagopa.selfcare.onboarding.common.InstitutionPaSubunitType.UO; import static it.pagopa.selfcare.onboarding.constants.CustomError.*; @ApplicationScoped @@ -28,6 +31,9 @@ public class OnboardingUtils { @Inject UoApi uoApi; + @RestClient + @Inject + AooApi aooApi; private static final String ADDITIONAL_INFORMATION_REQUIRED = "Additional Information is required when institutionType is GSP and productId is pagopa"; private static final String OTHER_NOTE_REQUIRED = "Other Note is required when other boolean are false"; private static final String BILLING_OR_RECIPIENT_CODE_REQUIRED = "Billing and/or recipient code are required"; @@ -46,13 +52,10 @@ public Uni customValidationOnboardingData(Onboarding onboarding, Pro } private Uni checkRecipientCode(Onboarding onboarding) { - if (Objects.nonNull(onboarding.getInstitution()) - && InstitutionType.PA.equals(onboarding.getInstitution().getInstitutionType()) - && Objects.nonNull(onboarding.getBilling()) - && Objects.nonNull(onboarding.getBilling().getRecipientCode())) { + if (isInvoiceablePA(onboarding)) { final String recipientCode = onboarding.getBilling().getRecipientCode(); return getUoFromRecipientCode(recipientCode) - .flatMap(uoResource -> validationRecipientCode(onboarding.getInstitution().getOriginId(), uoResource)) + .onItem().transformToUni(uoResource -> validationRecipientCode(onboarding, uoResource)) .onItem().transformToUni(customError -> { if (Objects.nonNull(customError)) { return Uni.createFrom().failure(new InvalidRequestException(customError.getMessage())); @@ -63,6 +66,23 @@ private Uni checkRecipientCode(Onboarding onboarding) { return Uni.createFrom().nullItem(); } + private Uni validationRecipientCode(Onboarding onboarding, UOResource uoResource) { + + switch ((onboarding.getInstitution().getSubunitType() != null) ? onboarding.getInstitution().getSubunitType() : EC ) { + case AOO -> { + return aooApi.findByUnicodeUsingGET(onboarding.getInstitution().getSubunitCode(), null) + .onItem().transformToUni(aooResource -> getValidationRecipientCodeError(aooResource.getCodiceIpa(), uoResource)); + } + case UO -> { + return uoApi.findByUnicodeUsingGET1(onboarding.getInstitution().getSubunitCode(), null) + .onItem().transformToUni(innerUoResource -> getValidationRecipientCodeError(innerUoResource.getCodiceIpa(), uoResource)); + } + default -> { + return getValidationRecipientCodeError(onboarding.getInstitution().getOriginId(), uoResource); + } + } + } + public Uni getUoFromRecipientCode(String recipientCode) { return uoApi.findByUnicodeUsingGET1(recipientCode, null) .onFailure(WebApplicationException.class) @@ -74,8 +94,8 @@ public Uni getUoFromRecipientCode(String recipientCode) { : Uni.createFrom().failure(ex)); } - public Uni validationRecipientCode(String originId, UOResource uoResource) { - if (!originId.equals(uoResource.getCodiceIpa())) { + public Uni getValidationRecipientCodeError(String originIdEC, UOResource uoResource) { + if (!originIdEC.equals(uoResource.getCodiceIpa())) { return Uni.createFrom().item(DENIED_NO_ASSOCIATION); } if (Objects.isNull(uoResource.getCodiceFiscaleSfe())) { @@ -136,9 +156,16 @@ private Uni additionalChecksForProduct(Onboarding onboarding, Produc private boolean isUO(Onboarding onboarding) { return Objects.nonNull(onboarding.getInstitution().getSubunitCode()) - && onboarding.getInstitution().getSubunitType().equals(InstitutionPaSubunitType.UO) + && UO.equals(onboarding.getInstitution().getSubunitType()) && Objects.nonNull(onboarding.getBilling()) && Objects.nonNull(onboarding.getBilling().getTaxCodeInvoicing()) && Objects.nonNull(onboarding.getInstitution().getTaxCode()); } + + private boolean isInvoiceablePA(Onboarding onboarding) { + return Objects.nonNull(onboarding.getInstitution()) + && InstitutionType.PA.equals(onboarding.getInstitution().getInstitutionType()) + && Objects.nonNull(onboarding.getBilling()) + && Objects.nonNull(onboarding.getBilling().getRecipientCode()); + } } 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 8fd3983ab..3c829709c 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 @@ -1633,7 +1633,7 @@ void checkRecipientCodeWithValidResponse() { .thenReturn(Uni.createFrom().item(uoResource)); // Mock the response from onboardingUtils.validationRecipientCode - when(onboardingUtils.validationRecipientCode(eq(originId), eq(uoResource))) + when(onboardingUtils.getValidationRecipientCodeError(eq(originId), eq(uoResource))) .thenReturn(Uni.createFrom().item(customError)); // Call the method under test diff --git a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/util/OnboardingUtilsTest.java b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/util/OnboardingUtilsTest.java index 94570720b..9f578b527 100644 --- a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/util/OnboardingUtilsTest.java +++ b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/util/OnboardingUtilsTest.java @@ -18,7 +18,10 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; +import org.openapi.quarkus.party_registry_proxy_json.api.AooApi; import org.openapi.quarkus.party_registry_proxy_json.api.UoApi; +import org.openapi.quarkus.party_registry_proxy_json.model.AOOResource; +import org.openapi.quarkus.party_registry_proxy_json.model.AOOsResource; import org.openapi.quarkus.party_registry_proxy_json.model.UOResource; import org.openapi.quarkus.party_registry_proxy_json.model.UOsResource; import org.wildfly.common.Assert; @@ -34,6 +37,11 @@ public class OnboardingUtilsTest { @InjectMock @RestClient UoApi uoApi; + + @InjectMock + @RestClient + AooApi aooApi; + @Inject OnboardingUtils onboardingUtils; @@ -219,9 +227,9 @@ void checkRecipientCodeNoBilling() { institution.setSubunitType(InstitutionPaSubunitType.AOO); institution.setInstitutionType(InstitutionType.PA); institution.setTaxCode("taxCode"); - UOResource uoResource = new UOResource(); - uoResource.setCodiceFiscaleEnte("taxCode"); - uoResource.setCodiceIpa("ipaCode"); + AOOResource resource = new AOOResource(); + resource.setCodiceFiscaleEnte("taxCode"); + resource.setCodiceIpa("ipaCode"); onboarding.setInstitution(institution); onboarding.setProductId(ProductId.PROD_IO_SIGN.getValue()); Billing billing = new Billing(); @@ -229,11 +237,52 @@ void checkRecipientCodeNoBilling() { billing.setRecipientCode("recipientCode"); onboarding.setBilling(billing); + UOResource uoResource = new UOResource(); + uoResource.setCodiceIpa("ipaCode"); + uoResource.setCodiceFiscaleEnte("taxCode1"); + when(uoApi.findByUnicodeUsingGET1(any(), any())) .thenReturn(Uni.createFrom().item(uoResource)); - UOsResource uOsResource = new UOsResource(); - uOsResource.setItems(List.of(uoResource)); + when(aooApi.findByUnicodeUsingGET(any(), any())) + .thenReturn(Uni.createFrom().item(resource)); + + AOOsResource uOsResource = new AOOsResource(); + uOsResource.setItems(List.of(resource)); + + UniAssertSubscriber subscriber = onboardingUtils + .customValidationOnboardingData(onboarding, dummyProduct()) + .subscribe() + .withSubscriber(UniAssertSubscriber.create()); + + subscriber.assertFailedWith(InvalidRequestException.class); + } + + @Test + void checkRecipientCodeUONoBilling() { + + Onboarding onboarding = new Onboarding(); + Institution institution = new Institution(); + institution.setOriginId("ipaCode"); + institution.setSubunitCode("subunitCode"); + institution.setSubunitType(InstitutionPaSubunitType.UO); + institution.setInstitutionType(InstitutionType.PA); + institution.setTaxCode("taxCode"); + AOOResource resource = new AOOResource(); + resource.setCodiceFiscaleEnte("taxCode"); + resource.setCodiceIpa("ipaCode"); + onboarding.setInstitution(institution); + onboarding.setProductId(ProductId.PROD_IO_SIGN.getValue()); + Billing billing = new Billing(); + billing.setRecipientCode("recipientCode"); + onboarding.setBilling(billing); + + UOResource uoResource = new UOResource(); + uoResource.setCodiceIpa("ipaCode"); + uoResource.setCodiceFiscaleEnte("taxCode1"); + + when(uoApi.findByUnicodeUsingGET1(any(), any())) + .thenReturn(Uni.createFrom().item(uoResource)); UniAssertSubscriber subscriber = onboardingUtils .customValidationOnboardingData(onboarding, dummyProduct()) @@ -253,10 +302,9 @@ void checkRecipientCodeNoAssociation() { institution.setSubunitType(InstitutionPaSubunitType.AOO); institution.setInstitutionType(InstitutionType.PA); institution.setTaxCode("taxCode"); - UOResource uoResource = new UOResource(); - uoResource.setCodiceFiscaleEnte("taxCode"); - uoResource.setCodiceIpa("ipaCode"); - uoResource.setCodiceFiscaleSfe("taxCodeInvoicing"); + AOOResource aooResource = new AOOResource(); + aooResource.setCodiceFiscaleEnte("taxCode"); + aooResource.setCodiceIpa("ipaCode"); onboarding.setInstitution(institution); onboarding.setProductId(ProductId.PROD_IO_SIGN.getValue()); Billing billing = new Billing(); @@ -264,11 +312,19 @@ void checkRecipientCodeNoAssociation() { billing.setRecipientCode("recipientCode"); onboarding.setBilling(billing); + UOResource uoResource = new UOResource(); + uoResource.setCodiceIpa("customIpaCode"); + uoResource.setCodiceFiscaleEnte("taxCode1"); + uoResource.setCodiceFiscaleSfe("taxCodeInvoicing1"); + when(uoApi.findByUnicodeUsingGET1(any(), any())) .thenReturn(Uni.createFrom().item(uoResource)); - UOsResource uOsResource = new UOsResource(); - uOsResource.setItems(List.of(uoResource)); + when(aooApi.findByUnicodeUsingGET(any(), any())) + .thenReturn(Uni.createFrom().item(aooResource)); + + AOOsResource uOsResource = new AOOsResource(); + uOsResource.setItems(List.of(aooResource)); UniAssertSubscriber subscriber = onboardingUtils .customValidationOnboardingData(onboarding, dummyProduct()) @@ -285,7 +341,6 @@ void checkRecipientCodeSuccess() { Institution institution = new Institution(); institution.setOriginId("ipaCode"); institution.setSubunitCode("subunitCode"); - institution.setSubunitType(InstitutionPaSubunitType.AOO); institution.setInstitutionType(InstitutionType.PA); institution.setTaxCode("taxCode"); UOResource uoResource = new UOResource();