Skip to content

Commit

Permalink
[SELC-5384] fix: added check for EC recipient code in case of AOO/UO …
Browse files Browse the repository at this point in the history
…onboarding (#457)

Co-authored-by: pierpaolo.didato@emeal.nttdata.com <Aiap1955?^@#>
  • Loading branch information
pierpaolodidato89 and pierpaolo.didato@emeal.nttdata.com authored Aug 29, 2024
1 parent 4f0cb3b commit 27ce6cd
Show file tree
Hide file tree
Showing 4 changed files with 104 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1082,7 +1082,7 @@ public Uni<Boolean> checkManager(OnboardingUserRequest onboardingUserRequest) {
public Uni<CustomError> checkRecipientCode(String recipientCode, String originId) {
return onboardingUtils.getUoFromRecipientCode(recipientCode).onItem()
.transformToUni(uoResource ->
onboardingUtils.validationRecipientCode(originId, uoResource));
onboardingUtils.getValidationRecipientCodeError(originId, uoResource));
}

private static Uni<Long> updateOnboardingValues(String onboardingId, Onboarding onboarding) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
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;
Expand All @@ -14,11 +13,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
Expand All @@ -28,6 +30,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";
Expand All @@ -46,13 +51,10 @@ public Uni<Onboarding> customValidationOnboardingData(Onboarding onboarding, Pro
}

private Uni<Void> 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()));
Expand All @@ -63,6 +65,23 @@ private Uni<Void> checkRecipientCode(Onboarding onboarding) {
return Uni.createFrom().nullItem();
}

private Uni<CustomError> 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<UOResource> getUoFromRecipientCode(String recipientCode) {
return uoApi.findByUnicodeUsingGET1(recipientCode, null)
.onFailure(WebApplicationException.class)
Expand All @@ -74,8 +93,8 @@ public Uni<UOResource> getUoFromRecipientCode(String recipientCode) {
: Uni.createFrom().failure(ex));
}

public Uni<CustomError> validationRecipientCode(String originId, UOResource uoResource) {
if (!originId.equals(uoResource.getCodiceIpa())) {
public Uni<CustomError> getValidationRecipientCodeError(String originIdEC, UOResource uoResource) {
if (!originIdEC.equals(uoResource.getCodiceIpa())) {
return Uni.createFrom().item(DENIED_NO_ASSOCIATION);
}
if (Objects.isNull(uoResource.getCodiceFiscaleSfe())) {
Expand Down Expand Up @@ -136,9 +155,16 @@ private Uni<Onboarding> 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());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -34,6 +37,11 @@ public class OnboardingUtilsTest {
@InjectMock
@RestClient
UoApi uoApi;

@InjectMock
@RestClient
AooApi aooApi;

@Inject
OnboardingUtils onboardingUtils;

Expand Down Expand Up @@ -219,21 +227,62 @@ 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();
billing.setTaxCodeInvoicing("taxCodeInvoicing");
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<Onboarding> 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<Onboarding> subscriber = onboardingUtils
.customValidationOnboardingData(onboarding, dummyProduct())
Expand All @@ -253,22 +302,29 @@ 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();
billing.setTaxCodeInvoicing("taxCodeInvoicing");
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<Onboarding> subscriber = onboardingUtils
.customValidationOnboardingData(onboarding, dummyProduct())
Expand All @@ -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();
Expand Down

0 comments on commit 27ce6cd

Please sign in to comment.