Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge main into releases/0.3.2 #427

Closed
wants to merge 16 commits into from
Closed
Show file tree
Hide file tree
Changes from 7 commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -116,28 +116,35 @@ public CompletionServiceDefault(ProductService productService,

@Override
public String createInstitutionAndPersistInstitutionId(Onboarding onboarding) {
InstitutionResponse institutionResponse;
//When onboarding a pg institution this condition ensures that the institution's informations are persisted correctly
if(forceInstitutionCreation){
institutionResponse = createInstitution(onboarding.getInstitution());
}else {
Institution institution = onboarding.getInstitution();
InstitutionsResponse institutionsResponse = getInstitutions(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!!");
}

institutionResponse =
Objects.isNull(institutionsResponse.getInstitutions()) || institutionsResponse.getInstitutions().isEmpty()
? createInstitution(institution)
: institutionsResponse.getInstitutions().get(0);
InstitutionResponse institutionResponse = createOrRetrieveInstitution(onboarding);

if (Objects.nonNull(institutionResponse)) {
onboardingRepository
.update("institution.id = ?1 and updatedAt = ?2 ", institutionResponse.getId(), LocalDateTime.now())
.where("_id", onboarding.getId());
return institutionResponse.getId();
}

throw new GenericOnboardingException("Error when create institutions!");
}

public InstitutionResponse createOrRetrieveInstitution(Onboarding onboarding) {
if (forceInstitutionCreation) {
//When onboarding a pg institution this condition ensures that the institution's informations are persisted correctly
return createInstitution(onboarding.getInstitution());
}

Institution institution = onboarding.getInstitution();
InstitutionsResponse institutionsResponse = getInstitutions(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!!");
}
return institutionResponse.getId();

return
Objects.isNull(institutionsResponse.getInstitutions()) || institutionsResponse.getInstitutions().isEmpty()
? createInstitution(institution)
: institutionsResponse.getInstitutions().get(0);
}

private InstitutionsResponse getInstitutions(Institution institution) {
Expand Down Expand Up @@ -192,9 +199,21 @@ private InstitutionResponse createInstitution(Institution institution) {
return institutionApi.createInstitutionFromIpaUsingPOST(fromIpaPost);
}

InstitutionRequest institutionRequest = institutionMapper.toInstitutionRequest(institution);
// Override category in case of GSP not present in IPA
if (InstitutionType.GSP.equals(institution.getInstitutionType()) && !Origin.IPA.equals(institution.getOrigin())) {
setGSPCategory(institutionRequest);
}
return institutionApi.createInstitutionUsingPOST(institutionMapper.toInstitutionRequest(institution));
}

private void setGSPCategory(InstitutionRequest institutionRequest) {
AttributesRequest category = new AttributesRequest();
category.setCode("L37");
category.setDescription("Gestori di Pubblici Servizi");
institutionRequest.setAttributes(List.of(category));
}

private boolean isInstitutionPresentOnIpa(Institution institution) {
try {
if (InstitutionPaSubunitType.AOO.equals(institution.getSubunitType())) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
import org.openapi.quarkus.user_registry_json.model.UserResource;
import org.openapi.quarkus.user_registry_json.model.WorkContactResource;

import java.lang.reflect.Field;
import java.time.LocalDateTime;
import java.util.*;
import java.util.logging.Logger;
Expand Down Expand Up @@ -120,6 +121,46 @@ void createInstitutionAndPersistInstitutionId_foundInstitution() {
mockOnboardingUpdateAndExecuteCreateInstitution(onboarding);
}

@Test
void createOrRetrieveInstitutionSuccess() {
Onboarding onboarding = createOnboarding();
Institution institution = new Institution();
institution.setId("actual-id");
institution.setTaxCode("123");
onboarding.setInstitution(institution);

InstitutionsResponse response = new InstitutionsResponse();
InstitutionResponse institutionResponse = new InstitutionResponse();
institutionResponse.setId("actual-id");
response.setInstitutions(List.of(institutionResponse));

when(institutionApi.getInstitutionsUsingGET(institution.getTaxCode(), null, null, null))
.thenReturn(response);

InstitutionResponse serviceResponse = completionServiceDefault.createOrRetrieveInstitution(onboarding);

assertNotNull(serviceResponse);
assertEquals(serviceResponse.getId(), "actual-id");
}

@Test
void createOrRetrieveInstitutionFailure() {
Onboarding onboarding = createOnboarding();
Institution institution = new Institution();
institution.setId("actual-id");
institution.setTaxCode("123");
onboarding.setInstitution(institution);

InstitutionsResponse response = new InstitutionsResponse();
InstitutionResponse institutionResponse = new InstitutionResponse();
response.setInstitutions(List.of(institutionResponse, institutionResponse));

when(institutionApi.getInstitutionsUsingGET(institution.getTaxCode(), null, null, null))
.thenReturn(response);

assertThrows(GenericOnboardingException.class, () -> completionServiceDefault.createOrRetrieveInstitution(onboarding));
}

void mockOnboardingUpdateAndExecuteCreateInstitution(Onboarding onboarding){
PanacheUpdate panacheUpdateMock = mock(PanacheUpdate.class);
when(panacheUpdateMock.where("_id", onboarding.getId()))
Expand All @@ -133,6 +174,22 @@ void mockOnboardingUpdateAndExecuteCreateInstitution(Onboarding onboarding){
.update("institution.id = ?1 and updatedAt = ?2 ", any(), any());
}

@Test
void persistUpadatedAt(){
Onboarding onboarding = createOnboarding();

PanacheUpdate panacheUpdateMock = mock(PanacheUpdate.class);
when(panacheUpdateMock.where("_id", onboarding.getId()))
.thenReturn(Long.valueOf(1));
when(onboardingRepository.update("activatedAt.id = ?1 and updatedAt = ?2 ", any(), any()))
.thenReturn(panacheUpdateMock);

completionServiceDefault.persistActivatedAt(onboarding);

verify(onboardingRepository, times(1))
.update("activatedAt = ?1 and updatedAt = ?2 ", any(), any());
}

@Test
void createInstitutionAndPersistInstitutionId_notFoundInstitutionAndCreateSaAnac() {
Onboarding onboarding = createOnboarding();
Expand Down
Loading