diff --git a/apps/onboarding-ms/src/main/docs/openapi.json b/apps/onboarding-ms/src/main/docs/openapi.json index ddb804d67..3fc3fb0b8 100644 --- a/apps/onboarding-ms/src/main/docs/openapi.json +++ b/apps/onboarding-ms/src/main/docs/openapi.json @@ -1419,6 +1419,9 @@ "county" : { "type" : "string" }, + "istatCode" : { + "type" : "string" + }, "description" : { "type" : "string" }, diff --git a/apps/onboarding-ms/src/main/docs/openapi.yaml b/apps/onboarding-ms/src/main/docs/openapi.yaml index 297353f64..ba8d754d2 100644 --- a/apps/onboarding-ms/src/main/docs/openapi.yaml +++ b/apps/onboarding-ms/src/main/docs/openapi.yaml @@ -998,6 +998,8 @@ components: type: string county: type: string + istatCode: + type: string description: type: string digitalAddress: diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/Institution.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/Institution.java index 7fc08fb8d..a71252aff 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/Institution.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/Institution.java @@ -22,6 +22,7 @@ public class Institution { private String city; private String country; private String county; + private String istatCode; private String description; private String digitalAddress; private String address; 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 3ea0b46ee..b79985675 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 @@ -50,6 +50,8 @@ import org.openapi.quarkus.onboarding_functions_json.model.OrchestrationResponse; 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.UOResource; import org.openapi.quarkus.user_registry_json.api.UserApi; import org.openapi.quarkus.user_registry_json.model.*; @@ -63,6 +65,7 @@ import java.util.function.Supplier; import java.util.stream.Collectors; +import static it.pagopa.selfcare.onboarding.common.InstitutionPaSubunitType.*; import static it.pagopa.selfcare.onboarding.common.ProductId.PROD_INTEROP; import static it.pagopa.selfcare.onboarding.constants.CustomError.*; import static it.pagopa.selfcare.onboarding.util.GenericError.*; @@ -203,12 +206,14 @@ private Uni fillUsersAndOnboarding(Onboarding onboarding, Li return getProductByOnboarding(onboarding) .onItem().transformToUni(product -> verifyAlreadyOnboardingForProductAndProductParent(onboarding.getInstitution(), product.getId(), product.getParentId()) .replaceWith(product)) - .onItem().transformToUni(product -> onboardingUtils.customValidationOnboardingData(onboarding, product) + .onItem().transformToUni(product -> getRegistryResource(onboarding) + .onItem().transformToUni(proxyResource -> onboardingUtils.customValidationOnboardingData(onboarding, product, proxyResource) + .onItem().transformToUni(ignored -> setIstatCode(onboarding, proxyResource) + .onItem().transformToUni(innerOnboarding -> addParentDescriptionForAooOrUo(onboarding, proxyResource)))) /* if institution type is PRV or SCP, request should match data from registry proxy */ .onItem().transformToUni(ignored -> onboardingUtils.validateFields(onboarding)) /* if product has some test environments, request must also onboard them (for ex. prod-interop-coll) */ - .onItem().invoke(() -> onboarding.setTestEnvProductIds(product.getTestEnvProductIds())) - .onItem().transformToUni(this::addParentDescriptionForAooOrUo) + .onItem().invoke(() -> onboarding.setTestEnvProductIds(product.getTestEnvProductIds())).onItem().invoke(() -> onboarding.setTestEnvProductIds(product.getTestEnvProductIds())) .onItem().transformToUni(current -> persistOnboarding(onboarding, userRequests, product)) /* Update onboarding data with users and start orchestration */ .onItem().transformToUni(currentOnboarding -> persistAndStartOrchestrationOnboarding(currentOnboarding, @@ -244,10 +249,12 @@ private Uni fillUsersAndOnboarding(Onboarding onboarding, Li return getProductByOnboarding(onboarding) .onItem().transformToUni(product -> verifyAlreadyOnboardingForProductAndProductParent(onboarding.getInstitution(), product.getId(), product.getParentId()) .replaceWith(product)) - .onItem().transformToUni(product -> onboardingUtils.customValidationOnboardingData(onboarding, product) + .onItem().transformToUni(product -> getRegistryResource(onboarding) + .onItem().transformToUni(proxyResource -> onboardingUtils.customValidationOnboardingData(onboarding, product, proxyResource) + .onItem().transformToUni(ignored -> setIstatCode(onboarding, proxyResource) + .onItem().transformToUni(innerOnboarding -> addParentDescriptionForAooOrUo(onboarding, proxyResource)))) /* if product has some test environments, request must also onboard them (for ex. prod-interop-coll) */ .onItem().invoke(() -> onboarding.setTestEnvProductIds(product.getTestEnvProductIds())) - .onItem().transformToUni(this::addParentDescriptionForAooOrUo) .onItem().transformToUni(this::setInstitutionTypeAndBillingData) .onItem().transformToUni(current -> persistOnboarding(onboarding, userRequests, product)) .onItem().call(onboardingPersisted -> Panache.withTransaction(() -> Token.persist(getToken(onboardingPersisted, product, contractImported)))) @@ -257,6 +264,14 @@ private Uni fillUsersAndOnboarding(Onboarding onboarding, Li .onItem().transform(onboardingMapper::toResponse)); } + private Uni getRegistryResource(Onboarding onboarding) { + return switch ((onboarding.getInstitution().getSubunitType() != null) ? onboarding.getInstitution().getSubunitType() : EC) { + case AOO -> getAOO(onboarding); + case UO -> getUO(onboarding); + default -> getEC(); + }; + } + private Uni persistOnboarding(Onboarding onboarding, List userRequests, Product product) { /* I have to retrieve onboarding id for saving reference to pdv */ return Panache.withTransaction(() -> Onboarding.persist(onboarding).replaceWith(onboarding) @@ -265,7 +280,7 @@ private Uni persistOnboarding(Onboarding onboarding, List addParentDescriptionForAooOrUo(Onboarding onboarding) { + private Uni addParentDescriptionForAooOrUo(Onboarding onboarding, OnboardingUtils.ProxyResource proxyResource) { Log.infof("Adding parent description AOO/UOO for: taxCode %s, subunitCode %s, type %s", onboarding.getInstitution().getTaxCode(), @@ -273,34 +288,47 @@ private Uni addParentDescriptionForAooOrUo(Onboarding onboarding) { onboarding.getInstitution().getInstitutionType()); if (InstitutionType.PA == onboarding.getInstitution().getInstitutionType()) { - if (InstitutionPaSubunitType.AOO == onboarding.getInstitution().getSubunitType()) { - return addParentDescriptionForAOO(onboarding); - } else if (InstitutionPaSubunitType.UO == onboarding.getInstitution().getSubunitType()) { - return addParentDescriptionForUO(onboarding); + if (AOO == proxyResource.getType()) { + AOOResource resource = (AOOResource) proxyResource.getResource(); + return addParentDescriptionForAOO(onboarding, resource); + } else if (UO == proxyResource.getType()) { + UOResource resource = (UOResource) proxyResource.getResource(); + return addParentDescriptionForUO(onboarding, resource); } } return Uni.createFrom().item(onboarding); } - private Uni addParentDescriptionForUO(Onboarding onboarding) { - return uoApi.findByUnicodeUsingGET1(onboarding.getInstitution().getSubunitCode(), null) - .onItem().invoke(uoResource -> LOG.infof("Founded parent %s for UO institution with subunitCode %s", uoResource.getDenominazioneEnte(), onboarding.getInstitution().getSubunitCode())) - .onItem().invoke(uoResource -> onboarding.getInstitution().setParentDescription(uoResource.getDenominazioneEnte())) - .onFailure(WebApplicationException.class).recoverWithUni(ex -> ((WebApplicationException) ex).getResponse().getStatus() == 404 - ? Uni.createFrom().failure(new ResourceNotFoundException(String.format(UO_NOT_FOUND.getMessage(), onboarding.getInstitution().getSubunitCode()))) - : Uni.createFrom().failure(ex)) - .replaceWith(onboarding); + private Uni setIstatCode(Onboarding onboarding, OnboardingUtils.ProxyResource proxyResource) { + return switch (proxyResource.getType()) { + case AOO -> Uni.createFrom().item(() -> { + AOOResource resource = (AOOResource) proxyResource.getResource(); + onboarding.getInstitution().setIstatCode(resource.getCodiceComuneISTAT()); + return onboarding; + }); + case UO -> Uni.createFrom().item(() -> { + UOResource resource = (UOResource) proxyResource.getResource(); + onboarding.getInstitution().setIstatCode(resource.getCodiceComuneISTAT()); + return onboarding; + }); + default -> Uni.createFrom().item(onboarding); + }; + } + private Uni addParentDescriptionForUO(Onboarding onboarding, UOResource uoResource) { + LOG.infof("Founded parent %s for UO institution with subunitCode %s", uoResource.getDenominazioneEnte(), onboarding.getInstitution().getSubunitCode()); + return Uni.createFrom().item(() -> { + onboarding.getInstitution().setParentDescription(uoResource.getDenominazioneEnte()); + return onboarding; + }); } - private Uni addParentDescriptionForAOO(Onboarding onboarding) { - return aooApi.findByUnicodeUsingGET(onboarding.getInstitution().getSubunitCode(), null) - .onItem().invoke(aooResource -> LOG.infof("Founded parent %s for AOO institution with subunitCode %s", aooResource.getDenominazioneEnte(), onboarding.getInstitution().getSubunitCode())) - .onItem().invoke(aooResource -> onboarding.getInstitution().setParentDescription(aooResource.getDenominazioneEnte())) - .onFailure(WebApplicationException.class).recoverWithUni(ex -> ((WebApplicationException) ex).getResponse().getStatus() == 404 - ? Uni.createFrom().failure(new ResourceNotFoundException(String.format(AOO_NOT_FOUND.getMessage(), onboarding.getInstitution().getSubunitCode()))) - : Uni.createFrom().failure(ex)) - .replaceWith(onboarding); + private Uni addParentDescriptionForAOO(Onboarding onboarding, AOOResource aooResource) { + LOG.infof("Founded parent %s for AOO institution with subunitCode %s", aooResource.getDenominazioneEnte(), onboarding.getInstitution().getSubunitCode()); + return Uni.createFrom().item(() -> { + onboarding.getInstitution().setParentDescription(aooResource.getDenominazioneEnte()); + return onboarding; + }); } private Uni addReferencedOnboardingId(Onboarding onboarding) { @@ -316,11 +344,11 @@ private Uni addReferencedOnboardingId(Onboarding onboarding) { .invoke(previousOnboarding -> onboarding.setReferenceOnboardingId(previousOnboarding.getId())); return current.onItem().transformToUni(ignored -> onboardings.collect().first()).onItem() .invoke(lastOnboarding -> { - String previousManagerId = lastOnboarding.getUsers().stream() - .filter(user -> user.getRole().equals(PartyRole.MANAGER)) - .map(User::getId).findFirst().orElse(null); - onboarding.setPreviousManagerId(previousManagerId); - }).replaceWith(onboarding); + String previousManagerId = lastOnboarding.getUsers().stream() + .filter(user -> user.getRole().equals(PartyRole.MANAGER)) + .map(User::getId).findFirst().orElse(null); + onboarding.setPreviousManagerId(previousManagerId); + }).replaceWith(onboarding); } private Multi getOnboardingByFilters(String taxCode, String subunitCode, String origin, @@ -1040,8 +1068,8 @@ public Uni updateOnboarding(String onboardingId, Onboarding onboarding) { return Onboarding.findById(onboardingId) .onItem().transform(Onboarding.class::cast) .onItem().transformToUni(onboardingGet -> Objects.isNull(onboardingGet) - ? Uni.createFrom().failure(new InvalidRequestException(String.format("Onboarding with id %s is not present!", onboardingId))) - : Uni.createFrom().item(onboardingGet)) + ? Uni.createFrom().failure(new InvalidRequestException(String.format("Onboarding with id %s is not present!", onboardingId))) + : Uni.createFrom().item(onboardingGet)) .onItem().transformToUni(id -> updateOnboardingValues(onboardingId, onboarding)); } @@ -1083,9 +1111,9 @@ public Uni checkManager(OnboardingUserRequest onboardingUserRequest) { } public Uni checkRecipientCode(String recipientCode, String originId) { - return onboardingUtils.getUoFromRecipientCode(recipientCode).onItem() - .transformToUni(uoResource -> - onboardingUtils.getValidationRecipientCodeError(originId, uoResource)); + return onboardingUtils.getUoFromRecipientCode(recipientCode).onItem() + .transformToUni(uoResource -> + onboardingUtils.getValidationRecipientCodeError(originId, uoResource)); } private static Uni updateOnboardingValues(String onboardingId, Onboarding onboarding) { @@ -1123,4 +1151,32 @@ private List getManagerIds(List onboardings) { .map(User::getId) .findAny().orElse(null)).toList(); } + + private Uni getUO(Onboarding onboarding) { + return uoApi.findByUnicodeUsingGET1(onboarding.getInstitution().getSubunitCode(), null) + .onFailure(WebApplicationException.class).recoverWithUni(ex -> ((WebApplicationException) ex).getResponse().getStatus() == 404 + ? Uni.createFrom().failure(new ResourceNotFoundException(String.format(UO_NOT_FOUND.getMessage(), onboarding.getInstitution().getSubunitCode()))) + : Uni.createFrom().failure(ex)) + .onItem().transformToUni(uoResource -> Uni.createFrom().item(OnboardingUtils.ProxyResource.builder() + .resource(uoResource) + .type(UO) + .build())); + } + + private Uni getAOO(Onboarding onboarding) { + return aooApi.findByUnicodeUsingGET(onboarding.getInstitution().getSubunitCode(), null) + .onFailure(WebApplicationException.class).recoverWithUni(ex -> ((WebApplicationException) ex).getResponse().getStatus() == 404 + ? Uni.createFrom().failure(new ResourceNotFoundException(String.format(AOO_NOT_FOUND.getMessage(), onboarding.getInstitution().getSubunitCode()))) + : Uni.createFrom().failure(ex)) + .onItem().transformToUni(aooResource -> Uni.createFrom().item(OnboardingUtils.ProxyResource.builder() + .resource(aooResource) + .type(AOO) + .build())); + } + + private Uni getEC() { + return Uni.createFrom().item(OnboardingUtils.ProxyResource.builder() + .type(EC) + .build()); + } } 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 220be8a9a..fbdad942e 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 @@ -1,6 +1,7 @@ package it.pagopa.selfcare.onboarding.service.util; import io.smallrye.mutiny.Uni; +import it.pagopa.selfcare.onboarding.common.InstitutionPaSubunitType; import it.pagopa.selfcare.onboarding.common.InstitutionType; import it.pagopa.selfcare.onboarding.common.ProductId; import it.pagopa.selfcare.onboarding.constants.CustomError; @@ -12,10 +13,13 @@ import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import jakarta.ws.rs.WebApplicationException; +import lombok.Builder; +import lombok.Data; 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.InfocamerePdndApi; 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.PDNDBusinessResource; import org.openapi.quarkus.party_registry_proxy_json.model.UOResource; @@ -47,21 +51,21 @@ public class OnboardingUtils { private static final String PARENT_TAX_CODE_IS_INVALID = "The tax code of the parent entity of the request does not match the tax code of the parent entity retrieved by IPA"; private static final String TAX_CODE_INVOICING_IS_INVALID = "The tax code invoicing of the request does not match any tax code of institutions' hierarchy"; - public Uni customValidationOnboardingData(Onboarding onboarding, Product product) { - if (isUO(onboarding)) { - return uoApi.findByUnicodeUsingGET1(onboarding.getInstitution().getSubunitCode(), null) - .flatMap(uoResource -> checkParentTaxCode(onboarding, uoResource)) - .onItem().transformToUni(o -> checkTaxCodeInvoicing(onboarding, product)); - } - return checkRecipientCode(onboarding) - .replaceWith(additionalChecksForProduct(onboarding, product)); + public Uni customValidationOnboardingData(Onboarding onboarding, Product product, ProxyResource proxyResource) { + if (isUOWithSfe(onboarding)) { + return checkParentTaxCode(onboarding, ((UOResource) proxyResource.getResource()).getCodiceFiscaleEnte()) + .onItem().transformToUni(o -> checkTaxCodeInvoicing(onboarding, product)); + } else { + return checkRecipientCode(onboarding, proxyResource) + .replaceWith(additionalChecksForProduct(onboarding, product)); + } } - private Uni checkRecipientCode(Onboarding onboarding) { + private Uni checkRecipientCode(Onboarding onboarding, ProxyResource proxyResource) { if (isInvoiceablePA(onboarding)) { final String recipientCode = onboarding.getBilling().getRecipientCode(); return getUoFromRecipientCode(recipientCode) - .onItem().transformToUni(uoResource -> validationRecipientCode(onboarding, uoResource)) + .onItem().transformToUni(uoResource -> validationRecipientCode(onboarding, proxyResource, uoResource)) .onItem().transformToUni(customError -> { if (Objects.nonNull(customError)) { return Uni.createFrom().failure(new InvalidRequestException(customError.getMessage())); @@ -72,16 +76,14 @@ private Uni checkRecipientCode(Onboarding onboarding) { return Uni.createFrom().nullItem(); } - private Uni validationRecipientCode(Onboarding onboarding, UOResource uoResource) { + private Uni validationRecipientCode(Onboarding onboarding, ProxyResource proxyResource, 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)); + return getValidationRecipientCodeError(((AOOResource) proxyResource.getResource()).getCodiceIpa(), uoResource); } case UO -> { - return uoApi.findByUnicodeUsingGET1(onboarding.getInstitution().getSubunitCode(), null) - .onItem().transformToUni(innerUoResource -> getValidationRecipientCodeError(innerUoResource.getCodiceIpa(), uoResource)); + return getValidationRecipientCodeError(((UOResource) proxyResource.getResource()).getCodiceIpa(), uoResource); } default -> { return getValidationRecipientCodeError(onboarding.getInstitution().getOriginId(), uoResource); @@ -136,9 +138,9 @@ public Uni getValidationRecipientCodeError(String originIdEC, UORes return Uni.createFrom().nullItem(); } - private Uni checkParentTaxCode(Onboarding onboarding, UOResource uoResource) { + private Uni checkParentTaxCode(Onboarding onboarding, String childTaxCode) { /* if parent tax code is different from child tax code, throw an exception */ - if (!onboarding.getInstitution().getTaxCode().equals(uoResource.getCodiceFiscaleEnte())) { + if (!onboarding.getInstitution().getTaxCode().equals(childTaxCode)) { return Uni.createFrom().failure(new InvalidRequestException(PARENT_TAX_CODE_IS_INVALID)); } return Uni.createFrom().voidItem(); @@ -186,7 +188,7 @@ private Uni additionalChecksForProduct(Onboarding onboarding, Produc return Uni.createFrom().item(onboarding); } - private boolean isUO(Onboarding onboarding) { + private boolean isUOWithSfe(Onboarding onboarding) { return Objects.nonNull(onboarding.getInstitution().getSubunitCode()) && UO.equals(onboarding.getInstitution().getSubunitType()) && Objects.nonNull(onboarding.getBilling()) @@ -201,6 +203,16 @@ private boolean isInvoiceablePA(Onboarding onboarding) { && Objects.nonNull(onboarding.getBilling().getRecipientCode()); } + @Builder + public static class ProxyResource { + private InstitutionPaSubunitType type; + private T resource; + public InstitutionPaSubunitType getType() { return type;} + public void setType(InstitutionPaSubunitType type) { this.type = type; } + public T getResource() { return resource; } + public void setResource(T resource) { this.resource = resource; } + } + private boolean originPDNDInfocamere(Onboarding onboarding, PDNDBusinessResource pdndBusinessResource) { return onboarding.getInstitution().getDigitalAddress().equals(pdndBusinessResource.getDigitalAddress()) && onboarding.getInstitution().getDescription().equals(pdndBusinessResource.getBusinessName()); 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 9f578b527..74c6bbf3b 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 @@ -14,7 +14,10 @@ import it.pagopa.selfcare.onboarding.exception.InvalidRequestException; import it.pagopa.selfcare.product.entity.Product; import jakarta.inject.Inject; +import jakarta.ws.rs.WebApplicationException; +import org.apache.http.HttpStatus; import org.eclipse.microprofile.rest.client.inject.RestClient; +import org.jboss.resteasy.reactive.ClientWebApplicationException; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; @@ -58,8 +61,12 @@ void shouldOnboardingInstitutionWithAdditionalInfo(String type) { onboarding.setProductId(ProductId.PROD_PAGOPA.getValue()); onboarding.setAdditionalInformations(createSimpleAdditionalInformations(type)); + OnboardingUtils.ProxyResource proxyResource = OnboardingUtils.ProxyResource.builder() + .type(InstitutionPaSubunitType.EC) + .build(); + UniAssertSubscriber subscriber = onboardingUtils - .customValidationOnboardingData(onboarding, dummyProduct()) + .customValidationOnboardingData(onboarding, dummyProduct(), proxyResource) .subscribe() .withSubscriber(UniAssertSubscriber.create()); @@ -79,8 +86,12 @@ void shouldOnboardingInstitutionWithAdditionalInfoRequiredException() { onboarding.setProductId(ProductId.PROD_PAGOPA.getValue()); onboarding.setAdditionalInformations(createSimpleAdditionalInformations("other")); + OnboardingUtils.ProxyResource proxyResource = OnboardingUtils.ProxyResource.builder() + .type(InstitutionPaSubunitType.EC) + .build(); + UniAssertSubscriber subscriber = onboardingUtils - .customValidationOnboardingData(onboarding, dummyProduct()) + .customValidationOnboardingData(onboarding, dummyProduct(), proxyResource) .subscribe() .withSubscriber(UniAssertSubscriber.create()); @@ -99,8 +110,12 @@ void shouldOnboardingInstitutionWithOtherNoteRequiredException() { onboarding.setInstitution(institution); onboarding.setProductId(ProductId.PROD_PAGOPA.getValue()); + OnboardingUtils.ProxyResource proxyResource = OnboardingUtils.ProxyResource.builder() + .type(InstitutionPaSubunitType.EC) + .build(); + UniAssertSubscriber subscriber = onboardingUtils - .customValidationOnboardingData(onboarding, dummyProduct()) + .customValidationOnboardingData(onboarding, dummyProduct(), proxyResource) .subscribe() .withSubscriber(UniAssertSubscriber.create()); @@ -120,8 +135,12 @@ void shouldOnboardingInstitutionWithBillingRequiredException() { billing.setTaxCodeInvoicing("taxCodeInvoicing"); onboarding.setBilling(billing); + OnboardingUtils.ProxyResource proxyResource = OnboardingUtils.ProxyResource.builder() + .type(InstitutionPaSubunitType.EC) + .build(); + UniAssertSubscriber subscriber = onboardingUtils - .customValidationOnboardingData(onboarding, dummyProduct()) + .customValidationOnboardingData(onboarding, dummyProduct(), proxyResource) .subscribe() .withSubscriber(UniAssertSubscriber.create()); @@ -140,8 +159,12 @@ void shouldOnboardingInstitutionWithRecipientCodeRequiredException() { onboarding.setBilling(billing); onboarding.setProductId(ProductId.PROD_PAGOPA.getValue()); + OnboardingUtils.ProxyResource proxyResource = OnboardingUtils.ProxyResource.builder() + .type(InstitutionPaSubunitType.EC) + .build(); + UniAssertSubscriber subscriber = onboardingUtils - .customValidationOnboardingData(onboarding, dummyProduct()) + .customValidationOnboardingData(onboarding, dummyProduct(), proxyResource) .subscribe() .withSubscriber(UniAssertSubscriber.create()); @@ -166,11 +189,16 @@ void shouldOnboardingInstitutionWithParentTaxCodeException() { billing.setTaxCodeInvoicing("taxCodeInvoicing"); onboarding.setBilling(billing); + OnboardingUtils.ProxyResource proxyResource = OnboardingUtils.ProxyResource.builder() + .type(InstitutionPaSubunitType.UO) + .resource(uoResource) + .build(); + when(uoApi.findByUnicodeUsingGET1(any(), any())) .thenReturn(Uni.createFrom().item(uoResource)); UniAssertSubscriber subscriber = onboardingUtils - .customValidationOnboardingData(onboarding, dummyProduct()) + .customValidationOnboardingData(onboarding, dummyProduct(), proxyResource) .subscribe() .withSubscriber(UniAssertSubscriber.create()); @@ -209,8 +237,14 @@ void shouldOnboardingInstitutionWithTaxCodeInvoicingException() { when(uoApi.findAllUsingGET1(any(), any(), any())) .thenReturn(Uni.createFrom().item(uOsResource)); + OnboardingUtils.ProxyResource proxyResource = OnboardingUtils.ProxyResource.builder() + .type(InstitutionPaSubunitType.UO) + .resource(uoResource) + .build(); + + UniAssertSubscriber subscriber = onboardingUtils - .customValidationOnboardingData(onboarding, dummyProduct()) + .customValidationOnboardingData(onboarding, dummyProduct(), proxyResource) .subscribe() .withSubscriber(UniAssertSubscriber.create()); @@ -250,14 +284,60 @@ void checkRecipientCodeNoBilling() { AOOsResource uOsResource = new AOOsResource(); uOsResource.setItems(List.of(resource)); + OnboardingUtils.ProxyResource proxyResource = OnboardingUtils.ProxyResource.builder() + .type(InstitutionPaSubunitType.AOO) + .resource(resource) + .build(); + UniAssertSubscriber subscriber = onboardingUtils - .customValidationOnboardingData(onboarding, dummyProduct()) + .customValidationOnboardingData(onboarding, dummyProduct(), proxyResource) .subscribe() .withSubscriber(UniAssertSubscriber.create()); subscriber.assertFailedWith(InvalidRequestException.class); } + @Test + void checkRecipientCodeFailure() { + + Onboarding onboarding = new Onboarding(); + Institution institution = new Institution(); + institution.setOriginId("ipaCode"); + institution.setSubunitCode("subunitCode"); + institution.setSubunitType(InstitutionPaSubunitType.AOO); + 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.setTaxCodeInvoicing("taxCodeInvoicing"); + billing.setRecipientCode("recipientCode"); + onboarding.setBilling(billing); + + UOResource uoResource = new UOResource(); + uoResource.setCodiceIpa("ipaCode"); + uoResource.setCodiceFiscaleEnte("taxCode1"); + + ClientWebApplicationException exception = new ClientWebApplicationException(HttpStatus.SC_INTERNAL_SERVER_ERROR); + when(uoApi.findByUnicodeUsingGET1(any(), any())) + .thenReturn(Uni.createFrom().failure(exception)); + + OnboardingUtils.ProxyResource proxyResource = OnboardingUtils.ProxyResource.builder() + .type(InstitutionPaSubunitType.AOO) + .resource(resource) + .build(); + + UniAssertSubscriber subscriber = onboardingUtils + .customValidationOnboardingData(onboarding, dummyProduct(), proxyResource) + .subscribe() + .withSubscriber(UniAssertSubscriber.create()); + + subscriber.assertFailedWith(Exception.class); + } + @Test void checkRecipientCodeUONoBilling() { @@ -284,8 +364,13 @@ void checkRecipientCodeUONoBilling() { when(uoApi.findByUnicodeUsingGET1(any(), any())) .thenReturn(Uni.createFrom().item(uoResource)); + OnboardingUtils.ProxyResource proxyResource = OnboardingUtils.ProxyResource.builder() + .type(InstitutionPaSubunitType.UO) + .resource(uoResource) + .build(); + UniAssertSubscriber subscriber = onboardingUtils - .customValidationOnboardingData(onboarding, dummyProduct()) + .customValidationOnboardingData(onboarding, dummyProduct(), proxyResource) .subscribe() .withSubscriber(UniAssertSubscriber.create()); @@ -326,8 +411,13 @@ void checkRecipientCodeNoAssociation() { AOOsResource uOsResource = new AOOsResource(); uOsResource.setItems(List.of(aooResource)); + OnboardingUtils.ProxyResource proxyResource = OnboardingUtils.ProxyResource.builder() + .type(InstitutionPaSubunitType.AOO) + .resource(aooResource) + .build(); + UniAssertSubscriber subscriber = onboardingUtils - .customValidationOnboardingData(onboarding, dummyProduct()) + .customValidationOnboardingData(onboarding, dummyProduct(), proxyResource) .subscribe() .withSubscriber(UniAssertSubscriber.create()); @@ -360,8 +450,12 @@ void checkRecipientCodeSuccess() { UOsResource uOsResource = new UOsResource(); uOsResource.setItems(List.of(uoResource)); + OnboardingUtils.ProxyResource proxyResource = OnboardingUtils.ProxyResource.builder() + .type(InstitutionPaSubunitType.EC) + .build(); + UniAssertSubscriber subscriber = onboardingUtils - .customValidationOnboardingData(onboarding, dummyProduct()) + .customValidationOnboardingData(onboarding, dummyProduct(), proxyResource) .subscribe() .withSubscriber(UniAssertSubscriber.create());