diff --git a/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/service/CompletionServiceDefault.java b/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/service/CompletionServiceDefault.java index c19731a75..cd82e099e 100644 --- a/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/service/CompletionServiceDefault.java +++ b/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/service/CompletionServiceDefault.java @@ -93,8 +93,7 @@ public class CompletionServiceDefault implements CompletionService { public String createInstitutionAndPersistInstitutionId(Onboarding onboarding) { Institution institution = onboarding.getInstitution(); - - InstitutionsResponse institutionsResponse = institutionApi.getInstitutionsUsingGET(institution.getTaxCode(), institution.getSubunitCode(), null, null); + InstitutionsResponse institutionsResponse = getInstitutionsByFilters(institution); if(Objects.nonNull(institutionsResponse.getInstitutions()) && institutionsResponse.getInstitutions().size() > 1){ throw new GenericOnboardingException("List of institutions is ambiguous, it is empty or has more than one element!!"); } @@ -111,6 +110,17 @@ public String createInstitutionAndPersistInstitutionId(Onboarding onboarding) { return institutionResponse.getId(); } + private InstitutionsResponse getInstitutionsByFilters(Institution institution) { + InstitutionsResponse institutionsResponse; + if(!Objects.isNull(institution.getTaxCode())) { + institutionsResponse = institutionApi.getInstitutionsUsingGET(institution.getTaxCode(), institution.getSubunitCode(), null, null); + } else { + String origin = !Objects.isNull(institution.getOrigin()) ? institution.getOrigin().getValue() : null; + institutionsResponse = institutionApi.getInstitutionsUsingGET(null, null, origin, institution.getOriginId()); + } + return institutionsResponse; + } + /** * Function that creates institution based on institution type and Origin, * Origin indicates which is the indexes where data come from, for ex. IPA comes from index of Pubbliche Amministrazioni diff --git a/apps/onboarding-functions/src/test/java/it/pagopa/selfcare/onboarding/service/CompletionServiceDefaultTest.java b/apps/onboarding-functions/src/test/java/it/pagopa/selfcare/onboarding/service/CompletionServiceDefaultTest.java index 73b638a1b..38fa934cd 100644 --- a/apps/onboarding-functions/src/test/java/it/pagopa/selfcare/onboarding/service/CompletionServiceDefaultTest.java +++ b/apps/onboarding-functions/src/test/java/it/pagopa/selfcare/onboarding/service/CompletionServiceDefaultTest.java @@ -139,6 +139,7 @@ void createInstitutionAndPersistInstitutionId_notFoundInstitutionAndCreateSaAnac Onboarding onboarding = createOnboarding(); Institution institutionSa = new Institution(); + institutionSa.setTaxCode("taxCode"); institutionSa.setInstitutionType(InstitutionType.SA); institutionSa.setOrigin(Origin.ANAC); onboarding.setInstitution(institutionSa); @@ -155,10 +156,11 @@ void createInstitutionAndPersistInstitutionId_notFoundInstitutionAndCreateSaAnac } @Test - void createInstitutionAndPersistInstitutionId_notFoundInstitutionAndCreateAsIvass() { + void createInstitutionAndPersistInstitutionId_notFoundInstitutionAndCreateAsIvassWithTaxCode() { Onboarding onboarding = createOnboarding(); Institution institution = new Institution(); + institution.setTaxCode("taxCode"); institution.setInstitutionType(InstitutionType.AS); institution.setOrigin(Origin.IVASS); onboarding.setInstitution(institution); @@ -173,11 +175,32 @@ void createInstitutionAndPersistInstitutionId_notFoundInstitutionAndCreateAsIvas mockOnboardingUpdateAndExecuteCreateInstitution(onboarding, institutionResponse); } + + @Test + void createInstitutionAndPersistInstitutionId_notFoundInstitutionAndCreateAsIvassWithOrigin() { + Onboarding onboarding = createOnboarding(); + + Institution institution = new Institution(); + institution.setInstitutionType(InstitutionType.AS); + institution.setOrigin(Origin.IVASS); + institution.setOriginId("originId"); + onboarding.setInstitution(institution); + + InstitutionsResponse response = new InstitutionsResponse(); + when(institutionApi.getInstitutionsUsingGET(null, null, Origin.IVASS.getValue(), "originId")) + .thenReturn(response); + + InstitutionResponse institutionResponse = dummyInstitutionResponse(); + when(institutionApi.createInstitutionFromIvassUsingPOST(any())).thenReturn(institutionResponse); + + mockOnboardingUpdateAndExecuteCreateInstitution(onboarding, institutionResponse); + } @Test void createInstitutionAndPersistInstitutionId_notFoundInstitutionAndCreatePgAde() { Onboarding onboarding = createOnboarding(); Institution institution = new Institution(); + institution.setTaxCode("taxCode"); institution.setInstitutionType(InstitutionType.PG); institution.setOrigin(Origin.ADE); onboarding.setInstitution(institution); @@ -197,6 +220,7 @@ void createInstitutionAndPersistInstitutionId_notFoundInstitutionAndCreatePaAOO( Onboarding onboarding = createOnboarding(); Institution institution = new Institution(); + institution.setTaxCode("taxCode"); institution.setInstitutionType(InstitutionType.PA); institution.setSubunitType(InstitutionPaSubunitType.AOO); institution.setSubunitCode("code"); @@ -232,6 +256,7 @@ void createInstitutionAndPersistInstitutionId_notFoundInstitutionAndCreatePaUO() Onboarding onboarding = createOnboarding(); Institution institution = new Institution(); + institution.setTaxCode("taxCode"); institution.setInstitutionType(InstitutionType.PA); institution.setSubunitType(InstitutionPaSubunitType.UO); institution.setSubunitCode("code");