From d1c7698b65c224753c8671027e9ae66948236d0a Mon Sep 17 00:00:00 2001 From: Giampiero Ferrara Date: Thu, 5 Dec 2024 16:06:27 +0100 Subject: [PATCH 01/18] [SELC-6109] feat: Added aggregator value for checkbox (PRV) --- .../selfcare/onboarding/utils/PdfMapper.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/utils/PdfMapper.java b/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/utils/PdfMapper.java index 163cc3edc..c89765b2b 100644 --- a/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/utils/PdfMapper.java +++ b/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/utils/PdfMapper.java @@ -6,9 +6,18 @@ import it.pagopa.selfcare.onboarding.common.InstitutionType; import it.pagopa.selfcare.onboarding.common.Origin; import it.pagopa.selfcare.onboarding.common.PricingPlan; -import it.pagopa.selfcare.onboarding.entity.*; +import it.pagopa.selfcare.onboarding.entity.Billing; +import it.pagopa.selfcare.onboarding.entity.GeographicTaxonomy; +import it.pagopa.selfcare.onboarding.entity.Institution; +import it.pagopa.selfcare.onboarding.entity.Onboarding; +import it.pagopa.selfcare.onboarding.entity.User; import it.pagopa.selfcare.onboarding.exception.GenericOnboardingException; -import java.util.*; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; import org.apache.commons.lang3.StringUtils; import org.openapi.quarkus.user_registry_json.model.CertifiableFieldResourceOfstring; import org.openapi.quarkus.user_registry_json.model.UserResource; @@ -202,6 +211,8 @@ public static void setupPRVData( Optional.ofNullable(onboarding.getBilling().getRecipientCode()).orElse(UNDERSCORE)); } + map.put("isAggregatorCheckbox", Boolean.TRUE.equals(onboarding.getIsAggregator()) ? "X" : ""); + setECData(map, onboarding); addAggregatesCsvLink(onboarding, map, baseUrl); } From 768255bae37143cd429c47869ed02745dc7c5f17 Mon Sep 17 00:00:00 2001 From: andrea-putzu <106688558+andrea-putzu@users.noreply.github.com> Date: Thu, 5 Dec 2024 16:24:29 +0100 Subject: [PATCH 02/18] [SELC-6138] Adding geographicTaxonomies on PNPG institutions (#630) --- .../entity/registry/RegistryManagerADE.java | 11 +++++++++++ .../entity/registry/RegistryManagerInfocamere.java | 13 +++++++++++++ 2 files changed, 24 insertions(+) diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerADE.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerADE.java index 21c9337c2..43aad95d0 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerADE.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerADE.java @@ -7,6 +7,9 @@ import org.openapi.quarkus.party_registry_proxy_json.api.NationalRegistriesApi; import org.openapi.quarkus.user_registry_json.api.UserApi; +import java.util.ArrayList; +import java.util.Objects; + public class RegistryManagerADE extends ClientRegistryADE { public RegistryManagerADE(Onboarding onboarding, NationalRegistriesApi nationalRegistriesApi, UserApi userApi) { @@ -23,4 +26,12 @@ public Uni isValid() { return Uni.createFrom().item(true); } + @Override + public RegistryManager setResource(Boolean registryResource) { + this.registryResource = registryResource; + if (Objects.isNull(onboarding.getInstitution().getGeographicTaxonomies())) { + onboarding.getInstitution().setGeographicTaxonomies(new ArrayList<>()); + } + return this; + } } diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerInfocamere.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerInfocamere.java index 1d9d4b8e4..c75ab0fe5 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerInfocamere.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerInfocamere.java @@ -1,10 +1,15 @@ package it.pagopa.selfcare.onboarding.entity.registry; import io.smallrye.mutiny.Uni; +import it.pagopa.selfcare.onboarding.entity.IPAEntity; import it.pagopa.selfcare.onboarding.entity.Onboarding; import it.pagopa.selfcare.onboarding.entity.registry.client.ClientRegistryInfocamere; import it.pagopa.selfcare.product.entity.Product; import org.openapi.quarkus.party_registry_proxy_json.api.InfocamereApi; +import org.openapi.quarkus.party_registry_proxy_json.model.BusinessesResource; + +import java.util.ArrayList; +import java.util.Objects; public class RegistryManagerInfocamere extends ClientRegistryInfocamere { @@ -22,4 +27,12 @@ public Uni isValid() { return Uni.createFrom().item(true); } + @Override + public RegistryManager setResource(BusinessesResource registryResource) { + this.registryResource = registryResource; + if (Objects.isNull(onboarding.getInstitution().getGeographicTaxonomies())) { + onboarding.getInstitution().setGeographicTaxonomies(new ArrayList<>()); + } + return this; + } } From 3b40988130f8c8dabb327813d9b91aa4a77206da Mon Sep 17 00:00:00 2001 From: pierpaolodidato89 <137791912+pierpaolodidato89@users.noreply.github.com> Date: Thu, 5 Dec 2024 18:10:43 +0100 Subject: [PATCH 03/18] Added new attribute into token object --- .../it/pagopa/selfcare/onboarding/entity/Token.java | 5 +++++ .../selfcare/onboarding/service/OnboardingService.java | 1 + .../onboarding/service/OnboardingServiceTest.java | 10 +--------- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/entity/Token.java b/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/entity/Token.java index a2dd210e2..14972a5a5 100644 --- a/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/entity/Token.java +++ b/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/entity/Token.java @@ -15,6 +15,7 @@ public class Token { private TokenType type; private String onboardingId; private String productId; + private String name; private String checksum; private String contractVersion; private String contractTemplate; @@ -129,5 +130,9 @@ public String getContractFilename() { public void setContractFilename(String contractFilename) { this.contractFilename = contractFilename; } + + public String getName() { return name; } + + public void setName(String name) { this.name = name; } } diff --git a/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingService.java b/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingService.java index 4681432ad..30d3d0d5a 100644 --- a/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingService.java +++ b/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingService.java @@ -191,6 +191,7 @@ private void saveTokenAttachment( // Persist token entity Token token = buildBaseToken(onboarding, digest); token.setId(UUID.randomUUID().toString()); + token.setName(attachmentTemplate.getName()); token.setContractTemplate(attachmentTemplate.getTemplatePath()); token.setContractVersion(attachmentTemplate.getTemplateVersion()); token.setContractFilename( diff --git a/apps/onboarding-functions/src/test/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceTest.java b/apps/onboarding-functions/src/test/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceTest.java index 99b97301e..d7dd033c3 100644 --- a/apps/onboarding-functions/src/test/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceTest.java +++ b/apps/onboarding-functions/src/test/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceTest.java @@ -251,15 +251,6 @@ private static AttachmentTemplate createDummyAttachmentTemplate() { return attachmentTemplate; } - private static Map createDummyContractTemplateUser() { - Map institutionTemplate = new HashMap<>(); - ContractTemplate conctractTemplate = new ContractTemplate(); - conctractTemplate.setContractTemplatePath("example"); - conctractTemplate.setContractTemplateVersion("version"); - institutionTemplate.put("default", conctractTemplate); - return institutionTemplate; - } - @Test void saveToken_shouldSkipIfTokenExists() { OnboardingWorkflow onboardingWorkflow = new OnboardingWorkflowInstitution(); @@ -340,6 +331,7 @@ void saveTokenAttachment() { ArgumentCaptor tokenArgumentCaptor = ArgumentCaptor.forClass(Token.class); Mockito.verify(tokenRepository, Mockito.times(1)).persist(tokenArgumentCaptor.capture()); assertEquals(onboarding.getProductId(), tokenArgumentCaptor.getValue().getProductId()); + assertEquals(attachmentTemplate.getName(), tokenArgumentCaptor.getValue().getName()); assertEquals(digestExpected, tokenArgumentCaptor.getValue().getChecksum()); } From c5b4dcbf961350ce042db953d3516a2ac25b5d12 Mon Sep 17 00:00:00 2001 From: gianmarcoplutino Date: Thu, 5 Dec 2024 21:42:07 +0100 Subject: [PATCH 04/18] feat: updated onboardingRequest type for completion APIs --- apps/onboarding-ms/src/main/docs/openapi.json | 39 +++++++++----- apps/onboarding-ms/src/main/docs/openapi.yaml | 24 +++++---- .../controller/OnboardingController.java | 53 ++++++------------- .../selfcare/onboarding/util/Utils.java | 9 ---- .../controller/OnboardingControllerTest.java | 9 ++-- 5 files changed, 61 insertions(+), 73 deletions(-) diff --git a/apps/onboarding-ms/src/main/docs/openapi.json b/apps/onboarding-ms/src/main/docs/openapi.json index fe10a7be6..29fe65940 100644 --- a/apps/onboarding-ms/src/main/docs/openapi.json +++ b/apps/onboarding-ms/src/main/docs/openapi.json @@ -504,17 +504,22 @@ "content" : { "multipart/form-data" : { "schema" : { - "required" : [ "contract", "onboardingRequest" ], + "required" : [ "contract" ], "type" : "object", "properties" : { + "onboardingRequest" : { + "$ref" : "#/components/schemas/OnboardingDefaultRequest" + }, "contract" : { "format" : "binary", "type" : "string" - }, - "onboardingRequest" : { - "type" : "string" } } + }, + "encoding" : { + "onboardingRequest" : { + "contentType" : "application/json" + } } } } @@ -692,17 +697,22 @@ "content" : { "multipart/form-data" : { "schema" : { - "required" : [ "contract", "onboardingRequest" ], + "required" : [ "contract" ], "type" : "object", "properties" : { + "onboardingRequest" : { + "$ref" : "#/components/schemas/OnboardingPaRequest" + }, "contract" : { "format" : "binary", "type" : "string" - }, - "onboardingRequest" : { - "type" : "string" } } + }, + "encoding" : { + "onboardingRequest" : { + "contentType" : "application/json" + } } } } @@ -854,17 +864,22 @@ "content" : { "multipart/form-data" : { "schema" : { - "required" : [ "contract", "onboardingRequest" ], + "required" : [ "contract" ], "type" : "object", "properties" : { + "onboardingRequest" : { + "$ref" : "#/components/schemas/OnboardingPspRequest" + }, "contract" : { "format" : "binary", "type" : "string" - }, - "onboardingRequest" : { - "type" : "string" } } + }, + "encoding" : { + "onboardingRequest" : { + "contentType" : "application/json" + } } } } diff --git a/apps/onboarding-ms/src/main/docs/openapi.yaml b/apps/onboarding-ms/src/main/docs/openapi.yaml index d3efcb77c..cda9a5405 100644 --- a/apps/onboarding-ms/src/main/docs/openapi.yaml +++ b/apps/onboarding-ms/src/main/docs/openapi.yaml @@ -370,14 +370,16 @@ paths: schema: required: - contract - - onboardingRequest type: object properties: + onboardingRequest: + $ref: "#/components/schemas/OnboardingDefaultRequest" contract: format: binary type: string - onboardingRequest: - type: string + encoding: + onboardingRequest: + contentType: application/json responses: "200": description: OK @@ -511,14 +513,16 @@ paths: schema: required: - contract - - onboardingRequest type: object properties: + onboardingRequest: + $ref: "#/components/schemas/OnboardingPaRequest" contract: format: binary type: string - onboardingRequest: - type: string + encoding: + onboardingRequest: + contentType: application/json responses: "200": description: OK @@ -628,14 +632,16 @@ paths: schema: required: - contract - - onboardingRequest type: object properties: + onboardingRequest: + $ref: "#/components/schemas/OnboardingPspRequest" contract: format: binary type: string - onboardingRequest: - type: string + encoding: + onboardingRequest: + contentType: application/json responses: "200": description: OK diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/OnboardingController.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/OnboardingController.java index 2901e6387..06aa03958 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/OnboardingController.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/OnboardingController.java @@ -33,6 +33,7 @@ import org.eclipse.microprofile.openapi.annotations.Operation; import org.eclipse.microprofile.openapi.annotations.extensions.Extension; import org.eclipse.microprofile.openapi.annotations.tags.Tag; +import org.jboss.resteasy.reactive.PartType; import org.jboss.resteasy.reactive.RestForm; import org.jboss.resteasy.reactive.server.core.ResteasyReactiveRequestContext; @@ -40,7 +41,6 @@ import java.util.List; import java.util.Objects; -import static it.pagopa.selfcare.onboarding.util.Utils.parseOnboardingRequest; import static it.pagopa.selfcare.onboarding.util.Utils.retrieveContractFromFormData; @Authenticated @@ -174,24 +174,17 @@ public Uni onboardingPsp(@Valid OnboardingPspRequest onboard @Produces(MediaType.APPLICATION_JSON) public Uni onboardingCompletion( @NotNull @RestForm("contract") File file, - @NotNull @RestForm("onboardingRequest") String onboardingRequestJson, + @NotNull @FormParam("onboardingRequest") @PartType(MediaType.APPLICATION_JSON) OnboardingDefaultRequest onboardingRequest, @Context ResteasyReactiveRequestContext ctx, @Context SecurityContext securityContext) { return readUserIdFromToken(securityContext) .onItem() .transformToUni( - userId -> { - // Parse JSON into OnboardingDefaultRequest - OnboardingDefaultRequest onboardingRequest = - parseOnboardingRequest(onboardingRequestJson, OnboardingDefaultRequest.class); - - // Call the onboarding service - return onboardingService.onboardingCompletion( - fillUserId(onboardingMapper.toEntity(onboardingRequest), userId), - onboardingRequest.getUsers(), - retrieveContractFromFormData(ctx.getFormData(), file)); - }); + userId -> onboardingService.onboardingCompletion( + fillUserId(onboardingMapper.toEntity(onboardingRequest), userId), + onboardingRequest.getUsers(), + retrieveContractFromFormData(ctx.getFormData(), file))); } @Operation( @@ -204,24 +197,17 @@ public Uni onboardingCompletion( @Produces(MediaType.APPLICATION_JSON) public Uni onboardingPaCompletion( @NotNull @RestForm("contract") File file, - @NotNull @RestForm("onboardingRequest") String onboardingRequestJson, + @NotNull @FormParam("onboardingRequest") @PartType(MediaType.APPLICATION_JSON) OnboardingPaRequest onboardingRequest, @Context ResteasyReactiveRequestContext ctx, @Context SecurityContext securityContext) { return readUserIdFromToken(securityContext) .onItem() .transformToUni( - userId -> { - // Parse JSON into OnboardingPaRequest - OnboardingPaRequest onboardingRequest = - parseOnboardingRequest(onboardingRequestJson, OnboardingPaRequest.class); - - // Call the onboarding service - return onboardingService.onboardingCompletion( - fillUserId(onboardingMapper.toEntity(onboardingRequest), userId), - onboardingRequest.getUsers(), - retrieveContractFromFormData(ctx.getFormData(), file)); - }); + userId -> onboardingService.onboardingCompletion( + fillUserId(onboardingMapper.toEntity(onboardingRequest), userId), + onboardingRequest.getUsers(), + retrieveContractFromFormData(ctx.getFormData(), file))); } @Operation( @@ -262,24 +248,17 @@ public Uni onboardingPspImport(@Valid OnboardingImportPspReq @Produces(MediaType.APPLICATION_JSON) public Uni onboardingPspCompletion( @NotNull @RestForm("contract") File file, - @NotNull @RestForm("onboardingRequest") String onboardingRequestJson, + @NotNull @FormParam("onboardingRequest") @PartType(MediaType.APPLICATION_JSON) OnboardingPspRequest onboardingRequest, @Context ResteasyReactiveRequestContext ctx, @Context SecurityContext securityContext) { return readUserIdFromToken(securityContext) .onItem() .transformToUni( - userId -> { - // Parse JSON into OnboardingPspRequest - OnboardingPspRequest onboardingRequest = - parseOnboardingRequest(onboardingRequestJson, OnboardingPspRequest.class); - - // Call the onboarding service - return onboardingService.onboardingCompletion( - fillUserId(onboardingMapper.toEntity(onboardingRequest), userId), - onboardingRequest.getUsers(), - retrieveContractFromFormData(ctx.getFormData(), file)); - }); + userId -> onboardingService.onboardingCompletion( + fillUserId(onboardingMapper.toEntity(onboardingRequest), userId), + onboardingRequest.getUsers(), + retrieveContractFromFormData(ctx.getFormData(), file))); } @Operation( diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/util/Utils.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/util/Utils.java index d2290f32e..f7c9237b8 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/util/Utils.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/util/Utils.java @@ -1,6 +1,5 @@ package it.pagopa.selfcare.onboarding.util; -import com.fasterxml.jackson.databind.ObjectMapper; import it.pagopa.selfcare.onboarding.constants.CustomError; import it.pagopa.selfcare.onboarding.exception.InvalidRequestException; import it.pagopa.selfcare.onboarding.model.FormItem; @@ -9,7 +8,6 @@ import org.jboss.resteasy.reactive.server.multipart.FormValue; import java.io.File; -import java.io.IOException; import java.util.Deque; import java.util.function.BinaryOperator; @@ -33,12 +31,5 @@ public static FormItem retrieveContractFromFormData(FormData formData, File file (filename, productName) -> String.format(filename, StringUtils.stripAccents(productName.replaceAll("\\s+", "_"))); - public static T parseOnboardingRequest(String onboardingRequestJson, Class targetType) { - try { - return new ObjectMapper().readValue(onboardingRequestJson, targetType); - } catch (IOException e) { - throw new InvalidRequestException("Invalid onboardingRequest JSON format for " + targetType.getSimpleName()); - } - } } diff --git a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/controller/OnboardingControllerTest.java b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/controller/OnboardingControllerTest.java index 0c25fbe96..949a727f2 100644 --- a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/controller/OnboardingControllerTest.java +++ b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/controller/OnboardingControllerTest.java @@ -59,9 +59,6 @@ class OnboardingControllerTest { static final OnboardingUserPgRequest onboardingUserPgValid; - final String onboardingRequestJson = - "{\"productId\":\"prod-pn\",\"users\":[{\"taxCode\":\"GRSGNT71A62C950S\",\"name\":\"Gianantonio\",\"surname\":\"Grassi\",\"email\":\"g.grassi@test.it\",\"role\":\"MANAGER\"}],\"institution\":{\"institutionType\":\"PA\",\"taxCode\":\"80415740580\",\"origin\":\"IPA\",\"originId\":\"m_ef\",\"city\":\"ROMA\",\"country\":\"IT\",\"county\":\"RM\",\"description\":\"Ministero dell'Economia e delle Finanze\",\"digitalAddress\":\"mef@pec.mef.gov.it\",\"address\":\"Via XX Settembre, 97\",\"zipCode\":\"00187\",\"geographicTaxonomies\":[{\"code\":\"ITA\",\"desc\":\"ITALIA\"}],\"imported\":true},\"billing\":{\"vatNumber\":\"80415740580\",\"recipientCode\":\"Y7NS8B\",\"publicServices\":true}}"; - @InjectMock OnboardingService onboardingService; @@ -591,7 +588,7 @@ void onboardingCompletionMultipart() { // Esecuzione della richiesta simulata given() .multiPart("contract", testFile) // Aggiunta del file - .multiPart("onboardingRequest", onboardingRequestJson) // Aggiunta del JSON come stringa + .multiPart("onboardingRequest", new OnboardingDefaultRequest()) // Aggiunta del JSON come stringa .contentType("multipart/form-data") .when() .post("/completion") @@ -616,7 +613,7 @@ void onboardingPaCompletionMultipart() { // Esecuzione della richiesta simulata given() .multiPart("contract", testFile) // Aggiunta del file - .multiPart("onboardingRequest", onboardingRequestJson) // Aggiunta del JSON come stringa + .multiPart("onboardingRequest", new OnboardingPaRequest()) // Aggiunta del JSON come stringa .contentType("multipart/form-data") .when() .post("/pa/completion") @@ -641,7 +638,7 @@ void onboardingPspCompletionMultipart() { // Esecuzione della richiesta simulata given() .multiPart("contract", testFile) // Aggiunta del file - .multiPart("onboardingRequest", onboardingRequestJson) // Aggiunta del JSON come stringa + .multiPart("onboardingRequest", new OnboardingPspRequest()) // Aggiunta del JSON come stringa .contentType("multipart/form-data") .when() .post("/psp/completion") From a84f33083c3f2f195ec0757474a31371071b0e23 Mon Sep 17 00:00:00 2001 From: pierpaolodidato89 <137791912+pierpaolodidato89@users.noreply.github.com> Date: Fri, 6 Dec 2024 16:56:29 +0100 Subject: [PATCH 05/18] [SELC-6133] feat: added attachments into response object for api v1/onboarding/{onboardingId}/withUserInfo --- apps/onboarding-ms/src/main/docs/openapi.json | 6 +++ apps/onboarding-ms/src/main/docs/openapi.yaml | 4 ++ .../controller/response/OnboardingGet.java | 1 + .../service/OnboardingServiceDefault.java | 40 ++++++++++--------- .../onboarding/service/TokenService.java | 2 + .../service/TokenServiceDefault.java | 10 ++++- .../service/OnboardingServiceDefaultTest.java | 6 +++ .../service/TokenServiceDefaultTest.java | 23 +++++++++++ 8 files changed, 72 insertions(+), 20 deletions(-) diff --git a/apps/onboarding-ms/src/main/docs/openapi.json b/apps/onboarding-ms/src/main/docs/openapi.json index 29fe65940..d8308f240 100644 --- a/apps/onboarding-ms/src/main/docs/openapi.json +++ b/apps/onboarding-ms/src/main/docs/openapi.json @@ -2373,6 +2373,12 @@ }, "reasonForReject" : { "type" : "string" + }, + "attachments" : { + "type" : "array", + "items" : { + "type" : "string" + } } } }, diff --git a/apps/onboarding-ms/src/main/docs/openapi.yaml b/apps/onboarding-ms/src/main/docs/openapi.yaml index cda9a5405..ae9dc5c86 100644 --- a/apps/onboarding-ms/src/main/docs/openapi.yaml +++ b/apps/onboarding-ms/src/main/docs/openapi.yaml @@ -1720,6 +1720,10 @@ components: type: string reasonForReject: type: string + attachments: + type: array + items: + type: string OnboardingGetResponse: type: object properties: diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/response/OnboardingGet.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/response/OnboardingGet.java index bc107a916..7c14e1322 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/response/OnboardingGet.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/response/OnboardingGet.java @@ -23,4 +23,5 @@ public class OnboardingGet { private String status; private String userRequestUid; private String reasonForReject; + private List attachments; } 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 035874fd8..5dd543902 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 @@ -1,5 +1,12 @@ package it.pagopa.selfcare.onboarding.service; +import static it.pagopa.selfcare.onboarding.common.ProductId.PROD_INTEROP; +import static it.pagopa.selfcare.onboarding.common.ProductId.PROD_PAGOPA; +import static it.pagopa.selfcare.onboarding.constants.CustomError.*; +import static it.pagopa.selfcare.onboarding.util.ErrorMessage.*; +import static it.pagopa.selfcare.onboarding.util.Utils.CONTRACT_FILENAME_FUNC; +import static it.pagopa.selfcare.product.utils.ProductUtils.validRoles; + import eu.europa.esig.dss.enumerations.DigestAlgorithm; import eu.europa.esig.dss.model.DSSDocument; import eu.europa.esig.dss.model.FileDocument; @@ -47,6 +54,15 @@ import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import jakarta.ws.rs.WebApplicationException; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.time.LocalDateTime; +import java.time.OffsetDateTime; +import java.util.*; +import java.util.function.Function; +import java.util.function.Supplier; +import java.util.stream.Collectors; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.bson.Document; @@ -70,23 +86,6 @@ import org.openapi.quarkus.user_registry_json.api.UserApi; import org.openapi.quarkus.user_registry_json.model.*; -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.time.LocalDateTime; -import java.time.OffsetDateTime; -import java.util.*; -import java.util.function.Function; -import java.util.function.Supplier; -import java.util.stream.Collectors; - -import static it.pagopa.selfcare.onboarding.common.ProductId.PROD_INTEROP; -import static it.pagopa.selfcare.onboarding.common.ProductId.PROD_PAGOPA; -import static it.pagopa.selfcare.onboarding.constants.CustomError.*; -import static it.pagopa.selfcare.onboarding.util.ErrorMessage.*; -import static it.pagopa.selfcare.onboarding.util.Utils.CONTRACT_FILENAME_FUNC; -import static it.pagopa.selfcare.product.utils.ProductUtils.validRoles; - @ApplicationScoped public class OnboardingServiceDefault implements OnboardingService { @@ -164,6 +163,8 @@ public class OnboardingServiceDefault implements OnboardingService { @Inject SignatureService signatureService; @Inject + TokenService tokenService; + @Inject AzureBlobClient azureBlobClient; @Inject UserMapper userMapper; @@ -1586,7 +1587,10 @@ public Uni onboardingGetWithUserInfo(String onboardingId) { OnboardingGet onboardingGet = onboardingMapper.toGetResponse(onboarding); onboardingGet.setUsers(userResponses); return onboardingGet; - })); + })) + .flatMap(onboardingGet -> tokenService.getAttachments(onboardingId) + .onItem().invoke(onboardingGet::setAttachments) + .replaceWith(onboardingGet)); } private Uni> toUserResponseWithUserInfo(List users) { diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/TokenService.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/TokenService.java index 5f41120ef..3f46264bc 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/TokenService.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/TokenService.java @@ -14,4 +14,6 @@ public interface TokenService { Uni> retrieveContractNotSigned(String onboardingId); Uni> retrieveAttachment(String onboardingId, String attachmentName); + + Uni> getAttachments(String onboardingId); } diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/TokenServiceDefault.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/TokenServiceDefault.java index 8416e6904..a10be16d2 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/TokenServiceDefault.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/TokenServiceDefault.java @@ -18,11 +18,9 @@ public class TokenServiceDefault implements TokenService { private final AzureBlobClient azureBlobClient; private final OnboardingMsConfig onboardingMsConfig; - public TokenServiceDefault(AzureBlobClient azureBlobClient, OnboardingMsConfig onboardingMsConfig) { this.azureBlobClient = azureBlobClient; this.onboardingMsConfig = onboardingMsConfig; - } @Override @@ -60,6 +58,14 @@ public Uni> retrieveAttachment(String onboardingId, String at })); } + @Override + public Uni> getAttachments(String onboardingId) { + return Token.find("onboardingId = ?1 and type = ?2", onboardingId, ATTACHMENT.name()) + .stream().onItem().transform(Token.class::cast) + .map(Token::getName) + .collect().asList(); + } + private String getAttachmentByOnboarding(String onboardingId, String filename) { return String.format("%s%s%s%s",onboardingMsConfig.getContractPath(), onboardingId, "/attachments", "/" + filename); } 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 fc0f2efb0..f7bca1f99 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 @@ -138,6 +138,9 @@ class OnboardingServiceDefaultTest { @InjectMock SignatureService signatureService; + @InjectMock + TokenService tokenService; + @InjectMock @RestClient OnboardingApi onboardingApi; @@ -1808,6 +1811,9 @@ void onboardingGetWithUserInfo() { when(userRegistryApi.findByIdUsingGET(anyString(), anyString())) .thenReturn(Uni.createFrom().item(managerResource)); + when(tokenService.getAttachments(any())) + .thenReturn(Uni.createFrom().item(List.of("filename"))); + UniAssertSubscriber subscriber = onboardingService .onboardingGetWithUserInfo(onboarding.getId()) .subscribe() diff --git a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/TokenServiceDefaultTest.java b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/TokenServiceDefaultTest.java index c025767dc..15f8d9b86 100644 --- a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/TokenServiceDefaultTest.java +++ b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/TokenServiceDefaultTest.java @@ -11,6 +11,7 @@ import io.quarkus.test.common.QuarkusTestResource; import io.quarkus.test.junit.QuarkusTest; import io.quarkus.test.mongodb.MongoTestResource; +import io.smallrye.mutiny.Multi; import io.smallrye.mutiny.Uni; import io.smallrye.mutiny.helpers.test.UniAssertSubscriber; import it.pagopa.selfcare.azurestorage.AzureBlobClient; @@ -90,4 +91,26 @@ void retrieveAttachment() { Assertions.assertNotNull(actual); Assertions.assertEquals(RestResponse.Status.OK.getStatusCode(), actual.getStatus()); } + + @Test + void getTokenAttachments() { + final String filename = "filename"; + Token token = new Token(); + token.setContractFilename(filename); + token.setName(filename); + ReactivePanacheQuery queryPage = mock(ReactivePanacheQuery.class); + when(queryPage.stream()).thenReturn(Multi.createFrom().item(token)); + + PanacheMock.mock(Token.class); + when(Token.find("onboardingId = ?1 and type = ?2", onboardingId, ATTACHMENT.name())) + .thenReturn(queryPage); + + UniAssertSubscriber> subscriber = tokenService.getAttachments(onboardingId) + .subscribe().withSubscriber(UniAssertSubscriber.create()); + + List actual = subscriber.awaitItem().getItem(); + Assertions.assertNotNull(actual); + Assertions.assertFalse(actual.isEmpty()); + Assertions.assertEquals(filename, actual.get(0)); + } } From fd3b717badb2f61a590b4da97e3e9e0d60edd5fc Mon Sep 17 00:00:00 2001 From: gianmarcoplutino <119858159+gianmarcoplutino@users.noreply.github.com> Date: Mon, 9 Dec 2024 10:41:36 +0100 Subject: [PATCH 06/18] [SELC-6162] feat: added tag internal-v1 to completion APIs (#633) --- apps/onboarding-ms/src/main/docs/openapi.json | 6 +++--- apps/onboarding-ms/src/main/docs/openapi.yaml | 3 +++ .../onboarding/controller/OnboardingController.java | 6 ++++++ 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/apps/onboarding-ms/src/main/docs/openapi.json b/apps/onboarding-ms/src/main/docs/openapi.json index d8308f240..47fc42137 100644 --- a/apps/onboarding-ms/src/main/docs/openapi.json +++ b/apps/onboarding-ms/src/main/docs/openapi.json @@ -496,7 +496,7 @@ }, "/v1/onboarding/completion" : { "post" : { - "tags" : [ "Onboarding Controller" ], + "tags" : [ "Onboarding Controller", "internal-v1" ], "summary" : "Complete onboarding request and set status to COMPLETED.", "description" : "Perform onboarding as /onboarding but completing the onboarding request to COMPLETED phase.", "operationId" : "onboardingCompletion", @@ -689,7 +689,7 @@ }, "/v1/onboarding/pa/completion" : { "post" : { - "tags" : [ "Onboarding Controller" ], + "tags" : [ "Onboarding Controller", "internal-v1" ], "summary" : "Complete PA onboarding request and set status to COMPLETED.", "description" : "Perform onboarding as /onboarding/pa but completing the onboarding request to COMPLETED phase.", "operationId" : "onboardingPaCompletion", @@ -856,7 +856,7 @@ }, "/v1/onboarding/psp/completion" : { "post" : { - "tags" : [ "Onboarding Controller" ], + "tags" : [ "Onboarding Controller", "internal-v1" ], "summary" : "Complete PSP onboarding request and set status to COMPLETED.", "description" : "Perform onboarding as /onboarding/psp but completing the onboarding request to COMPLETED phase.", "operationId" : "onboardingPspCompletion", diff --git a/apps/onboarding-ms/src/main/docs/openapi.yaml b/apps/onboarding-ms/src/main/docs/openapi.yaml index ae9dc5c86..453af0dfb 100644 --- a/apps/onboarding-ms/src/main/docs/openapi.yaml +++ b/apps/onboarding-ms/src/main/docs/openapi.yaml @@ -360,6 +360,7 @@ paths: post: tags: - Onboarding Controller + - internal-v1 summary: Complete onboarding request and set status to COMPLETED. description: Perform onboarding as /onboarding but completing the onboarding request to COMPLETED phase. @@ -503,6 +504,7 @@ paths: post: tags: - Onboarding Controller + - internal-v1 summary: Complete PA onboarding request and set status to COMPLETED. description: Perform onboarding as /onboarding/pa but completing the onboarding request to COMPLETED phase. @@ -622,6 +624,7 @@ paths: post: tags: - Onboarding Controller + - internal-v1 summary: Complete PSP onboarding request and set status to COMPLETED. description: Perform onboarding as /onboarding/psp but completing the onboarding request to COMPLETED phase. diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/OnboardingController.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/OnboardingController.java index 06aa03958..7fed09fb1 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/OnboardingController.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/OnboardingController.java @@ -170,6 +170,8 @@ public Uni onboardingPsp(@Valid OnboardingPspRequest onboard ) @Path("/completion") @POST + @Tag(name = "Onboarding Controller") + @Tag(name = "internal-v1") @Consumes(MediaType.MULTIPART_FORM_DATA) @Produces(MediaType.APPLICATION_JSON) public Uni onboardingCompletion( @@ -193,6 +195,8 @@ public Uni onboardingCompletion( "Perform onboarding as /onboarding/pa but completing the onboarding request to COMPLETED phase.") @POST @Path("/pa/completion") + @Tag(name = "Onboarding Controller") + @Tag(name = "internal-v1") @Consumes(MediaType.MULTIPART_FORM_DATA) @Produces(MediaType.APPLICATION_JSON) public Uni onboardingPaCompletion( @@ -244,6 +248,8 @@ public Uni onboardingPspImport(@Valid OnboardingImportPspReq "Perform onboarding as /onboarding/psp but completing the onboarding request to COMPLETED phase.") @POST @Path("/psp/completion") + @Tag(name = "Onboarding Controller") + @Tag(name = "internal-v1") @Consumes(MediaType.MULTIPART_FORM_DATA) @Produces(MediaType.APPLICATION_JSON) public Uni onboardingPspCompletion( From 78f9a28528ccbd67bfd65774459b2f30410c92a1 Mon Sep 17 00:00:00 2001 From: Giampiero Ferrara Date: Mon, 9 Dec 2024 11:27:44 +0100 Subject: [PATCH 07/18] [SELC-6155] feat: Added new method into SDK Azure --- libs/onboarding-sdk-azure-storage/pom.xml | 48 +++++++++++-------- .../azurestorage/AzureBlobClient.java | 4 +- .../azurestorage/AzureBlobClientDefault.java | 32 +++++++++++-- libs/onboarding-sdk-common/pom.xml | 2 +- libs/onboarding-sdk-crypto/pom.xml | 2 +- libs/onboarding-sdk-pom/pom.xml | 3 +- libs/onboarding-sdk-product/pom.xml | 4 +- 7 files changed, 64 insertions(+), 31 deletions(-) diff --git a/libs/onboarding-sdk-azure-storage/pom.xml b/libs/onboarding-sdk-azure-storage/pom.xml index 584872944..83c28b50a 100644 --- a/libs/onboarding-sdk-azure-storage/pom.xml +++ b/libs/onboarding-sdk-azure-storage/pom.xml @@ -1,28 +1,34 @@ - 4.0.0 - - it.pagopa.selfcare - onboarding-sdk-pom - 0.5.1 - ../onboarding-sdk-pom - + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + + it.pagopa.selfcare + onboarding-sdk-pom + 0.6.0 + ../onboarding-sdk-pom + - onboarding-sdk-azure-storage + onboarding-sdk-azure-storage - - UTF-8 - 12.24.0 - + + UTF-8 + 12.24.0 + 3.12.0 + - - - com.azure - azure-storage-blob - ${azure-storage-blob-version} - - + + + com.azure + azure-storage-blob + ${azure-storage-blob-version} + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + + \ No newline at end of file diff --git a/libs/onboarding-sdk-azure-storage/src/main/java/it/pagopa/selfcare/azurestorage/AzureBlobClient.java b/libs/onboarding-sdk-azure-storage/src/main/java/it/pagopa/selfcare/azurestorage/AzureBlobClient.java index 84f9b4ded..738dde5f1 100644 --- a/libs/onboarding-sdk-azure-storage/src/main/java/it/pagopa/selfcare/azurestorage/AzureBlobClient.java +++ b/libs/onboarding-sdk-azure-storage/src/main/java/it/pagopa/selfcare/azurestorage/AzureBlobClient.java @@ -1,8 +1,8 @@ package it.pagopa.selfcare.azurestorage; import com.azure.storage.blob.models.BlobProperties; - import java.io.File; +import java.util.List; public interface AzureBlobClient { @@ -17,4 +17,6 @@ public interface AzureBlobClient { void removeFile(String fileName); BlobProperties getProperties(String filePath); + + List getFiles(String path); } diff --git a/libs/onboarding-sdk-azure-storage/src/main/java/it/pagopa/selfcare/azurestorage/AzureBlobClientDefault.java b/libs/onboarding-sdk-azure-storage/src/main/java/it/pagopa/selfcare/azurestorage/AzureBlobClientDefault.java index 0e4478092..7db754e5d 100644 --- a/libs/onboarding-sdk-azure-storage/src/main/java/it/pagopa/selfcare/azurestorage/AzureBlobClientDefault.java +++ b/libs/onboarding-sdk-azure-storage/src/main/java/it/pagopa/selfcare/azurestorage/AzureBlobClientDefault.java @@ -5,17 +5,21 @@ import com.azure.storage.blob.BlobContainerClient; import com.azure.storage.blob.BlobServiceClient; import com.azure.storage.blob.BlobServiceClientBuilder; +import com.azure.storage.blob.models.BlobListDetails; import com.azure.storage.blob.models.BlobProperties; import com.azure.storage.blob.models.BlobStorageException; +import com.azure.storage.blob.models.ListBlobsOptions; import it.pagopa.selfcare.azurestorage.error.SelfcareAzureStorageError; import it.pagopa.selfcare.azurestorage.error.SelfcareAzureStorageException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class AzureBlobClientDefault implements AzureBlobClient { @@ -151,4 +155,26 @@ public BlobProperties getProperties(String filePath) { } } + @Override + public List getFiles(String path) { + log.debug("START - getFiles by given path: {}", path); + List listOfResource = new ArrayList<>(); + final BlobContainerClient blobContainer = blobClient.getBlobContainerClient(containerName); + + if (StringUtils.isNotEmpty(path)) { + + ListBlobsOptions options = new ListBlobsOptions() + .setPrefix(path) + .setDetails(new BlobListDetails() + .setRetrieveDeletedBlobs(true) + .setRetrieveSnapshots(true)); + + blobContainer.listBlobs(options, null).forEach(blob -> listOfResource.add(blob.getName())); + } + + log.debug("Results: {}", listOfResource.size()); + log.debug("END - getFiles"); + return listOfResource; + } + } diff --git a/libs/onboarding-sdk-common/pom.xml b/libs/onboarding-sdk-common/pom.xml index 683114db6..b5cb5b555 100644 --- a/libs/onboarding-sdk-common/pom.xml +++ b/libs/onboarding-sdk-common/pom.xml @@ -4,7 +4,7 @@ it.pagopa.selfcare onboarding-sdk-pom - 0.5.1 + 0.6.0 ../onboarding-sdk-pom onboarding-sdk-common diff --git a/libs/onboarding-sdk-crypto/pom.xml b/libs/onboarding-sdk-crypto/pom.xml index ad20423fe..c8e692fac 100644 --- a/libs/onboarding-sdk-crypto/pom.xml +++ b/libs/onboarding-sdk-crypto/pom.xml @@ -4,7 +4,7 @@ it.pagopa.selfcare onboarding-sdk-pom - 0.5.1 + 0.6.0 ../onboarding-sdk-pom onboarding-sdk-crypto diff --git a/libs/onboarding-sdk-pom/pom.xml b/libs/onboarding-sdk-pom/pom.xml index 3df12f050..788d3aa85 100644 --- a/libs/onboarding-sdk-pom/pom.xml +++ b/libs/onboarding-sdk-pom/pom.xml @@ -1,12 +1,11 @@ 4.0.0 - it.pagopa.selfcare onboarding-sdk-pom pom onboarding-sdk-pom - 0.5.1 + 0.6.0 17 diff --git a/libs/onboarding-sdk-product/pom.xml b/libs/onboarding-sdk-product/pom.xml index dd93ba908..69cad93f1 100644 --- a/libs/onboarding-sdk-product/pom.xml +++ b/libs/onboarding-sdk-product/pom.xml @@ -4,12 +4,12 @@ it.pagopa.selfcare onboarding-sdk-pom - 0.5.1 + 0.6.0 ../onboarding-sdk-pom onboarding-sdk-product onboarding-sdk-product - 0.5.1 + 0.6.0 2.15.2 From 68291956e8e6ace0ace83db74ffa04d8ab53af81 Mon Sep 17 00:00:00 2001 From: Giampiero Ferrara Date: Mon, 9 Dec 2024 11:58:33 +0100 Subject: [PATCH 08/18] [SELC_6159] feat: Update SDK dependency --- apps/onboarding-cdc/pom.xml | 2 +- apps/onboarding-functions/pom.xml | 2 +- apps/onboarding-ms/pom.xml | 652 +++++++++++++++--------------- apps/pom.xml | 2 +- test-coverage/lombok.config | 1 + test-coverage/pom.xml | 2 +- 6 files changed, 331 insertions(+), 330 deletions(-) create mode 100644 test-coverage/lombok.config diff --git a/apps/onboarding-cdc/pom.xml b/apps/onboarding-cdc/pom.xml index 275ce2c4b..29c21915f 100644 --- a/apps/onboarding-cdc/pom.xml +++ b/apps/onboarding-cdc/pom.xml @@ -14,7 +14,7 @@ 1.0.0-SNAPSHOT 3.11.0 - 1.18.28 + 1.18.36 1.5.5.Final 17 UTF-8 diff --git a/apps/onboarding-functions/pom.xml b/apps/onboarding-functions/pom.xml index 77535ed3a..20a0c95dc 100644 --- a/apps/onboarding-functions/pom.xml +++ b/apps/onboarding-functions/pom.xml @@ -22,7 +22,7 @@ true 3.1.2 1.5.5.Final - 0.5.1 + 0.6.0 diff --git a/apps/onboarding-ms/pom.xml b/apps/onboarding-ms/pom.xml index b56e8b669..676fceb89 100644 --- a/apps/onboarding-ms/pom.xml +++ b/apps/onboarding-ms/pom.xml @@ -1,340 +1,340 @@ - 4.0.0 - - it.pagopa.selfcare - onboarding-apps - 0.0.1 - + xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + 4.0.0 + + it.pagopa.selfcare + onboarding-apps + 0.0.1 + - onboarding-ms - 1.0.0-SNAPSHOT - - 3.11.0 - 1.18.28 - 1.5.5.Final - 17 - UTF-8 - UTF-8 - quarkus-bom - io.quarkus.platform - 3.11.2 - true - 3.1.2 - 2.4.1 - 0.5.1 - - - - - ${quarkus.platform.group-id} - ${quarkus.platform.artifact-id} - ${quarkus.platform.version} - pom - import - - - + onboarding-ms + 1.0.0-SNAPSHOT + + 3.11.0 + 1.18.36 + 1.5.5.Final + 17 + UTF-8 + UTF-8 + quarkus-bom + io.quarkus.platform + 3.11.2 + true + 3.1.2 + 2.4.1 + 0.6.0 + + - - io.quarkus - quarkus-resteasy-reactive - - - io.quarkus - quarkus-arc - - - io.quarkiverse.openapi.generator - quarkus-openapi-generator - ${quarkus-openapi-generator.version} - - - io.quarkus - quarkus-junit5 - test - - - net.jodah - expiringmap - 0.5.10 - compile - - - io.quarkus - quarkus-junit5-mockito - test - - - io.rest-assured - rest-assured - test - - - io.quarkus - quarkus-test-mongodb - - - org.projectlombok - lombok - ${lombok.version} - provided - - - io.quarkus - quarkus-hibernate-validator - - - io.quarkus - quarkus-resteasy-reactive-jackson - - - io.quarkus - quarkus-rest-client-reactive-jackson - - - io.quarkus - quarkus-smallrye-health - - - org.mapstruct - mapstruct - ${mapstruct.version} - - - io.quarkus - quarkus-smallrye-jwt - - - io.quarkus - quarkus-test-security - test - - - io.quarkus - quarkus-smallrye-openapi - - - io.quarkus - quarkus-mongodb-panache - - - io.quarkus - quarkus-smallrye-context-propagation - + + ${quarkus.platform.group-id} + ${quarkus.platform.artifact-id} + ${quarkus.platform.version} + pom + import + + + + + + io.quarkus + quarkus-resteasy-reactive + + + io.quarkus + quarkus-arc + + + io.quarkiverse.openapi.generator + quarkus-openapi-generator + ${quarkus-openapi-generator.version} + + + io.quarkus + quarkus-junit5 + test + + + net.jodah + expiringmap + 0.5.10 + compile + + + io.quarkus + quarkus-junit5-mockito + test + + + io.rest-assured + rest-assured + test + + + io.quarkus + quarkus-test-mongodb + + + io.quarkus + quarkus-hibernate-validator + + + io.quarkus + quarkus-resteasy-reactive-jackson + + + io.quarkus + quarkus-rest-client-reactive-jackson + + + io.quarkus + quarkus-smallrye-health + + + org.mapstruct + mapstruct + ${mapstruct.version} + + + io.quarkus + quarkus-smallrye-jwt + + + io.quarkus + quarkus-test-security + test + + + io.quarkus + quarkus-smallrye-openapi + + + io.quarkus + quarkus-mongodb-panache + + + io.quarkus + quarkus-smallrye-context-propagation + - - io.quarkus - quarkus-panache-mock - test - - - io.quarkus - quarkus-test-hibernate-reactive-panache - test - - - io.quarkus - quarkus-jacoco - test - - - io.quarkus - quarkus-test-security-jwt - test - + + io.quarkus + quarkus-panache-mock + test + + + io.quarkus + quarkus-test-hibernate-reactive-panache + test + + + io.quarkus + quarkus-jacoco + test + + + io.quarkus + quarkus-test-security-jwt + test + - - - eu.europa.ec.joinup.sd-dss - dss-test - 5.12.1 - test - - - - eu.europa.ec.joinup.sd-dss - dss-utils - 5.12.1 - - - eu.europa.ec.joinup.sd-dss - dss-model - 5.12.1 - compile - - - - eu.europa.ec.joinup.sd-dss - dss-service - 5.12.1 - - - - eu.europa.ec.joinup.sd-dss - dss-tsl-validation - 5.12.1 - - - - eu.europa.ec.joinup.sd-dss - dss-utils-google-guava - 5.12.1 - - - eu.europa.ec.joinup.sd-dss - dss-pades - 5.12.1 - - - eu.europa.ec.joinup.sd-dss - dss-pades-pdfbox - 5.12.1 - - - eu.europa.ec.joinup.sd-dss - dss-cades - 5.12.1 - - - eu.europa.ec.joinup.sd-dss - dss-utils-apache-commons - 5.12.1 - - - eu.europa.ec.joinup.sd-dss - dss-crl-parser-stream - 5.12.1 - + + + eu.europa.ec.joinup.sd-dss + dss-test + 5.12.1 + test + + + + eu.europa.ec.joinup.sd-dss + dss-utils + 5.12.1 + + + eu.europa.ec.joinup.sd-dss + dss-model + 5.12.1 + compile + + + + eu.europa.ec.joinup.sd-dss + dss-service + 5.12.1 + + + + eu.europa.ec.joinup.sd-dss + dss-tsl-validation + 5.12.1 + + + + eu.europa.ec.joinup.sd-dss + dss-utils-google-guava + 5.12.1 + + + eu.europa.ec.joinup.sd-dss + dss-pades + 5.12.1 + + + eu.europa.ec.joinup.sd-dss + dss-pades-pdfbox + 5.12.1 + + + eu.europa.ec.joinup.sd-dss + dss-cades + 5.12.1 + + + eu.europa.ec.joinup.sd-dss + dss-utils-apache-commons + 5.12.1 + + + eu.europa.ec.joinup.sd-dss + dss-crl-parser-stream + 5.12.1 + - - javax.xml.bind - jaxb-api - 2.3.1 - + + javax.xml.bind + jaxb-api + 2.3.1 + - - jakarta.activation - jakarta.activation-api - 2.1.0 - - - com.sun.xml.bind - jaxb-impl - 2.3.4 - + + jakarta.activation + jakarta.activation-api + 2.1.0 + + + com.sun.xml.bind + jaxb-impl + 2.3.4 + - - - com.opencsv - opencsv - 5.7.1 - - - com.github.tomakehurst - wiremock-jre8-standalone - 2.35.1 - compile - + + + com.opencsv + opencsv + 5.7.1 + + + com.github.tomakehurst + wiremock-jre8-standalone + 2.35.1 + compile + - - it.pagopa.selfcare - onboarding-sdk-azure-storage - ${commons-sdk-version} - - - it.pagopa.selfcare - onboarding-sdk-product - ${commons-sdk-version} - + + it.pagopa.selfcare + onboarding-sdk-azure-storage + ${commons-sdk-version} + + + it.pagopa.selfcare + onboarding-sdk-product + ${commons-sdk-version} + + + org.projectlombok + lombok + ${lombok.version} + provided + - - - - - ${quarkus.platform.group-id} - quarkus-maven-plugin - ${quarkus.platform.version} - true - - - - build - generate-code - generate-code-tests - - - - - - maven-compiler-plugin - ${compiler-plugin.version} - - - -parameters - - - - org.mapstruct - mapstruct-processor - ${mapstruct.version} - - - org.projectlombok - lombok - ${lombok.version} - - - org.projectlombok - lombok-mapstruct-binding - 0.2.0 - - - io.quarkus - quarkus-panache-common - ${quarkus.platform.version} - - - - - - maven-failsafe-plugin - ${surefire-plugin.version} - - - - integration-test - verify - - - - ${project.build.directory}/${project.build.finalName}-runner - - org.jboss.logmanager.LogManager - ${maven.home} - - - - - - - - - - native - - - native - - - - false - native - - - + + + + + ${quarkus.platform.group-id} + quarkus-maven-plugin + ${quarkus.platform.version} + true + + + + build + generate-code + generate-code-tests + + + + + + maven-compiler-plugin + ${compiler-plugin.version} + + + -parameters + + + + org.mapstruct + mapstruct-processor + ${mapstruct.version} + + + org.projectlombok + lombok + ${lombok.version} + + + org.projectlombok + lombok-mapstruct-binding + 0.2.0 + + + io.quarkus + quarkus-panache-common + ${quarkus.platform.version} + + + + + + maven-failsafe-plugin + ${surefire-plugin.version} + + + + integration-test + verify + + + + ${project.build.directory}/${project.build.finalName}-runner + + org.jboss.logmanager.LogManager + ${maven.home} + + + + + + + + + + native + + + native + + + + false + native + + + diff --git a/apps/pom.xml b/apps/pom.xml index f89743172..0abda094d 100644 --- a/apps/pom.xml +++ b/apps/pom.xml @@ -13,7 +13,7 @@ pom - 0.5.1 + 0.6.0 diff --git a/test-coverage/lombok.config b/test-coverage/lombok.config new file mode 100644 index 000000000..74da8257f --- /dev/null +++ b/test-coverage/lombok.config @@ -0,0 +1 @@ +lombok.addLombokGeneratedAnnotation=true \ No newline at end of file diff --git a/test-coverage/pom.xml b/test-coverage/pom.xml index 058a04730..896bb97ca 100644 --- a/test-coverage/pom.xml +++ b/test-coverage/pom.xml @@ -19,7 +19,7 @@ **/utils/**, **/*Constant*, **/*Config.java, **/error/**, **/filter/**, org/** https://sonarcloud.io - 0.5.1 + 0.6.0 From 8af7121cf0f7567814c8149a999c4d8908719f6a Mon Sep 17 00:00:00 2001 From: andrea putzu Date: Mon, 9 Dec 2024 12:13:56 +0100 Subject: [PATCH 09/18] chore: Adding new scale rule for UAT --- .../env/uat-pnpg/terraform.tfvars | 19 ++++++++++++++++--- .../hub_spid_login/env/uat/terraform.tfvars | 19 ++++++++++++++++--- .../env/uat-pnpg/terraform.tfvars | 19 ++++++++++++++++--- .../onboarding-cdc/env/uat/terraform.tfvars | 19 ++++++++++++++++--- .../env/uat-pnpg/terraform.tfvars | 19 ++++++++++++++++--- .../onboarding-ms/env/uat/terraform.tfvars | 19 ++++++++++++++++--- 6 files changed, 96 insertions(+), 18 deletions(-) diff --git a/infra/container_apps/hub_spid_login/env/uat-pnpg/terraform.tfvars b/infra/container_apps/hub_spid_login/env/uat-pnpg/terraform.tfvars index 495162aa9..78d767028 100644 --- a/infra/container_apps/hub_spid_login/env/uat-pnpg/terraform.tfvars +++ b/infra/container_apps/hub_spid_login/env/uat-pnpg/terraform.tfvars @@ -15,9 +15,22 @@ tags = { container_app = { min_replicas = 1 max_replicas = 2 - scale_rules = [] - cpu = 0.5 - memory = "1Gi" + scale_rules = [ + { + custom = { + metadata = { + "desiredReplicas" = "1" + "start" = "0 8 * * MON-FRI" + "end" = "0 19 * * MON-FRI" + "timezone" = "Europe/Rome" + } + type = "cron" + } + name = "cron-scale-rule" + } + ] + cpu = 0.5 + memory = "1Gi" } diff --git a/infra/container_apps/hub_spid_login/env/uat/terraform.tfvars b/infra/container_apps/hub_spid_login/env/uat/terraform.tfvars index a814584a2..3fac943ba 100644 --- a/infra/container_apps/hub_spid_login/env/uat/terraform.tfvars +++ b/infra/container_apps/hub_spid_login/env/uat/terraform.tfvars @@ -14,9 +14,22 @@ tags = { container_app = { min_replicas = 1 max_replicas = 2 - scale_rules = [] - cpu = 0.5 - memory = "1Gi" + scale_rules = [ + { + custom = { + metadata = { + "desiredReplicas" = "1" + "start" = "0 8 * * MON-FRI" + "end" = "0 19 * * MON-FRI" + "timezone" = "Europe/Rome" + } + type = "cron" + } + name = "cron-scale-rule" + } + ] + cpu = 0.5 + memory = "1Gi" } app_settings = [ diff --git a/infra/container_apps/onboarding-cdc/env/uat-pnpg/terraform.tfvars b/infra/container_apps/onboarding-cdc/env/uat-pnpg/terraform.tfvars index cada95472..e2dbcee74 100644 --- a/infra/container_apps/onboarding-cdc/env/uat-pnpg/terraform.tfvars +++ b/infra/container_apps/onboarding-cdc/env/uat-pnpg/terraform.tfvars @@ -15,9 +15,22 @@ tags = { container_app = { min_replicas = 1 max_replicas = 1 - scale_rules = [] - cpu = 1 - memory = "2Gi" + scale_rules = [ + { + custom = { + metadata = { + "desiredReplicas" = "1" + "start" = "0 8 * * MON-FRI" + "end" = "0 19 * * MON-FRI" + "timezone" = "Europe/Rome" + } + type = "cron" + } + name = "cron-scale-rule" + } + ] + cpu = 1 + memory = "2Gi" } app_settings = [ diff --git a/infra/container_apps/onboarding-cdc/env/uat/terraform.tfvars b/infra/container_apps/onboarding-cdc/env/uat/terraform.tfvars index 41e72a8d0..783493235 100644 --- a/infra/container_apps/onboarding-cdc/env/uat/terraform.tfvars +++ b/infra/container_apps/onboarding-cdc/env/uat/terraform.tfvars @@ -14,9 +14,22 @@ tags = { container_app = { min_replicas = 1 max_replicas = 1 - scale_rules = [] - cpu = 1 - memory = "2Gi" + scale_rules = [ + { + custom = { + metadata = { + "desiredReplicas" = "1" + "start" = "0 8 * * MON-FRI" + "end" = "0 19 * * MON-FRI" + "timezone" = "Europe/Rome" + } + type = "cron" + } + name = "cron-scale-rule" + } + ] + cpu = 1 + memory = "2Gi" } app_settings = [ diff --git a/infra/container_apps/onboarding-ms/env/uat-pnpg/terraform.tfvars b/infra/container_apps/onboarding-ms/env/uat-pnpg/terraform.tfvars index 4924bbf8f..cd584c311 100644 --- a/infra/container_apps/onboarding-ms/env/uat-pnpg/terraform.tfvars +++ b/infra/container_apps/onboarding-ms/env/uat-pnpg/terraform.tfvars @@ -15,9 +15,22 @@ tags = { container_app = { min_replicas = 1 max_replicas = 2 - scale_rules = [] - cpu = 0.5 - memory = "1Gi" + scale_rules = [ + { + custom = { + metadata = { + "desiredReplicas" = "1" + "start" = "0 8 * * MON-FRI" + "end" = "0 19 * * MON-FRI" + "timezone" = "Europe/Rome" + } + type = "cron" + } + name = "cron-scale-rule" + } + ] + cpu = 0.5 + memory = "1Gi" } app_settings = [ diff --git a/infra/container_apps/onboarding-ms/env/uat/terraform.tfvars b/infra/container_apps/onboarding-ms/env/uat/terraform.tfvars index 42e95c3b2..902c228ba 100644 --- a/infra/container_apps/onboarding-ms/env/uat/terraform.tfvars +++ b/infra/container_apps/onboarding-ms/env/uat/terraform.tfvars @@ -14,9 +14,22 @@ tags = { container_app = { min_replicas = 1 max_replicas = 2 - scale_rules = [] - cpu = 0.5 - memory = "1Gi" + scale_rules = [ + { + custom = { + metadata = { + "desiredReplicas" = "1" + "start" = "0 8 * * MON-FRI" + "end" = "0 19 * * MON-FRI" + "timezone" = "Europe/Rome" + } + type = "cron" + } + name = "cron-scale-rule" + } + ] + cpu = 0.5 + memory = "1Gi" } app_settings = [ From abe264449c2175116451df730c0372c53f2d4484 Mon Sep 17 00:00:00 2001 From: Giampiero Ferrara Date: Mon, 9 Dec 2024 15:00:44 +0100 Subject: [PATCH 10/18] [SELC-6155] bugfix: Fixed log injection into getFiles --- libs/onboarding-sdk-azure-storage/pom.xml | 2 +- .../pagopa/selfcare/azurestorage/AzureBlobClientDefault.java | 5 +++-- libs/onboarding-sdk-common/pom.xml | 2 +- libs/onboarding-sdk-crypto/pom.xml | 2 +- libs/onboarding-sdk-pom/pom.xml | 2 +- libs/onboarding-sdk-product/pom.xml | 4 ++-- 6 files changed, 9 insertions(+), 8 deletions(-) diff --git a/libs/onboarding-sdk-azure-storage/pom.xml b/libs/onboarding-sdk-azure-storage/pom.xml index 83c28b50a..3f411ab4f 100644 --- a/libs/onboarding-sdk-azure-storage/pom.xml +++ b/libs/onboarding-sdk-azure-storage/pom.xml @@ -6,7 +6,7 @@ it.pagopa.selfcare onboarding-sdk-pom - 0.6.0 + 0.6.1 ../onboarding-sdk-pom diff --git a/libs/onboarding-sdk-azure-storage/src/main/java/it/pagopa/selfcare/azurestorage/AzureBlobClientDefault.java b/libs/onboarding-sdk-azure-storage/src/main/java/it/pagopa/selfcare/azurestorage/AzureBlobClientDefault.java index 7db754e5d..2bb33696e 100644 --- a/libs/onboarding-sdk-azure-storage/src/main/java/it/pagopa/selfcare/azurestorage/AzureBlobClientDefault.java +++ b/libs/onboarding-sdk-azure-storage/src/main/java/it/pagopa/selfcare/azurestorage/AzureBlobClientDefault.java @@ -158,13 +158,14 @@ public BlobProperties getProperties(String filePath) { @Override public List getFiles(String path) { log.debug("START - getFiles by given path: {}", path); + String sanitizePath = StringUtils.replace(path, "\n", StringUtils.EMPTY).replace("\r", StringUtils.EMPTY); List listOfResource = new ArrayList<>(); final BlobContainerClient blobContainer = blobClient.getBlobContainerClient(containerName); - if (StringUtils.isNotEmpty(path)) { + if (StringUtils.isNotEmpty(sanitizePath)) { ListBlobsOptions options = new ListBlobsOptions() - .setPrefix(path) + .setPrefix(sanitizePath) .setDetails(new BlobListDetails() .setRetrieveDeletedBlobs(true) .setRetrieveSnapshots(true)); diff --git a/libs/onboarding-sdk-common/pom.xml b/libs/onboarding-sdk-common/pom.xml index b5cb5b555..87f5bee73 100644 --- a/libs/onboarding-sdk-common/pom.xml +++ b/libs/onboarding-sdk-common/pom.xml @@ -4,7 +4,7 @@ it.pagopa.selfcare onboarding-sdk-pom - 0.6.0 + 0.6.1 ../onboarding-sdk-pom onboarding-sdk-common diff --git a/libs/onboarding-sdk-crypto/pom.xml b/libs/onboarding-sdk-crypto/pom.xml index c8e692fac..54f64ab77 100644 --- a/libs/onboarding-sdk-crypto/pom.xml +++ b/libs/onboarding-sdk-crypto/pom.xml @@ -4,7 +4,7 @@ it.pagopa.selfcare onboarding-sdk-pom - 0.6.0 + 0.6.1 ../onboarding-sdk-pom onboarding-sdk-crypto diff --git a/libs/onboarding-sdk-pom/pom.xml b/libs/onboarding-sdk-pom/pom.xml index 788d3aa85..4e9d12358 100644 --- a/libs/onboarding-sdk-pom/pom.xml +++ b/libs/onboarding-sdk-pom/pom.xml @@ -5,7 +5,7 @@ onboarding-sdk-pom pom onboarding-sdk-pom - 0.6.0 + 0.6.1 17 diff --git a/libs/onboarding-sdk-product/pom.xml b/libs/onboarding-sdk-product/pom.xml index 69cad93f1..dc8dcfd9d 100644 --- a/libs/onboarding-sdk-product/pom.xml +++ b/libs/onboarding-sdk-product/pom.xml @@ -4,12 +4,12 @@ it.pagopa.selfcare onboarding-sdk-pom - 0.6.0 + 0.6.1 ../onboarding-sdk-pom onboarding-sdk-product onboarding-sdk-product - 0.6.0 + 0.6.1 2.15.2 From 9d2af63a78b74e13d1351ae7dfe628f11a7fb523 Mon Sep 17 00:00:00 2001 From: Giampiero Ferrara Date: Tue, 10 Dec 2024 09:16:24 +0100 Subject: [PATCH 11/18] [SELC-6159] feat: Update SDK dependency --- apps/onboarding-functions/pom.xml | 2 +- apps/onboarding-ms/pom.xml | 2 +- apps/pom.xml | 2 +- test-coverage/pom.xml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/onboarding-functions/pom.xml b/apps/onboarding-functions/pom.xml index 20a0c95dc..2bad72c43 100644 --- a/apps/onboarding-functions/pom.xml +++ b/apps/onboarding-functions/pom.xml @@ -22,7 +22,7 @@ true 3.1.2 1.5.5.Final - 0.6.0 + 0.6.1 diff --git a/apps/onboarding-ms/pom.xml b/apps/onboarding-ms/pom.xml index 676fceb89..cf7afd881 100644 --- a/apps/onboarding-ms/pom.xml +++ b/apps/onboarding-ms/pom.xml @@ -24,7 +24,7 @@ true 3.1.2 2.4.1 - 0.6.0 + 0.6.1 diff --git a/apps/pom.xml b/apps/pom.xml index 0abda094d..c2ee77de7 100644 --- a/apps/pom.xml +++ b/apps/pom.xml @@ -13,7 +13,7 @@ pom - 0.6.0 + 0.6.1 diff --git a/test-coverage/pom.xml b/test-coverage/pom.xml index 896bb97ca..395c29a94 100644 --- a/test-coverage/pom.xml +++ b/test-coverage/pom.xml @@ -19,7 +19,7 @@ **/utils/**, **/*Constant*, **/*Config.java, **/error/**, **/filter/**, org/** https://sonarcloud.io - 0.6.0 + 0.6.1 From 55c4b0364f2074f3a2f35fd03f8d0760da665f0e Mon Sep 17 00:00:00 2001 From: pierpaolodidato89 <137791912+pierpaolodidato89@users.noreply.github.com> Date: Tue, 10 Dec 2024 17:18:28 +0100 Subject: [PATCH 12/18] [SELC-6169] feat: added field for GPU data --- apps/onboarding-ms/src/main/docs/openapi.json | 6 ++++++ apps/onboarding-ms/src/main/docs/openapi.yaml | 4 ++++ .../it/pagopa/selfcare/onboarding/entity/BusinessData.java | 1 + 3 files changed, 11 insertions(+) diff --git a/apps/onboarding-ms/src/main/docs/openapi.json b/apps/onboarding-ms/src/main/docs/openapi.json index 47fc42137..f179f59d6 100644 --- a/apps/onboarding-ms/src/main/docs/openapi.json +++ b/apps/onboarding-ms/src/main/docs/openapi.json @@ -1934,6 +1934,9 @@ "legalRegisterName" : { "type" : "string" }, + "longTermPayments" : { + "type" : "boolean" + }, "manager" : { "type" : "boolean" }, @@ -2701,6 +2704,9 @@ "legalRegisterName" : { "type" : "string" }, + "longTermPayments" : { + "type" : "boolean" + }, "abiCode" : { "type" : "string" }, diff --git a/apps/onboarding-ms/src/main/docs/openapi.yaml b/apps/onboarding-ms/src/main/docs/openapi.yaml index 453af0dfb..c2b13e31e 100644 --- a/apps/onboarding-ms/src/main/docs/openapi.yaml +++ b/apps/onboarding-ms/src/main/docs/openapi.yaml @@ -1404,6 +1404,8 @@ components: type: string legalRegisterName: type: string + longTermPayments: + type: boolean manager: type: boolean managerAuthorized: @@ -1993,6 +1995,8 @@ components: type: string legalRegisterName: type: string + longTermPayments: + type: boolean abiCode: type: string vatNumberGroup: diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/BusinessData.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/BusinessData.java index 25f6add6b..2e3d16a8f 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/BusinessData.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/BusinessData.java @@ -9,5 +9,6 @@ public class BusinessData { private String businessRegisterNumber; private String legalRegisterNumber; private String legalRegisterName; + private boolean longTermPayments; } \ No newline at end of file From 157f7c3b44c4db5532b02afcfa6e152b7600ecd0 Mon Sep 17 00:00:00 2001 From: gianmarcoplutino <119858159+gianmarcoplutino@users.noreply.github.com> Date: Tue, 10 Dec 2024 17:19:32 +0100 Subject: [PATCH 13/18] [SELC-6174] feat: rework onboarding completion logic (#642) --- .../WorkflowExecutorConfirmation.java | 10 +- apps/onboarding-ms/src/main/docs/openapi.json | 57 +--------- apps/onboarding-ms/src/main/docs/openapi.yaml | 45 +------- .../controller/OnboardingController.java | 60 +++------- .../onboarding/service/OnboardingService.java | 2 +- .../service/OnboardingServiceDefault.java | 88 ++------------- .../controller/OnboardingControllerTest.java | 103 +++++++++++------- .../service/OnboardingServiceDefaultTest.java | 6 +- 8 files changed, 109 insertions(+), 262 deletions(-) diff --git a/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/workflow/WorkflowExecutorConfirmation.java b/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/workflow/WorkflowExecutorConfirmation.java index d37a802f7..09347feef 100644 --- a/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/workflow/WorkflowExecutorConfirmation.java +++ b/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/workflow/WorkflowExecutorConfirmation.java @@ -11,12 +11,18 @@ import java.util.Optional; import static it.pagopa.selfcare.onboarding.entity.OnboardingWorkflowType.INSTITUTION; +import static it.pagopa.selfcare.onboarding.functions.utils.ActivityName.*; +import static it.pagopa.selfcare.onboarding.utils.Utils.getOnboardingWorkflowString; -public record WorkflowExecutorConfirmation(ObjectMapper objectMapper, TaskOptions optionsRetry) implements WorkflowExecutor { +public record WorkflowExecutorConfirmation(ObjectMapper objectMapper, + TaskOptions optionsRetry) implements WorkflowExecutor { @Override public Optional executeRequestState(TaskOrchestrationContext ctx, OnboardingWorkflow onboardingWorkflow) { - return Optional.empty(); + String onboardingWorkflowString = getOnboardingWorkflowString(objectMapper, onboardingWorkflow); + ctx.callActivity(BUILD_CONTRACT_ACTIVITY_NAME, onboardingWorkflowString, optionsRetry, String.class).await(); + ctx.callActivity(SAVE_TOKEN_WITH_CONTRACT_ACTIVITY_NAME, onboardingWorkflowString, optionsRetry, String.class).await(); + return Optional.of(OnboardingStatus.PENDING); } @Override diff --git a/apps/onboarding-ms/src/main/docs/openapi.json b/apps/onboarding-ms/src/main/docs/openapi.json index f179f59d6..2b9b2f31d 100644 --- a/apps/onboarding-ms/src/main/docs/openapi.json +++ b/apps/onboarding-ms/src/main/docs/openapi.json @@ -502,24 +502,9 @@ "operationId" : "onboardingCompletion", "requestBody" : { "content" : { - "multipart/form-data" : { + "application/json" : { "schema" : { - "required" : [ "contract" ], - "type" : "object", - "properties" : { - "onboardingRequest" : { - "$ref" : "#/components/schemas/OnboardingDefaultRequest" - }, - "contract" : { - "format" : "binary", - "type" : "string" - } - } - }, - "encoding" : { - "onboardingRequest" : { - "contentType" : "application/json" - } + "$ref" : "#/components/schemas/OnboardingDefaultRequest" } } } @@ -695,24 +680,9 @@ "operationId" : "onboardingPaCompletion", "requestBody" : { "content" : { - "multipart/form-data" : { + "application/json" : { "schema" : { - "required" : [ "contract" ], - "type" : "object", - "properties" : { - "onboardingRequest" : { - "$ref" : "#/components/schemas/OnboardingPaRequest" - }, - "contract" : { - "format" : "binary", - "type" : "string" - } - } - }, - "encoding" : { - "onboardingRequest" : { - "contentType" : "application/json" - } + "$ref" : "#/components/schemas/OnboardingPaRequest" } } } @@ -862,24 +832,9 @@ "operationId" : "onboardingPspCompletion", "requestBody" : { "content" : { - "multipart/form-data" : { + "application/json" : { "schema" : { - "required" : [ "contract" ], - "type" : "object", - "properties" : { - "onboardingRequest" : { - "$ref" : "#/components/schemas/OnboardingPspRequest" - }, - "contract" : { - "format" : "binary", - "type" : "string" - } - } - }, - "encoding" : { - "onboardingRequest" : { - "contentType" : "application/json" - } + "$ref" : "#/components/schemas/OnboardingPspRequest" } } } diff --git a/apps/onboarding-ms/src/main/docs/openapi.yaml b/apps/onboarding-ms/src/main/docs/openapi.yaml index c2b13e31e..f7aa78dba 100644 --- a/apps/onboarding-ms/src/main/docs/openapi.yaml +++ b/apps/onboarding-ms/src/main/docs/openapi.yaml @@ -367,20 +367,9 @@ paths: operationId: onboardingCompletion requestBody: content: - multipart/form-data: + application/json: schema: - required: - - contract - type: object - properties: - onboardingRequest: - $ref: "#/components/schemas/OnboardingDefaultRequest" - contract: - format: binary - type: string - encoding: - onboardingRequest: - contentType: application/json + $ref: "#/components/schemas/OnboardingDefaultRequest" responses: "200": description: OK @@ -511,20 +500,9 @@ paths: operationId: onboardingPaCompletion requestBody: content: - multipart/form-data: + application/json: schema: - required: - - contract - type: object - properties: - onboardingRequest: - $ref: "#/components/schemas/OnboardingPaRequest" - contract: - format: binary - type: string - encoding: - onboardingRequest: - contentType: application/json + $ref: "#/components/schemas/OnboardingPaRequest" responses: "200": description: OK @@ -631,20 +609,9 @@ paths: operationId: onboardingPspCompletion requestBody: content: - multipart/form-data: + application/json: schema: - required: - - contract - type: object - properties: - onboardingRequest: - $ref: "#/components/schemas/OnboardingPspRequest" - contract: - format: binary - type: string - encoding: - onboardingRequest: - contentType: application/json + $ref: "#/components/schemas/OnboardingPspRequest" responses: "200": description: OK diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/OnboardingController.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/OnboardingController.java index 7fed09fb1..d3ac46378 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/OnboardingController.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/OnboardingController.java @@ -33,7 +33,6 @@ import org.eclipse.microprofile.openapi.annotations.Operation; import org.eclipse.microprofile.openapi.annotations.extensions.Extension; import org.eclipse.microprofile.openapi.annotations.tags.Tag; -import org.jboss.resteasy.reactive.PartType; import org.jboss.resteasy.reactive.RestForm; import org.jboss.resteasy.reactive.server.core.ResteasyReactiveRequestContext; @@ -172,21 +171,12 @@ public Uni onboardingPsp(@Valid OnboardingPspRequest onboard @POST @Tag(name = "Onboarding Controller") @Tag(name = "internal-v1") - @Consumes(MediaType.MULTIPART_FORM_DATA) + @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) - public Uni onboardingCompletion( - @NotNull @RestForm("contract") File file, - @NotNull @FormParam("onboardingRequest") @PartType(MediaType.APPLICATION_JSON) OnboardingDefaultRequest onboardingRequest, - @Context ResteasyReactiveRequestContext ctx, - @Context SecurityContext securityContext) { - - return readUserIdFromToken(securityContext) - .onItem() - .transformToUni( - userId -> onboardingService.onboardingCompletion( - fillUserId(onboardingMapper.toEntity(onboardingRequest), userId), - onboardingRequest.getUsers(), - retrieveContractFromFormData(ctx.getFormData(), file))); + public Uni onboardingCompletion(@Valid OnboardingDefaultRequest onboardingRequest, @Context SecurityContext ctx) { + return readUserIdFromToken(ctx) + .onItem().transformToUni(userId -> onboardingService + .onboardingCompletion(fillUserId(onboardingMapper.toEntity(onboardingRequest), userId), onboardingRequest.getUsers())); } @Operation( @@ -197,21 +187,12 @@ public Uni onboardingCompletion( @Path("/pa/completion") @Tag(name = "Onboarding Controller") @Tag(name = "internal-v1") - @Consumes(MediaType.MULTIPART_FORM_DATA) + @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) - public Uni onboardingPaCompletion( - @NotNull @RestForm("contract") File file, - @NotNull @FormParam("onboardingRequest") @PartType(MediaType.APPLICATION_JSON) OnboardingPaRequest onboardingRequest, - @Context ResteasyReactiveRequestContext ctx, - @Context SecurityContext securityContext) { - - return readUserIdFromToken(securityContext) - .onItem() - .transformToUni( - userId -> onboardingService.onboardingCompletion( - fillUserId(onboardingMapper.toEntity(onboardingRequest), userId), - onboardingRequest.getUsers(), - retrieveContractFromFormData(ctx.getFormData(), file))); + public Uni onboardingPaCompletion(@Valid OnboardingPaRequest onboardingRequest, @Context SecurityContext ctx) { + return readUserIdFromToken(ctx) + .onItem().transformToUni(userId -> onboardingService + .onboardingCompletion(fillUserId(onboardingMapper.toEntity(onboardingRequest), userId), onboardingRequest.getUsers())); } @Operation( @@ -250,21 +231,12 @@ public Uni onboardingPspImport(@Valid OnboardingImportPspReq @Path("/psp/completion") @Tag(name = "Onboarding Controller") @Tag(name = "internal-v1") - @Consumes(MediaType.MULTIPART_FORM_DATA) + @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) - public Uni onboardingPspCompletion( - @NotNull @RestForm("contract") File file, - @NotNull @FormParam("onboardingRequest") @PartType(MediaType.APPLICATION_JSON) OnboardingPspRequest onboardingRequest, - @Context ResteasyReactiveRequestContext ctx, - @Context SecurityContext securityContext) { - - return readUserIdFromToken(securityContext) - .onItem() - .transformToUni( - userId -> onboardingService.onboardingCompletion( - fillUserId(onboardingMapper.toEntity(onboardingRequest), userId), - onboardingRequest.getUsers(), - retrieveContractFromFormData(ctx.getFormData(), file))); + public Uni onboardingPspCompletion(@Valid OnboardingPspRequest onboardingRequest, @Context SecurityContext ctx) { + return readUserIdFromToken(ctx) + .onItem().transformToUni(userId -> onboardingService + .onboardingCompletion(fillUserId(onboardingMapper.toEntity(onboardingRequest), userId), onboardingRequest.getUsers())); } @Operation( @@ -280,7 +252,7 @@ public Uni onboardingPspCompletion( public Uni onboardingPgCompletion(@Valid OnboardingPgRequest onboardingRequest, @Context SecurityContext ctx) { return readUserIdFromToken(ctx) .onItem().transformToUni(userId -> onboardingService - .onboardingCompletion(fillUserId(onboardingMapper.toEntity(onboardingRequest), userId), onboardingRequest.getUsers(), null)); + .onboardingCompletion(fillUserId(onboardingMapper.toEntity(onboardingRequest), userId), onboardingRequest.getUsers())); } @Operation( diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingService.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingService.java index 29fdd61e1..c584023f7 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingService.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingService.java @@ -35,7 +35,7 @@ Uni onboardingImport( boolean forceImport); Uni onboardingCompletion( - Onboarding onboarding, List userRequests, FormItem formItem); + Onboarding onboarding, List userRequests); Uni onboardingAggregationCompletion( Onboarding onboarding, 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 5dd543902..03d51cfcd 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 @@ -4,12 +4,8 @@ import static it.pagopa.selfcare.onboarding.common.ProductId.PROD_PAGOPA; import static it.pagopa.selfcare.onboarding.constants.CustomError.*; import static it.pagopa.selfcare.onboarding.util.ErrorMessage.*; -import static it.pagopa.selfcare.onboarding.util.Utils.CONTRACT_FILENAME_FUNC; import static it.pagopa.selfcare.product.utils.ProductUtils.validRoles; -import eu.europa.esig.dss.enumerations.DigestAlgorithm; -import eu.europa.esig.dss.model.DSSDocument; -import eu.europa.esig.dss.model.FileDocument; import io.quarkus.logging.Log; import io.quarkus.mongodb.panache.common.reactive.Panache; import io.quarkus.mongodb.panache.reactive.ReactivePanacheQuery; @@ -54,7 +50,7 @@ import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import jakarta.ws.rs.WebApplicationException; -import java.io.File; + import java.io.IOException; import java.nio.file.Files; import java.time.LocalDateTime; @@ -63,6 +59,7 @@ import java.util.function.Function; import java.util.function.Supplier; import java.util.stream.Collectors; + import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.bson.Document; @@ -241,12 +238,12 @@ public Uni onboardingUsers( */ @Override public Uni onboardingCompletion( - Onboarding onboarding, List userRequests, FormItem formItem) { + Onboarding onboarding, List userRequests) { onboarding.setWorkflowType(WorkflowType.CONFIRMATION); - onboarding.setStatus(OnboardingStatus.PENDING); + onboarding.setStatus(OnboardingStatus.REQUEST); - return fillUsersAndOnboardingCompletion( - onboarding, userRequests, TIMEOUT_ORCHESTRATION_RESPONSE, formItem); + return fillUsersAndOnboarding( + onboarding, userRequests, null, TIMEOUT_ORCHESTRATION_RESPONSE, false); } @Override @@ -290,21 +287,9 @@ private Uni fillUsersAndOnboarding( return verifyExistingOnboarding(onboarding, isAggregatesIncrement) .onItem() - .transformToUni(product -> handleOnboarding(onboarding, userRequests, aggregates, timeout, product, null)); + .transformToUni(product -> handleOnboarding(onboarding, userRequests, aggregates, timeout, product)); } - private Uni fillUsersAndOnboardingCompletion( - Onboarding onboarding, - List userRequests, - String timeout, - FormItem formItem) { - - onboarding.setCreatedAt(LocalDateTime.now()); - - return verifyExistingOnboarding(onboarding, false) - .onItem() - .transformToUni(product -> handleOnboarding(onboarding, userRequests, null, timeout, product, formItem)); - } private Uni verifyExistingOnboarding(Onboarding onboarding, boolean isAggregatesIncrement) { return getProductByOnboarding(onboarding) @@ -323,8 +308,7 @@ private Uni handleOnboarding( List userRequests, List aggregates, String timeout, - Product product, - FormItem formItem) { + Product product) { return Uni.createFrom() .item(registryResourceFactory.create(onboarding)) @@ -332,7 +316,7 @@ private Uni handleOnboarding( .invoke(registryManager -> registryManager.setResource(registryManager.retrieveInstitution())) .runSubscriptionOn(Infrastructure.getDefaultWorkerPool()) .onItem() - .transformToUni(registryManager -> validateAndPersistOnboarding(registryManager, onboarding, userRequests, aggregates, product, formItem, timeout)); + .transformToUni(registryManager -> validateAndPersistOnboarding(registryManager, onboarding, userRequests, aggregates, product, timeout)); } private Uni validateAndPersistOnboarding( @@ -341,7 +325,6 @@ private Uni validateAndPersistOnboarding( List userRequests, List aggregates, Product product, - FormItem formItem, String timeout) { return registryManager.isValid() @@ -352,21 +335,12 @@ private Uni validateAndPersistOnboarding( .onItem() .transformToUni(current -> persistOnboarding(onboarding, userRequests, product, aggregates)) .onItem() - .transformToUni(persistedOnboarding -> handleSignedContractAndToken(persistedOnboarding, formItem)) - .onItem() .transformToUni(currentOnboarding -> persistAndStartOrchestrationOnboarding(currentOnboarding, orchestrationApi.apiStartOnboardingOrchestrationGet(currentOnboarding.getId(), timeout))) .onItem() .transform(onboardingMapper::toResponse); } - private Uni handleSignedContractAndToken(Onboarding persistedOnboarding, FormItem formItem) { - return Optional.ofNullable(formItem) - .map(item -> uploadSignedContractAndUpdateToken(persistedOnboarding, item) - .map(ignore -> persistedOnboarding)) - .orElse(Uni.createFrom().item(persistedOnboarding)); - } - /** * This method checks whether the product and any parent have already been onboarded for the * provided institution. In the case where we are in the aggregate increment flow, the product on @@ -1252,23 +1226,10 @@ private Uni uploadSignedContractAndUpdateToken(Onboarding onboarding, Fo String onboardingId = onboarding.getId(); return retrieveToken(onboardingId) - .onFailure() - .recoverWithUni(() -> createToken(onboarding, onboardingId, formItem)) - .onItem() - .call(this::persistToken) .onItem() .transformToUni(token -> processAndUploadFile(token, onboardingId, formItem)); } - private Uni createToken(Onboarding onboarding, String onboardingId, FormItem formItem) { - return Uni.createFrom() - .item(() -> createToken(onboarding, onboardingId, formItem.getFile())); - } - - private Uni persistToken(Token tokenPersisted) { - return Panache.withTransaction(() -> Token.persist(tokenPersisted)); - } - private Uni processAndUploadFile(Token token, String onboardingId, FormItem formItem) { return Uni.createFrom() .item(Unchecked.supplier(() -> uploadFileToAzure(token, onboardingId, formItem))) @@ -1303,37 +1264,6 @@ private Uni updateTokenWithFilePath(String filepath, Token token) { .replaceWith(filepath); } - private Token createToken(Onboarding onboarding, String onboardingId, File file) { - Product product = productService.getProduct(onboarding.getProductId()); - final String filename = CONTRACT_FILENAME_FUNC.apply(PDF_FORMAT_FILENAME, product.getTitle()); - DSSDocument document = new FileDocument(file); - String digest = document.getDigest(DigestAlgorithm.SHA256); - Token token = new Token(); - token.setCreatedAt(LocalDateTime.now()); - token.setOnboardingId(onboardingId); - token.setId(onboardingId); - token.setProductId(onboarding.getProductId()); - token.setUpdatedAt(LocalDateTime.now()); - token.setActivatedAt(LocalDateTime.now()); - token.setContractFilename(filename); - token.setContractTemplate(getContractTemplatePath(product, onboarding)); - token.setContractVersion(getContractTemplateVersion(product, onboarding)); - token.setChecksum(digest); - token.setType(TokenType.INSTITUTION); - return token; - } - - private String getContractTemplatePath(Product product, Onboarding onboarding) { - return product - .getInstitutionContractTemplate(InstitutionUtils.getCurrentInstitutionType(onboarding)) - .getContractTemplatePath(); - } - - private String getContractTemplateVersion(Product product, Onboarding onboarding) { - return product - .getInstitutionContractTemplate(InstitutionUtils.getCurrentInstitutionType(onboarding)) - .getContractTemplateVersion(); - } private String getFileExtension(String name) { String[] parts = name.split("\\."); diff --git a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/controller/OnboardingControllerTest.java b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/controller/OnboardingControllerTest.java index 949a727f2..9e8b04ee2 100644 --- a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/controller/OnboardingControllerTest.java +++ b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/controller/OnboardingControllerTest.java @@ -576,77 +576,96 @@ void approve() { @Test @TestSecurity(user = "userJwt") - void onboardingCompletionMultipart() { + void onboardingCompletion() { - // Mock della risposta del servizio - Mockito.when(onboardingService.onboardingCompletion(any(), any(), any())) - .thenReturn(Uni.createFrom().item(new OnboardingResponse())); + OnboardingDefaultRequest onboardingDefaultRequest = dummyOnboardingDefaultRequest(); - // Creazione di un file fittizio per il test - File testFile = new File("src/test/resources/application.properties"); + Mockito.when(onboardingService.onboardingCompletion(any(), any())) + .thenReturn(Uni.createFrom().item(new OnboardingResponse())); - // Esecuzione della richiesta simulata given() - .multiPart("contract", testFile) // Aggiunta del file - .multiPart("onboardingRequest", new OnboardingDefaultRequest()) // Aggiunta del JSON come stringa - .contentType("multipart/form-data") .when() + .body(onboardingDefaultRequest) + .contentType(ContentType.JSON) .post("/completion") .then() - .statusCode(200); // Verifica del codice di stato + .statusCode(200); - // Verifica che il servizio sia stato chiamato correttamente - Mockito.verify(onboardingService, times(1)).onboardingCompletion(any(), any(), any()); + ArgumentCaptor captor = ArgumentCaptor.forClass(Onboarding.class); + Mockito.verify(onboardingService, times(1)).onboardingCompletion(captor.capture(), any()); + assertEquals(InstitutionType.PRV, captor.getValue().getInstitution().getInstitutionType()); + } + + private static OnboardingDefaultRequest dummyOnboardingDefaultRequest() { + OnboardingDefaultRequest onboardingDefaultRequest = new OnboardingDefaultRequest(); + InstitutionBaseRequest institution = new InstitutionBaseRequest(); + onboardingDefaultRequest.setProductId("productId"); + onboardingDefaultRequest.setUsers(List.of(userDTO)); + institution.setTaxCode("taxCode"); + institution.setDigitalAddress("digital@address.it"); + institution.setOrigin(Origin.SELC); + institution.setInstitutionType(InstitutionType.PRV); + onboardingDefaultRequest.setInstitution(institution); + return onboardingDefaultRequest; } @Test @TestSecurity(user = "userJwt") - void onboardingPaCompletionMultipart() { + void onboardingPaCompletion() { - // Mock della risposta del servizio - Mockito.when(onboardingService.onboardingCompletion(any(), any(), any())) - .thenReturn(Uni.createFrom().item(new OnboardingResponse())); + OnboardingPaRequest onboardingPaRequest = dummyOnboardingPa(); - // Creazione di un file fittizio per il test - File testFile = new File("src/test/resources/application.properties"); + Mockito.when(onboardingService.onboardingCompletion(any(), any())) + .thenReturn(Uni.createFrom().item(new OnboardingResponse())); - // Esecuzione della richiesta simulata given() - .multiPart("contract", testFile) // Aggiunta del file - .multiPart("onboardingRequest", new OnboardingPaRequest()) // Aggiunta del JSON come stringa - .contentType("multipart/form-data") .when() + .body(onboardingPaRequest) + .contentType(ContentType.JSON) .post("/pa/completion") .then() - .statusCode(200); // Verifica del codice di stato + .statusCode(200); - // Verifica che il servizio sia stato chiamato correttamente - Mockito.verify(onboardingService, times(1)).onboardingCompletion(any(), any(), any()); + ArgumentCaptor captor = ArgumentCaptor.forClass(Onboarding.class); + Mockito.verify(onboardingService, times(1)).onboardingCompletion(captor.capture(), any()); + assertEquals(InstitutionType.PA, captor.getValue().getInstitution().getInstitutionType()); } @Test @TestSecurity(user = "userJwt") - void onboardingPspCompletionMultipart() { + void onboardingPspCompletion() { - // Mock della risposta del servizio - Mockito.when(onboardingService.onboardingCompletion(any(), any(), any())) - .thenReturn(Uni.createFrom().item(new OnboardingResponse())); + OnboardingPspRequest onboardingPspRequest = getOnboardingPspRequest(); - // Creazione di un file fittizio per il test - File testFile = new File("src/test/resources/application.properties"); + Mockito.when(onboardingService.onboardingCompletion(any(), any())) + .thenReturn(Uni.createFrom().item(new OnboardingResponse())); - // Esecuzione della richiesta simulata given() - .multiPart("contract", testFile) // Aggiunta del file - .multiPart("onboardingRequest", new OnboardingPspRequest()) // Aggiunta del JSON come stringa - .contentType("multipart/form-data") .when() + .body(onboardingPspRequest) + .contentType(ContentType.JSON) .post("/psp/completion") .then() - .statusCode(200); // Verifica del codice di stato + .statusCode(200); - // Verifica che il servizio sia stato chiamato correttamente - Mockito.verify(onboardingService, times(1)).onboardingCompletion(any(), any(), any()); + ArgumentCaptor captor = ArgumentCaptor.forClass(Onboarding.class); + Mockito.verify(onboardingService, times(1)).onboardingCompletion(captor.capture(), any()); + assertEquals(InstitutionType.PSP, captor.getValue().getInstitution().getInstitutionType()); + } + + private static OnboardingPspRequest getOnboardingPspRequest() { + OnboardingPspRequest onboardingPspRequest = new OnboardingPspRequest(); + InstitutionPspRequest institution = new InstitutionPspRequest(); + onboardingPspRequest.setProductId("productId"); + onboardingPspRequest.setUsers(List.of(userDTO)); + institution.setTaxCode("taxCode"); + institution.setDigitalAddress("digital@address.it"); + institution.setOrigin(Origin.SELC); + institution.setInstitutionType(InstitutionType.PSP); + institution.setPaymentServiceProvider(new PaymentServiceProviderRequest()); + institution.setDataProtectionOfficer(new DataProtectionOfficerRequest()); + onboardingPspRequest.setInstitution(institution); + return onboardingPspRequest; } @Test @@ -660,7 +679,7 @@ void onboardingCompletePg() { onboardingPgRequest.setDigitalAddress("digital@address.it"); onboardingPgRequest.setOrigin(Origin.INFOCAMERE); - Mockito.when(onboardingService.onboardingCompletion(any(), any(), any())) + Mockito.when(onboardingService.onboardingCompletion(any(), any())) .thenReturn(Uni.createFrom().item(new OnboardingResponse())); given() @@ -672,7 +691,7 @@ void onboardingCompletePg() { .statusCode(200); ArgumentCaptor captor = ArgumentCaptor.forClass(Onboarding.class); - Mockito.verify(onboardingService, times(1)).onboardingCompletion(captor.capture(), any(), any()); + Mockito.verify(onboardingService, times(1)).onboardingCompletion(captor.capture(), any()); assertEquals(InstitutionType.PG, captor.getValue().getInstitution().getInstitutionType()); } @@ -1014,6 +1033,8 @@ private OnboardingPaRequest dummyOnboardingPa() { billingPaRequest.setRecipientCode("code"); billingPaRequest.setVatNumber("vat"); + institution.setInstitutionType(InstitutionType.PA); + onboardingPaValid.setUsers(List.of(userDTO)); onboardingPaValid.setInstitution(institution); onboardingPaValid.setBilling(billingPaRequest); 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 f7bca1f99..f0fd001ee 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 @@ -2072,11 +2072,7 @@ void onboardingCompletion(UniAsserter asserter) { asserter.execute(() -> when(institutionRegistryProxyApi.findInstitutionUsingGET(institutionBaseRequest.getTaxCode(), null, null)) .thenReturn(Uni.createFrom().item(institutionResource))); - final String filepath = "upload-file-path"; - when(azureBlobClient.uploadFile(any(), any(), any())).thenReturn(filepath); - mockUpdateToken(asserter, filepath); - - asserter.assertThat(() -> onboardingService.onboardingCompletion(request, users, TEST_FORM_ITEM), Assertions::assertNotNull); + asserter.assertThat(() -> onboardingService.onboardingCompletion(request, users), Assertions::assertNotNull); asserter.execute(() -> { PanacheMock.verify(Onboarding.class).persist(any(Onboarding.class), any()); From 23478d854740ae47149e0f2647985cf27ccb74e3 Mon Sep 17 00:00:00 2001 From: empassaro <113031808+empassaro@users.noreply.github.com> Date: Wed, 11 Dec 2024 10:22:42 +0100 Subject: [PATCH 14/18] [SELC-6062] feat: added check on workflow type for SELC Manager and default origin and originId (#641) --- .../entity/registry/RegistryManagerPT.java | 3 +- .../entity/registry/RegistryManagerSELC.java | 23 +++++- .../registry/RegistryManagerSELCTest.java | 66 ++++++++++++++++ .../service/OnboardingServiceDefaultTest.java | 78 +++++++++++++++++-- 4 files changed, 159 insertions(+), 11 deletions(-) create mode 100644 apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerSELCTest.java diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerPT.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerPT.java index 918790ac4..d0d6a4603 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerPT.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerPT.java @@ -20,6 +20,7 @@ public Uni customValidation(Product product) { onboarding.getInstitution().getTaxCode(), onboarding.getProductId()), DEFAULT_ERROR.getCode()); } - return Uni.createFrom().item(onboarding); + + return super.customValidation(product); } } diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerSELC.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerSELC.java index fada31e9e..b2878474e 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerSELC.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerSELC.java @@ -1,7 +1,10 @@ package it.pagopa.selfcare.onboarding.entity.registry; import io.smallrye.mutiny.Uni; +import it.pagopa.selfcare.onboarding.common.Origin; +import it.pagopa.selfcare.onboarding.common.WorkflowType; import it.pagopa.selfcare.onboarding.entity.Onboarding; +import it.pagopa.selfcare.onboarding.exception.InvalidRequestException; import it.pagopa.selfcare.product.entity.Product; public class RegistryManagerSELC extends BaseRegistryManager { @@ -11,12 +14,28 @@ public RegistryManagerSELC(Onboarding onboarding) { } public Object retrieveInstitution() { - return Uni.createFrom().item(new Object()); + setDefaultOriginAndOriginId(); + return Uni.createFrom().item(new Object()); + } + + private void setDefaultOriginAndOriginId() { + onboarding.getInstitution().setOriginId(onboarding.getInstitution().getTaxCode()); + onboarding.getInstitution().setOrigin(Origin.SELC); } @Override public Uni customValidation(Product product) { - return Uni.createFrom().item(onboarding); + if (isWorkflowTypeAllowed(onboarding.getWorkflowType())) { + return Uni.createFrom().item(onboarding); + } + + return Uni.createFrom().failure(new InvalidRequestException("Invalid workflow type for origin SELC")); + } + + protected boolean isWorkflowTypeAllowed(WorkflowType workflowType) { + return workflowType == WorkflowType.FOR_APPROVE || + workflowType == WorkflowType.IMPORT || + workflowType == WorkflowType.FOR_APPROVE_PT; } @Override diff --git a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerSELCTest.java b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerSELCTest.java new file mode 100644 index 000000000..6295545f6 --- /dev/null +++ b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerSELCTest.java @@ -0,0 +1,66 @@ +package it.pagopa.selfcare.onboarding.entity.registry; + +import io.smallrye.mutiny.Uni; +import it.pagopa.selfcare.onboarding.common.Origin; +import it.pagopa.selfcare.onboarding.common.WorkflowType; +import it.pagopa.selfcare.onboarding.entity.Institution; +import it.pagopa.selfcare.onboarding.entity.Onboarding; +import it.pagopa.selfcare.onboarding.exception.InvalidRequestException; +import it.pagopa.selfcare.product.entity.Product; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.EnumSource; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +class RegistryManagerSELCTest { + + private Onboarding onboarding; + private RegistryManagerSELC registryManagerSELC; + + @BeforeEach + void setUp() { + onboarding = mock(Onboarding.class); + registryManagerSELC = new RegistryManagerSELC(onboarding); + } + + @Test + void retrieveInstitution_shouldSetDefaultOriginAndOriginId() { + var institution = mock(Institution.class); + when(onboarding.getInstitution()).thenReturn(institution); + when(institution.getTaxCode()).thenReturn("123456"); + + registryManagerSELC.retrieveInstitution(); + + verify(institution).setOriginId("123456"); + verify(institution).setOrigin(Origin.SELC); + } + + @ParameterizedTest + @EnumSource(value = WorkflowType.class, names = {"FOR_APPROVE", "IMPORT", "FOR_APPROVE_PT"}) + void customValidation_shouldReturnOnboarding_whenWorkflowTypeAllowed(WorkflowType workflowType) { + when(onboarding.getWorkflowType()).thenReturn(workflowType); + + Uni result = registryManagerSELC.customValidation(mock(Product.class)); + + assertEquals(onboarding, result.await().indefinitely()); + } + + @Test + void customValidation_shouldThrowInvalidRequestException_whenWorkflowTypeNotAllowed() { + when(onboarding.getWorkflowType()).thenReturn(WorkflowType.CONFIRMATION); + + Uni result = registryManagerSELC.customValidation(mock(Product.class)); + + assertThrows(InvalidRequestException.class, () -> result.await().indefinitely()); + } + + @Test + void isValid_shouldReturnTrue() { + Uni result = registryManagerSELC.isValid(); + + assertTrue(result.await().indefinitely()); + } +} \ No newline at end of file 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 f0fd001ee..fc1c7be88 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 @@ -277,6 +277,9 @@ void onboardingIncrement_Ok(UniAsserter asserter) { institutionBaseRequest.setInstitutionType(InstitutionType.PA); institutionBaseRequest.setTaxCode("taxCode"); institutionBaseRequest.setOriginId("originId"); + institutionBaseRequest.setOrigin(Origin.IPA); + institutionBaseRequest.setDescription(DESCRIPTION_FIELD); + institutionBaseRequest.setDigitalAddress(DIGITAL_ADDRESS_FIELD); onboardingRequest.setInstitution(institutionBaseRequest); Billing billing = new Billing(); billing.setRecipientCode("recCode"); @@ -294,6 +297,12 @@ void onboardingIncrement_Ok(UniAsserter asserter) { mockVerifyAllowedMap(onboardingRequest.getInstitution().getTaxCode(), onboardingRequest.getProductId(), asserter); mockVerifyOnboardingNotEmpty(asserter); + InstitutionResource institutionResource = new InstitutionResource(); + institutionResource.setDigitalAddress(DIGITAL_ADDRESS_FIELD); + institutionResource.setDescription(DESCRIPTION_FIELD); + when(institutionRegistryProxyApi.findInstitutionUsingGET(any(), any(), any())).thenReturn(Uni.createFrom().item(institutionResource)); + + UOResource uoResource = new UOResource(); uoResource.setCodiceFiscaleSfe("codSfe"); uoResource.setCodiceIpa("originId"); @@ -317,6 +326,9 @@ private static OnboardingResponse getOnboardingResponse() { institution.setInstitutionType("PA"); institution.setOriginId("originId"); institution.setTaxCode("taxCode"); + institution.setDigitalAddress(DIGITAL_ADDRESS_FIELD); + institution.setDescription(DESCRIPTION_FIELD); + institution.setOrigin(Origin.IPA); onboardingResponse.setInstitution(institution); UserOnboardingResponse userOnboardingResponse = new UserOnboardingResponse(); @@ -485,6 +497,7 @@ void onboarding_Onboarding_addParentDescriptionForAooOrUo_Aoo(UniAsserter assert institutionBaseRequest.setTaxCode("taxCode"); institutionBaseRequest.setSubunitType(InstitutionPaSubunitType.AOO); institutionBaseRequest.setSubunitCode("SubunitCode"); + institutionBaseRequest.setOrigin(Origin.IPA); request.setInstitution(institutionBaseRequest); mockPersistOnboarding(asserter); @@ -594,6 +607,7 @@ void onboarding_Onboarding_addParentDescriptionForAooOrUo_Uo(UniAsserter asserte institutionBaseRequest.setTaxCode("taxCode"); institutionBaseRequest.setSubunitType(InstitutionPaSubunitType.UO); institutionBaseRequest.setSubunitCode("SubunitCode"); + institutionBaseRequest.setOrigin(Origin.IPA); request.setInstitution(institutionBaseRequest); mockPersistOnboarding(asserter); @@ -781,6 +795,33 @@ void onboarding_PRV(UniAsserter asserter) { }); } + @Test + @RunOnVertxContext + void onboarding_SELC_Forbidden_WorkflowType(UniAsserter asserter) { + Onboarding request = new Onboarding(); + List users = List.of(manager); + request.setProductId(PROD_PAGOPA.getValue()); + Institution institutionBaseRequest = new Institution(); + institutionBaseRequest.setDescription("name"); + institutionBaseRequest.setDigitalAddress("pec"); + institutionBaseRequest.setInstitutionType(InstitutionType.GSP); + institutionBaseRequest.setTaxCode("taxCode"); + request.setInstitution(institutionBaseRequest); + mockPersistOnboarding(asserter); + + asserter.execute(() -> when(userRegistryApi.updateUsingPATCH(any(), any())) + .thenReturn(Uni.createFrom().item(Response.noContent().build()))); + + + mockSimpleSearchPOSTAndPersist(asserter); + mockSimpleProductValidAssert(request.getProductId(), false, asserter); + mockVerifyOnboardingNotFound(); + mockVerifyAllowedMap(request.getInstitution().getTaxCode(), request.getProductId(), asserter); + + // onboardingCompletion will set the workflowType to COMPLETION, which is not allowed for GSP + asserter.assertFailedWith(() -> onboardingService.onboardingCompletion(request, users), InvalidRequestException.class); + } + @Test @RunOnVertxContext void onboarding_PRV_Bad_Request(UniAsserter asserter) { @@ -1143,7 +1184,7 @@ void onboardingPsp_whenUserFoundedAndWillNotUpdateAndProductHasParent(UniAsserte Institution dummyInstitution() { Institution institution = new Institution(); - institution.setInstitutionType(InstitutionType.SA); + institution.setInstitutionType(InstitutionType.GSP); return institution; } @@ -1250,7 +1291,7 @@ void onboarding_whenUserFoundAndWillNotUpdate(UniAsserter asserter) { Onboarding request = new Onboarding(); List users = List.of(wrongManager); - request.setProductId(PROD_INTEROP.getValue()); + request.setProductId(PROD_PAGOPA.getValue()); Institution institutionPspRequest = new Institution(); institutionPspRequest.setInstitutionType(InstitutionType.GSP); request.setInstitution(institutionPspRequest); @@ -1291,7 +1332,7 @@ void onboarding_whenUserFoundedAndWillUpdateMailUuid(UniAsserter asserter) { Onboarding request = new Onboarding(); List users = List.of(newManager); - request.setProductId(PROD_INTEROP.getValue()); + request.setProductId(PROD_IO.getValue()); Institution institutionPspRequest = new Institution(); institutionPspRequest.setInstitutionType(InstitutionType.GSP); request.setInstitution(institutionPspRequest); @@ -1349,6 +1390,12 @@ void onboarding_whenUserNotFoundedAndWillSave(UniAsserter asserter) { mockVerifyOnboardingNotFound(); mockVerifyAllowedMap(request.getInstitution().getTaxCode(), request.getProductId(), asserter); + InstitutionResource institutionResource = new InstitutionResource(); + institutionResource.setDigitalAddress(DIGITAL_ADDRESS_FIELD); + institutionResource.setDescription(DESCRIPTION_FIELD); + when(institutionRegistryProxyApi.findInstitutionUsingGET(any(), any(), any())).thenReturn(Uni.createFrom().item(institutionResource)); + + asserter.execute(() -> when(Onboarding.persistOrUpdate(any(List.class))) .thenAnswer(arg -> { List onboardings = (List) arg.getArguments()[0]; @@ -1371,8 +1418,10 @@ void onboarding_whenUserNotFoundedAndWillSave(UniAsserter asserter) { @RunOnVertxContext void onboarding_shouldThrowExceptionIfUserRegistryFails(UniAsserter asserter) { Onboarding onboardingDefaultRequest = new Onboarding(); - onboardingDefaultRequest.setInstitution(dummyInstitution()); - onboardingDefaultRequest.setProductId(PROD_INTEROP.getValue()); + Institution institution = new Institution(); + institution.setInstitutionType(InstitutionType.GSP); + onboardingDefaultRequest.setInstitution(institution); + onboardingDefaultRequest.setProductId(PROD_PAGOPA.getValue()); List users = List.of(manager); mockPersistOnboarding(asserter); @@ -2010,11 +2059,17 @@ void onboarding_Onboarding_importPSP(UniAsserter asserter) { void onboarding_aggregationCompletion(UniAsserter asserter) { Onboarding request = new Onboarding(); List users = List.of(manager); - request.setProductId(PROD_IO.getValue()); + request.setProductId(PROD_INTEROP.getValue()); Institution institutionBaseRequest = new Institution(); institutionBaseRequest.setTaxCode("taxCode"); institutionBaseRequest.setInstitutionType(InstitutionType.SA); + institutionBaseRequest.setOrigin(Origin.IPA); + institutionBaseRequest.setDescription(DESCRIPTION_FIELD); + institutionBaseRequest.setDigitalAddress(DIGITAL_ADDRESS_FIELD); request.setInstitution(institutionBaseRequest); + Billing billing = new Billing(); + billing.setRecipientCode("recipientCode"); + request.setBilling(billing); mockPersistOnboarding(asserter); mockPersistToken(asserter); @@ -2029,6 +2084,8 @@ void onboarding_aggregationCompletion(UniAsserter asserter) { InstitutionResource institutionResource = new InstitutionResource(); institutionResource.setCategory("L37"); + institutionResource.setDescription(DESCRIPTION_FIELD); + institutionResource.setDigitalAddress(DIGITAL_ADDRESS_FIELD); asserter.execute(() -> when(institutionRegistryProxyApi.findInstitutionUsingGET(institutionBaseRequest.getTaxCode(), null, null)) .thenReturn(Uni.createFrom().item(institutionResource))); @@ -2046,12 +2103,15 @@ void onboarding_aggregationCompletion(UniAsserter asserter) { @RunOnVertxContext void onboardingCompletion(UniAsserter asserter) { Onboarding request = new Onboarding(); - Product product = createDummyProduct(PROD_IO.getValue(), false); + Product product = createDummyProduct(PROD_INTEROP.getValue(), false); List users = List.of(manager); - request.setProductId(PROD_IO.getValue()); + request.setProductId(PROD_INTEROP.getValue()); Institution institutionBaseRequest = new Institution(); institutionBaseRequest.setTaxCode("taxCode"); institutionBaseRequest.setInstitutionType(InstitutionType.SA); + institutionBaseRequest.setOrigin(Origin.IPA); + institutionBaseRequest.setDescription(DESCRIPTION_FIELD); + institutionBaseRequest.setDigitalAddress(DIGITAL_ADDRESS_FIELD); request.setInstitution(institutionBaseRequest); mockPersistOnboarding(asserter); @@ -2069,6 +2129,8 @@ void onboardingCompletion(UniAsserter asserter) { InstitutionResource institutionResource = new InstitutionResource(); institutionResource.setCategory("L37"); + institutionResource.setDigitalAddress(DIGITAL_ADDRESS_FIELD); + institutionResource.setDescription(DESCRIPTION_FIELD); asserter.execute(() -> when(institutionRegistryProxyApi.findInstitutionUsingGET(institutionBaseRequest.getTaxCode(), null, null)) .thenReturn(Uni.createFrom().item(institutionResource))); From 9f3a0ffa036d8e545d146510a5083e7df1c0cabd Mon Sep 17 00:00:00 2001 From: gianmarcoplutino <119858159+gianmarcoplutino@users.noreply.github.com> Date: Wed, 11 Dec 2024 11:49:39 +0100 Subject: [PATCH 15/18] [SELC-6177] feat: added onboardingPgCompletion service (#644) --- .../controller/OnboardingController.java | 2 +- .../onboarding/service/OnboardingService.java | 3 ++ .../service/OnboardingServiceDefault.java | 10 +++++ .../controller/OnboardingControllerTest.java | 4 +- .../service/OnboardingServiceDefaultTest.java | 41 +++++++++++++++++++ 5 files changed, 57 insertions(+), 3 deletions(-) diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/OnboardingController.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/OnboardingController.java index d3ac46378..9817b6dbe 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/OnboardingController.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/OnboardingController.java @@ -252,7 +252,7 @@ public Uni onboardingPspCompletion(@Valid OnboardingPspReque public Uni onboardingPgCompletion(@Valid OnboardingPgRequest onboardingRequest, @Context SecurityContext ctx) { return readUserIdFromToken(ctx) .onItem().transformToUni(userId -> onboardingService - .onboardingCompletion(fillUserId(onboardingMapper.toEntity(onboardingRequest), userId), onboardingRequest.getUsers())); + .onboardingPgCompletion(fillUserId(onboardingMapper.toEntity(onboardingRequest), userId), onboardingRequest.getUsers())); } @Operation( diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingService.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingService.java index c584023f7..488be2e3a 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingService.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingService.java @@ -37,6 +37,9 @@ Uni onboardingImport( Uni onboardingCompletion( Onboarding onboarding, List userRequests); + Uni onboardingPgCompletion( + Onboarding onboarding, List userRequests); + Uni onboardingAggregationCompletion( Onboarding onboarding, List userRequests, 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 03d51cfcd..f0325855a 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 @@ -246,6 +246,16 @@ public Uni onboardingCompletion( onboarding, userRequests, null, TIMEOUT_ORCHESTRATION_RESPONSE, false); } + @Override + public Uni onboardingPgCompletion( + Onboarding onboarding, List userRequests) { + onboarding.setWorkflowType(WorkflowType.CONFIRMATION); + onboarding.setStatus(OnboardingStatus.PENDING); + + return fillUsersAndOnboarding( + onboarding, userRequests, null, TIMEOUT_ORCHESTRATION_RESPONSE, false); + } + @Override public Uni onboardingAggregationCompletion( Onboarding onboarding, diff --git a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/controller/OnboardingControllerTest.java b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/controller/OnboardingControllerTest.java index 9e8b04ee2..93aef5a9a 100644 --- a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/controller/OnboardingControllerTest.java +++ b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/controller/OnboardingControllerTest.java @@ -679,7 +679,7 @@ void onboardingCompletePg() { onboardingPgRequest.setDigitalAddress("digital@address.it"); onboardingPgRequest.setOrigin(Origin.INFOCAMERE); - Mockito.when(onboardingService.onboardingCompletion(any(), any())) + Mockito.when(onboardingService.onboardingPgCompletion(any(), any())) .thenReturn(Uni.createFrom().item(new OnboardingResponse())); given() @@ -691,7 +691,7 @@ void onboardingCompletePg() { .statusCode(200); ArgumentCaptor captor = ArgumentCaptor.forClass(Onboarding.class); - Mockito.verify(onboardingService, times(1)).onboardingCompletion(captor.capture(), any()); + Mockito.verify(onboardingService, times(1)).onboardingPgCompletion(captor.capture(), any()); assertEquals(InstitutionType.PG, captor.getValue().getInstitution().getInstitutionType()); } 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 fc1c7be88..fcf5eeafb 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 @@ -2144,6 +2144,47 @@ void onboardingCompletion(UniAsserter asserter) { }); } + @Test + @RunOnVertxContext + void onboardingPgCompletion(UniAsserter asserter) { + Onboarding request = new Onboarding(); + Product product = createDummyProduct(PROD_PN.getValue(), false); + List users = List.of(manager); + request.setProductId(PROD_PN.getValue()); + Institution institutionBaseRequest = new Institution(); + institutionBaseRequest.setTaxCode("taxCode"); + institutionBaseRequest.setInstitutionType(InstitutionType.PG); + institutionBaseRequest.setOrigin(Origin.INFOCAMERE); + request.setInstitution(institutionBaseRequest); + + mockPersistOnboarding(asserter); + mockPersistToken(asserter); + + mockSimpleSearchPOSTAndPersist(asserter); + mockSimpleProductValidAssert(request.getProductId(), false, asserter); + mockVerifyOnboardingNotFound(); + mockVerifyAllowedMap(request.getInstitution().getTaxCode(), request.getProductId(), asserter); + + asserter.execute(() -> when(productService.getProduct(any())).thenReturn(product)); + + asserter.execute(() -> when(userRegistryApi.updateUsingPATCH(any(), any())) + .thenReturn(Uni.createFrom().item(Response.noContent().build()))); + + InstitutionResource institutionResource = new InstitutionResource(); + institutionResource.setCategory("L37"); + asserter.execute(() -> when(institutionRegistryProxyApi.findInstitutionUsingGET(institutionBaseRequest.getTaxCode(), null, null)) + .thenReturn(Uni.createFrom().item(institutionResource))); + + asserter.assertThat(() -> onboardingService.onboardingPgCompletion(request, users), Assertions::assertNotNull); + + asserter.execute(() -> { + PanacheMock.verify(Onboarding.class).persist(any(Onboarding.class), any()); + PanacheMock.verify(Onboarding.class).persistOrUpdate(any(List.class)); + PanacheMock.verify(Onboarding.class).find(any(Document.class)); + PanacheMock.verifyNoMoreInteractions(Onboarding.class); + }); + } + @Test @RunOnVertxContext void onboardingUsers(UniAsserter asserter) { From 7dfd615be7310737a2dab4ef0d03df9ce44425a2 Mon Sep 17 00:00:00 2001 From: Giampiero Ferrara Date: Thu, 12 Dec 2024 09:50:33 +0100 Subject: [PATCH 16/18] [SELC-6155] feature: Refactored getFiles --- libs/onboarding-sdk-azure-storage/pom.xml | 2 +- .../azurestorage/AzureBlobClient.java | 2 ++ .../azurestorage/AzureBlobClientDefault.java | 25 ++++++++++++++----- libs/onboarding-sdk-common/pom.xml | 2 +- libs/onboarding-sdk-crypto/pom.xml | 2 +- libs/onboarding-sdk-pom/pom.xml | 2 +- libs/onboarding-sdk-product/pom.xml | 4 +-- 7 files changed, 27 insertions(+), 12 deletions(-) diff --git a/libs/onboarding-sdk-azure-storage/pom.xml b/libs/onboarding-sdk-azure-storage/pom.xml index 3f411ab4f..38519a1ba 100644 --- a/libs/onboarding-sdk-azure-storage/pom.xml +++ b/libs/onboarding-sdk-azure-storage/pom.xml @@ -6,7 +6,7 @@ it.pagopa.selfcare onboarding-sdk-pom - 0.6.1 + 0.6.2 ../onboarding-sdk-pom diff --git a/libs/onboarding-sdk-azure-storage/src/main/java/it/pagopa/selfcare/azurestorage/AzureBlobClient.java b/libs/onboarding-sdk-azure-storage/src/main/java/it/pagopa/selfcare/azurestorage/AzureBlobClient.java index 738dde5f1..c4c307179 100644 --- a/libs/onboarding-sdk-azure-storage/src/main/java/it/pagopa/selfcare/azurestorage/AzureBlobClient.java +++ b/libs/onboarding-sdk-azure-storage/src/main/java/it/pagopa/selfcare/azurestorage/AzureBlobClient.java @@ -18,5 +18,7 @@ public interface AzureBlobClient { BlobProperties getProperties(String filePath); + List getFiles(); + List getFiles(String path); } diff --git a/libs/onboarding-sdk-azure-storage/src/main/java/it/pagopa/selfcare/azurestorage/AzureBlobClientDefault.java b/libs/onboarding-sdk-azure-storage/src/main/java/it/pagopa/selfcare/azurestorage/AzureBlobClientDefault.java index 2bb33696e..33fa207a8 100644 --- a/libs/onboarding-sdk-azure-storage/src/main/java/it/pagopa/selfcare/azurestorage/AzureBlobClientDefault.java +++ b/libs/onboarding-sdk-azure-storage/src/main/java/it/pagopa/selfcare/azurestorage/AzureBlobClientDefault.java @@ -33,8 +33,8 @@ public AzureBlobClientDefault(String connectionString, String containerName) { log.trace("it.pagopa.selfcare.azurestorage.AzureBlobClient.it.pagopa.selfcare.azurestorage.AzureBlobClient"); this.containerName = containerName; this.blobClient = new BlobServiceClientBuilder() - .connectionString(connectionString) - .buildClient(); + .connectionString(connectionString) + .buildClient(); } @Override @@ -155,21 +155,34 @@ public BlobProperties getProperties(String filePath) { } } + @Override + public List getFiles() { + log.debug("START - getFiles"); + List listOfResource = new ArrayList<>(); + + final BlobContainerClient blobContainer = blobClient.getBlobContainerClient(containerName); + blobContainer.listBlobs().forEach(blob -> listOfResource.add(blob.getName())); + + log.debug("Results: {}", listOfResource.size()); + log.debug("END - getFiles"); + return listOfResource; + } + @Override public List getFiles(String path) { - log.debug("START - getFiles by given path: {}", path); - String sanitizePath = StringUtils.replace(path, "\n", StringUtils.EMPTY).replace("\r", StringUtils.EMPTY); + log.debug("START - getFiles"); List listOfResource = new ArrayList<>(); final BlobContainerClient blobContainer = blobClient.getBlobContainerClient(containerName); - if (StringUtils.isNotEmpty(sanitizePath)) { + if (StringUtils.isNotEmpty(path)) { + String sanitizePath = StringUtils.replace(path, "\n", StringUtils.EMPTY).replace("\r", StringUtils.EMPTY); + log.debug("getFiles by given path: {}", sanitizePath); ListBlobsOptions options = new ListBlobsOptions() .setPrefix(sanitizePath) .setDetails(new BlobListDetails() .setRetrieveDeletedBlobs(true) .setRetrieveSnapshots(true)); - blobContainer.listBlobs(options, null).forEach(blob -> listOfResource.add(blob.getName())); } diff --git a/libs/onboarding-sdk-common/pom.xml b/libs/onboarding-sdk-common/pom.xml index 87f5bee73..60028f5ab 100644 --- a/libs/onboarding-sdk-common/pom.xml +++ b/libs/onboarding-sdk-common/pom.xml @@ -4,7 +4,7 @@ it.pagopa.selfcare onboarding-sdk-pom - 0.6.1 + 0.6.2 ../onboarding-sdk-pom onboarding-sdk-common diff --git a/libs/onboarding-sdk-crypto/pom.xml b/libs/onboarding-sdk-crypto/pom.xml index 54f64ab77..8d5108755 100644 --- a/libs/onboarding-sdk-crypto/pom.xml +++ b/libs/onboarding-sdk-crypto/pom.xml @@ -4,7 +4,7 @@ it.pagopa.selfcare onboarding-sdk-pom - 0.6.1 + 0.6.2 ../onboarding-sdk-pom onboarding-sdk-crypto diff --git a/libs/onboarding-sdk-pom/pom.xml b/libs/onboarding-sdk-pom/pom.xml index 4e9d12358..c227d2d50 100644 --- a/libs/onboarding-sdk-pom/pom.xml +++ b/libs/onboarding-sdk-pom/pom.xml @@ -5,7 +5,7 @@ onboarding-sdk-pom pom onboarding-sdk-pom - 0.6.1 + 0.6.2 17 diff --git a/libs/onboarding-sdk-product/pom.xml b/libs/onboarding-sdk-product/pom.xml index dc8dcfd9d..058a35163 100644 --- a/libs/onboarding-sdk-product/pom.xml +++ b/libs/onboarding-sdk-product/pom.xml @@ -4,12 +4,12 @@ it.pagopa.selfcare onboarding-sdk-pom - 0.6.1 + 0.6.2 ../onboarding-sdk-pom onboarding-sdk-product onboarding-sdk-product - 0.6.1 + 0.6.2 2.15.2 From 2f236fa963bba660f2e2367d66d768a543e8d19d Mon Sep 17 00:00:00 2001 From: Giampiero Ferrara Date: Thu, 12 Dec 2024 11:15:30 +0100 Subject: [PATCH 17/18] [SELC-6159] feat: Update SDK dependency --- apps/onboarding-functions/pom.xml | 2 +- apps/onboarding-ms/pom.xml | 2 +- apps/pom.xml | 2 +- test-coverage/pom.xml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/onboarding-functions/pom.xml b/apps/onboarding-functions/pom.xml index 2bad72c43..ccffb9988 100644 --- a/apps/onboarding-functions/pom.xml +++ b/apps/onboarding-functions/pom.xml @@ -22,7 +22,7 @@ true 3.1.2 1.5.5.Final - 0.6.1 + 0.6.2 diff --git a/apps/onboarding-ms/pom.xml b/apps/onboarding-ms/pom.xml index cf7afd881..2583a590b 100644 --- a/apps/onboarding-ms/pom.xml +++ b/apps/onboarding-ms/pom.xml @@ -24,7 +24,7 @@ true 3.1.2 2.4.1 - 0.6.1 + 0.6.2 diff --git a/apps/pom.xml b/apps/pom.xml index c2ee77de7..da50b1918 100644 --- a/apps/pom.xml +++ b/apps/pom.xml @@ -13,7 +13,7 @@ pom - 0.6.1 + 0.6.2 diff --git a/test-coverage/pom.xml b/test-coverage/pom.xml index 395c29a94..02db09fe6 100644 --- a/test-coverage/pom.xml +++ b/test-coverage/pom.xml @@ -19,7 +19,7 @@ **/utils/**, **/*Constant*, **/*Config.java, **/error/**, **/filter/**, org/** https://sonarcloud.io - 0.6.1 + 0.6.2 From 8f5acbcd2d41c03723a782785543952658602713 Mon Sep 17 00:00:00 2001 From: pierpaolodidato89 <137791912+pierpaolodidato89@users.noreply.github.com> Date: Thu, 12 Dec 2024 11:34:41 +0100 Subject: [PATCH 18/18] [SELC-6170] feat: Updated PdfMapper for GPU Data --- .../onboarding/entity/BusinessData.java | 9 ++++++++ .../onboarding/service/OnboardingService.java | 2 +- .../selfcare/onboarding/utils/PdfMapper.java | 22 ++++++++----------- .../service/OnboardingServiceTest.java | 4 ++-- .../entity/registry/RegistryManagerSELC.java | 3 ++- .../service/TokenServiceDefault.java | 3 ++- .../service/TokenServiceDefaultTest.java | 5 ++++- 7 files changed, 29 insertions(+), 19 deletions(-) diff --git a/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/entity/BusinessData.java b/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/entity/BusinessData.java index 45b3d4ee5..e8d8f8405 100644 --- a/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/entity/BusinessData.java +++ b/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/entity/BusinessData.java @@ -5,6 +5,7 @@ public class BusinessData { private String businessRegisterNumber; private String legalRegisterNumber; private String legalRegisterName; + private boolean longTermPayments; public String getBusinessRegisterNumber() { return businessRegisterNumber; @@ -29,4 +30,12 @@ public String getLegalRegisterName() { public void setLegalRegisterName(String legalRegisterName) { this.legalRegisterName = legalRegisterName; } + + public boolean isLongTermPayments() { + return longTermPayments; + } + + public void setLongTermPayments(boolean longTermPayments) { + this.longTermPayments = longTermPayments; + } } diff --git a/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingService.java b/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingService.java index 30d3d0d5a..bcf811fc3 100644 --- a/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingService.java +++ b/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/service/OnboardingService.java @@ -157,7 +157,7 @@ public void saveTokenWithAttachment(OnboardingAttachment onboardingAttachment) { private boolean checkTokenExist(Onboarding onboarding) { // Skip if token already exists - Optional optToken = tokenRepository.findByOnboardingId(onboarding.getId()); + Optional optToken = tokenRepository.findByIdOptional(onboarding.getId()); if (optToken.isPresent()) { log.debug("Token has already exists for onboarding {}", onboarding.getId()); return true; diff --git a/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/utils/PdfMapper.java b/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/utils/PdfMapper.java index c89765b2b..63b40af68 100644 --- a/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/utils/PdfMapper.java +++ b/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/utils/PdfMapper.java @@ -109,6 +109,9 @@ public static Map setUpCommonData( public static Map setUpAttachmentData(Onboarding onboarding) { Map map = new HashMap<>(); + map.put(INSTITUTION_NAME, onboarding.getInstitution().getDescription()); + map.put("institutionTaxCode", Optional.ofNullable(onboarding.getInstitution().getTaxCode()).orElse(UNDERSCORE)); + map.put("institutionMail", onboarding.getInstitution().getDigitalAddress()); if (Objects.nonNull(onboarding.getInstitution().getGpuData())) { map.put( "businessRegisterNumber", @@ -122,19 +125,12 @@ public static Map setUpAttachmentData(Onboarding onboarding) { "legalRegisterName", Optional.ofNullable(onboarding.getInstitution().getGpuData().getLegalRegisterName()) .orElse(UNDERSCORE)); - map.put("manager", onboarding.getInstitution().getGpuData().isManager() ? "Si" : "No"); - map.put( - "managerAuthorized", - onboarding.getInstitution().getGpuData().isManagerAuthorized() ? "Si" : "No"); - map.put( - "managerEligible", - onboarding.getInstitution().getGpuData().isManagerEligible() ? "Si" : "No"); - map.put( - "managerProsecution", - onboarding.getInstitution().getGpuData().isManagerProsecution() ? "Si" : "No"); - map.put( - "institutionCourtMeasures", - onboarding.getInstitution().getGpuData().isInstitutionCourtMeasures() ? "Si" : "No"); + map.put("businessRegisterCheckbox1", StringUtils.isNotEmpty(onboarding.getInstitution().getGpuData().getBusinessRegisterNumber()) ? "X" : ""); + map.put("businessRegisterCheckbox2", StringUtils.isEmpty(onboarding.getInstitution().getGpuData().getBusinessRegisterNumber()) ? "X" : ""); + map.put("publicServicesCheckbox1", StringUtils.isNotEmpty(onboarding.getInstitution().getGpuData().getLegalRegisterName()) ? "X" : ""); + map.put("publicServicesCheckbox2", StringUtils.isEmpty(onboarding.getInstitution().getGpuData().getLegalRegisterName()) ? "X" : ""); + map.put("longTermPaymentsCheckbox1", onboarding.getInstitution().getGpuData().isLongTermPayments() ? "X" : ""); + map.put("longTermPaymentsCheckbox2", !onboarding.getInstitution().getGpuData().isLongTermPayments() ? "X" : ""); } return map; } diff --git a/apps/onboarding-functions/src/test/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceTest.java b/apps/onboarding-functions/src/test/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceTest.java index d7dd033c3..0f43dba3e 100644 --- a/apps/onboarding-functions/src/test/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceTest.java +++ b/apps/onboarding-functions/src/test/java/it/pagopa/selfcare/onboarding/service/OnboardingServiceTest.java @@ -258,11 +258,11 @@ void saveToken_shouldSkipIfTokenExists() { Token token = createDummyToken(); onboardingWorkflow.setOnboarding(onboarding); - when(tokenRepository.findByOnboardingId(onboarding.getId())).thenReturn(Optional.of(token)); + when(tokenRepository.findByIdOptional(onboarding.getId())).thenReturn(Optional.of(token)); onboardingService.saveTokenWithContract(onboardingWorkflow); - Mockito.verify(tokenRepository, Mockito.times(1)).findByOnboardingId(onboarding.getId()); + Mockito.verify(tokenRepository, Mockito.times(1)).findByIdOptional(onboarding.getId()); Mockito.verifyNoMoreInteractions(tokenRepository); } diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerSELC.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerSELC.java index b2878474e..f53ccc37a 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerSELC.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/entity/registry/RegistryManagerSELC.java @@ -35,7 +35,8 @@ public Uni customValidation(Product product) { protected boolean isWorkflowTypeAllowed(WorkflowType workflowType) { return workflowType == WorkflowType.FOR_APPROVE || workflowType == WorkflowType.IMPORT || - workflowType == WorkflowType.FOR_APPROVE_PT; + workflowType == WorkflowType.FOR_APPROVE_PT || + workflowType == WorkflowType.FOR_APPROVE_GPU; } @Override diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/TokenServiceDefault.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/TokenServiceDefault.java index a10be16d2..e3f88c019 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/TokenServiceDefault.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/TokenServiceDefault.java @@ -1,6 +1,7 @@ package it.pagopa.selfcare.onboarding.service; import static it.pagopa.selfcare.onboarding.common.TokenType.ATTACHMENT; +import static it.pagopa.selfcare.onboarding.common.TokenType.INSTITUTION; import io.smallrye.mutiny.Uni; import it.pagopa.selfcare.azurestorage.AzureBlobClient; @@ -30,7 +31,7 @@ public Uni> getToken(String onboardingId) { } @Override public Uni> retrieveContractNotSigned(String onboardingId) { - return Token.find("onboardingId", onboardingId) + return Token.find("onboardingId = ?1 and type = ?2", onboardingId, INSTITUTION.name()) .firstResult() .map(Token.class::cast) .onItem().transformToUni(token -> diff --git a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/TokenServiceDefaultTest.java b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/TokenServiceDefaultTest.java index 15f8d9b86..222d35a34 100644 --- a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/TokenServiceDefaultTest.java +++ b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/TokenServiceDefaultTest.java @@ -1,6 +1,7 @@ package it.pagopa.selfcare.onboarding.service; import static it.pagopa.selfcare.onboarding.common.TokenType.ATTACHMENT; +import static it.pagopa.selfcare.onboarding.common.TokenType.INSTITUTION; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -15,6 +16,7 @@ import io.smallrye.mutiny.Uni; import io.smallrye.mutiny.helpers.test.UniAssertSubscriber; import it.pagopa.selfcare.azurestorage.AzureBlobClient; +import it.pagopa.selfcare.onboarding.common.TokenType; import it.pagopa.selfcare.onboarding.entity.Token; import jakarta.inject.Inject; import java.io.File; @@ -52,11 +54,12 @@ void getToken() { void retrieveContractNotSigned() { Token token = new Token(); token.setContractFilename("fileName"); + token.setType(TokenType.INSTITUTION); ReactivePanacheQuery queryPage = mock(ReactivePanacheQuery.class); when(queryPage.firstResult()).thenReturn(Uni.createFrom().item(token)); PanacheMock.mock(Token.class); - when(Token.find("onboardingId", onboardingId)) + when(Token.find("onboardingId = ?1 and type = ?2", onboardingId, INSTITUTION.name())) .thenReturn(queryPage); when(azureBlobClient.getFileAsPdf(anyString())).thenReturn(new File("fileName"));