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 47fc42137..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" } } } @@ -1934,6 +1889,9 @@ "legalRegisterName" : { "type" : "string" }, + "longTermPayments" : { + "type" : "boolean" + }, "manager" : { "type" : "boolean" }, @@ -2701,6 +2659,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..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 @@ -1404,6 +1371,8 @@ components: type: string legalRegisterName: type: string + longTermPayments: + type: boolean manager: type: boolean managerAuthorized: @@ -1993,6 +1962,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/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/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 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 e94f71c64..17ac21561 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 @@ -2134,11 +2134,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());