From bd16437a2848db76ff45c34966ae859e152f6dae Mon Sep 17 00:00:00 2001 From: Eugen Begiqi Date: Tue, 3 Sep 2024 17:40:06 +0200 Subject: [PATCH 01/12] SELC-5438: Refactoring --- apps/onboarding-cdc/.factorypath | 47 +++++ apps/onboarding-ms/src/main/docs/openapi.json | 96 +++++++++-- apps/onboarding-ms/src/main/docs/openapi.yaml | 67 ++++++- .../controller/AggregatesController.java | 38 +++- .../model/AggregatesCsvResponse.java | 14 +- .../pagopa/selfcare/onboarding/model/Csv.java | 5 + .../onboarding/model/CsvAggregate.java | 7 +- .../onboarding/model/CsvAggregatePagoPa.java | 45 +++++ .../onboarding/model/CsvAggregateSend.java | 59 +++++++ .../onboarding/service/AggregatesService.java | 6 +- .../service/AggregatesServiceDefault.java | 163 +++++++++++++++--- .../src/main/resources/application.properties | 2 +- .../controller/AggregatesControllerTest.java | 4 +- .../service/AggregatesServiceDefaultTest.java | 2 +- 14 files changed, 491 insertions(+), 64 deletions(-) create mode 100644 apps/onboarding-cdc/.factorypath create mode 100644 apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/Csv.java create mode 100644 apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/CsvAggregatePagoPa.java create mode 100644 apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/CsvAggregateSend.java diff --git a/apps/onboarding-cdc/.factorypath b/apps/onboarding-cdc/.factorypath new file mode 100644 index 000000000..ff7032b1b --- /dev/null +++ b/apps/onboarding-cdc/.factorypath @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/onboarding-ms/src/main/docs/openapi.json b/apps/onboarding-ms/src/main/docs/openapi.json index 7047f045f..69c49476e 100644 --- a/apps/onboarding-ms/src/main/docs/openapi.json +++ b/apps/onboarding-ms/src/main/docs/openapi.json @@ -25,7 +25,24 @@ "name" : "support" } ], "paths" : { - "/v1/aggregates/verification" : { + "/v1/aggregates/prova" : { + "get" : { + "tags" : [ "Aggregates Controller" ], + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "text/plain" : { + "schema" : { + "type" : "string" + } + } + } + } + } + } + }, + "/v1/aggregates/verification/appio" : { "post" : { "tags" : [ "Aggregates Controller" ], "summary" : "Validate the data related to the aggregated entities present in a CSV file", @@ -55,17 +72,76 @@ } } } - }, - "401" : { - "description" : "Not Authorized" - }, - "403" : { - "description" : "Not Allowed" + } + } + } + }, + "/v1/aggregates/verification/pagopa" : { + "post" : { + "tags" : [ "Aggregates Controller" ], + "summary" : "Validate the data related to the aggregated entities present in a CSV file", + "requestBody" : { + "content" : { + "multipart/form-data" : { + "schema" : { + "required" : [ "aggregates" ], + "type" : "object", + "properties" : { + "aggregates" : { + "format" : "binary", + "type" : "string" + } + } + } + } } }, - "security" : [ { - "SecurityScheme" : [ ] - } ] + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/VerifyAggregateResponse" + } + } + } + } + } + } + }, + "/v1/aggregates/verification/send" : { + "post" : { + "tags" : [ "Aggregates Controller" ], + "summary" : "Validate the data related to the aggregated entities present in a CSV file", + "requestBody" : { + "content" : { + "multipart/form-data" : { + "schema" : { + "required" : [ "aggregates" ], + "type" : "object", + "properties" : { + "aggregates" : { + "format" : "binary", + "type" : "string" + } + } + } + } + } + }, + "responses" : { + "200" : { + "description" : "OK", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/VerifyAggregateResponse" + } + } + } + } + } } }, "/v1/notification/resend" : { diff --git a/apps/onboarding-ms/src/main/docs/openapi.yaml b/apps/onboarding-ms/src/main/docs/openapi.yaml index be41357e2..60251de43 100644 --- a/apps/onboarding-ms/src/main/docs/openapi.yaml +++ b/apps/onboarding-ms/src/main/docs/openapi.yaml @@ -16,7 +16,66 @@ tags: - name: internal-v1 - name: support paths: - /v1/aggregates/verification: + /v1/aggregates/prova: + get: + tags: + - Aggregates Controller + responses: + "200": + description: OK + content: + text/plain: + schema: + type: string + /v1/aggregates/verification/appio: + post: + tags: + - Aggregates Controller + summary: Validate the data related to the aggregated entities present in a CSV + file + requestBody: + content: + multipart/form-data: + schema: + required: + - aggregates + type: object + properties: + aggregates: + format: binary + type: string + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/VerifyAggregateResponse" + /v1/aggregates/verification/pagopa: + post: + tags: + - Aggregates Controller + summary: Validate the data related to the aggregated entities present in a CSV + file + requestBody: + content: + multipart/form-data: + schema: + required: + - aggregates + type: object + properties: + aggregates: + format: binary + type: string + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/VerifyAggregateResponse" + /v1/aggregates/verification/send: post: tags: - Aggregates Controller @@ -40,12 +99,6 @@ paths: application/json: schema: $ref: "#/components/schemas/VerifyAggregateResponse" - "401": - description: Not Authorized - "403": - description: Not Allowed - security: - - SecurityScheme: [] /v1/notification/resend: post: tags: diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/AggregatesController.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/AggregatesController.java index 29060608d..532185e00 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/AggregatesController.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/AggregatesController.java @@ -6,10 +6,7 @@ import it.pagopa.selfcare.onboarding.service.AggregatesService; import jakarta.inject.Inject; import jakarta.validation.constraints.NotNull; -import jakarta.ws.rs.Consumes; -import jakarta.ws.rs.POST; -import jakarta.ws.rs.Path; -import jakarta.ws.rs.Produces; +import jakarta.ws.rs.*; import jakarta.ws.rs.core.MediaType; import lombok.AllArgsConstructor; import org.eclipse.microprofile.openapi.annotations.Operation; @@ -18,7 +15,7 @@ import java.io.File; -@Authenticated +//@Authenticated @Path("/v1/aggregates") @Tag(name = "Aggregates Controller") @AllArgsConstructor @@ -29,12 +26,37 @@ public class AggregatesController { @Operation(summary = "Validate the data related to the aggregated entities present in a CSV file") @POST - @Path("/verification") + @Path("/verification/appio") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.MULTIPART_FORM_DATA) - public Uni verifyAggregatesCsv(@NotNull @RestForm("aggregates") File file){ + public Uni verifyAppIoAggregatesCsv(@NotNull @RestForm("aggregates") File file){ - return aggregatesService.validateAggregatesCsv(file); + return aggregatesService.validateAppIoAggregatesCsv(file); + } + @Path("prova") + @GET + public String vv () { + return "ciao"; + } + + @Operation(summary = "Validate the data related to the aggregated entities present in a CSV file") + @POST + @Path("/verification/send") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.MULTIPART_FORM_DATA) + public Uni verifySendAggregatesCsv(@NotNull @RestForm("aggregates") File file){ + + return aggregatesService.validateSendAggregatesCsv(file); + } + + @Operation(summary = "Validate the data related to the aggregated entities present in a CSV file") + @POST + @Path("/verification/pagopa") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.MULTIPART_FORM_DATA) + public Uni verifyPagoPaAggregatesCsv(@NotNull @RestForm("aggregates") File file){ + + return aggregatesService.validatePagoPaAggregatesCsv(file); } diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/AggregatesCsvResponse.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/AggregatesCsvResponse.java index ab7bc9978..c10b07cd8 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/AggregatesCsvResponse.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/AggregatesCsvResponse.java @@ -4,28 +4,28 @@ import java.util.List; public class AggregatesCsvResponse { - private List csvAggregateList; - private List validAggregates = new ArrayList<>(); + private List csvAggregateList; + private List validAggregates = new ArrayList<>(); private List rowErrorList; - public AggregatesCsvResponse(List csvAggregateList, List rowErrorList) { + public AggregatesCsvResponse(List csvAggregateList, List rowErrorList) { this.csvAggregateList = csvAggregateList; this.rowErrorList = rowErrorList; } - public List getCsvAggregateList() { + public List getCsvAggregateList() { return csvAggregateList; } - public void setCsvAggregateList(List csvAggregateList) { + public void setCsvAggregateList(List Csv) { this.csvAggregateList = csvAggregateList; } - public List getValidAggregates() { + public List getValidAggregates() { return validAggregates; } - public void setValidAggregates(List validAggregates) { + public void setValidAggregates(List Csv) { this.validAggregates = validAggregates; } diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/Csv.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/Csv.java new file mode 100644 index 000000000..c5a9964ae --- /dev/null +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/Csv.java @@ -0,0 +1,5 @@ +package it.pagopa.selfcare.onboarding.model; + +public interface Csv { + void setRowNumber(int lineNumber); +} diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/CsvAggregate.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/CsvAggregate.java index cf24afa18..7a560d681 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/CsvAggregate.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/CsvAggregate.java @@ -4,7 +4,7 @@ import lombok.Data; @Data -public class CsvAggregate { +public class CsvAggregate implements Csv { @CsvBindByPosition(position = 0) private String taxCode; @@ -23,5 +23,10 @@ public class CsvAggregate { private Integer rowNumber; + @Override + public void setRowNumber(int lineNumber) { + this.rowNumber = lineNumber; + } + } diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/CsvAggregatePagoPa.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/CsvAggregatePagoPa.java new file mode 100644 index 000000000..c1e7cedbf --- /dev/null +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/CsvAggregatePagoPa.java @@ -0,0 +1,45 @@ +package it.pagopa.selfcare.onboarding.model; + +import com.opencsv.bean.CsvBindByPosition; +import lombok.Data; + +@Data +public class CsvAggregatePagoPa implements Csv { + + @CsvBindByPosition(position = 0) + private String aggregateName; + + @CsvBindByPosition(position = 1) + private String emailPec; + + @CsvBindByPosition(position = 2) + private String taxNumber; + + @CsvBindByPosition(position = 3) + private String vatNumber; + + @CsvBindByPosition(position = 4) + private String address; + + @CsvBindByPosition(position = 5) + private String taxCodePT; + + @CsvBindByPosition(position = 6) + private String vatNumberPT; + + @CsvBindByPosition(position = 7) + private String iban; + + @CsvBindByPosition(position = 8) + private String service; + + @CsvBindByPosition(position = 9) + private String syncAsyncMode; + + private Integer rowNumber; + + @Override + public void setRowNumber(int lineNumber) { + this.rowNumber = lineNumber; + } +} diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/CsvAggregateSend.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/CsvAggregateSend.java new file mode 100644 index 000000000..27d710e6a --- /dev/null +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/CsvAggregateSend.java @@ -0,0 +1,59 @@ +package it.pagopa.selfcare.onboarding.model; + +import com.opencsv.bean.CsvBindByPosition; +import lombok.Data; + +@Data +public class CsvAggregateSend implements Csv { + + @CsvBindByPosition(position = 0) + private String aggregateName; + + @CsvBindByPosition(position = 1) + private String pec; + + @CsvBindByPosition(position = 2) + private String taxCode; + + @CsvBindByPosition(position = 3) + private String vatNumber; + + @CsvBindByPosition(position = 4) + private String codeSDI; + + @CsvBindByPosition(position = 5) + private String address; + + @CsvBindByPosition(position = 6) + private String city; + + @CsvBindByPosition(position = 7) + private String province; + + @CsvBindByPosition(position = 8) + private String ipaCode; + + @CsvBindByPosition(position = 9) + private String subunitType; + + @CsvBindByPosition(position = 10) + private String subunitCode; + + @CsvBindByPosition(position = 11) + private String adminAgreggateName; + + @CsvBindByPosition(position = 12) + private String adminAgreggateSurname; + + @CsvBindByPosition(position = 13) + private String adminAgreggateTaxCode; + + @CsvBindByPosition(position = 14) + private String adminAgreggateEmail; + private Integer rowNumber; + @Override + public void setRowNumber(int lineNumber) { + this.rowNumber = lineNumber; + } + +} diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/AggregatesService.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/AggregatesService.java index ffbe3506e..e246fabde 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/AggregatesService.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/AggregatesService.java @@ -8,5 +8,9 @@ public interface AggregatesService { - Uni validateAggregatesCsv(File file); + Uni validateAppIoAggregatesCsv (File file); + + Uni validateSendAggregatesCsv (File file); + + Uni validatePagoPaAggregatesCsv (File file); } diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/AggregatesServiceDefault.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/AggregatesServiceDefault.java index 36670455e..ca336bac5 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/AggregatesServiceDefault.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/AggregatesServiceDefault.java @@ -9,10 +9,7 @@ import it.pagopa.selfcare.onboarding.exception.InvalidRequestException; import it.pagopa.selfcare.onboarding.exception.ResourceNotFoundException; import it.pagopa.selfcare.onboarding.mapper.OnboardingMapper; -import it.pagopa.selfcare.onboarding.model.AggregatesCsvResponse; -import it.pagopa.selfcare.onboarding.model.CsvAggregate; -import it.pagopa.selfcare.onboarding.model.RowError; -import it.pagopa.selfcare.onboarding.model.VerifyAggregateResponse; +import it.pagopa.selfcare.onboarding.model.*; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import jakarta.ws.rs.WebApplicationException; @@ -66,11 +63,11 @@ public class AggregatesServiceDefault implements AggregatesService{ public static final String ERROR_VATNUMBER = "La partita IVA è obbligatoria"; @Override - public Uni validateAggregatesCsv(File file){ - AggregatesCsvResponse aggregatesCsvResponse = readItemsFromCsv(file); - List csvAggregates = aggregatesCsvResponse.getCsvAggregateList(); + public Uni validateAppIoAggregatesCsv(File file){ + AggregatesCsvResponse aggregatesCsvResponse = readItemsFromCsv(file, CsvAggregate.class); + List csvAggregates = aggregatesCsvResponse.getCsvAggregateList(); return Multi.createFrom().iterable(csvAggregates) - .onItem().transformToUniAndMerge(csvAggregate -> checkCsvAggregateAndFillAggregateOrErrorList(csvAggregate, aggregatesCsvResponse)) + .onItem().transformToUniAndMerge(csvAggregate -> checkCsvAggregateAppIoAndFillAggregateOrErrorList(csvAggregate, aggregatesCsvResponse)) .collect().asList() .onItem().transform(list -> onboardingMapper.toVerifyAggregateResponse(aggregatesCsvResponse)) .onItem().invoke(() -> LOG.infof("CSV file validated end: %s valid row and %s invalid row", @@ -78,24 +75,109 @@ public Uni validateAggregatesCsv(File file){ aggregatesCsvResponse.getRowErrorList().size())); } - private Uni checkCsvAggregateAndFillAggregateOrErrorList(CsvAggregate csvAggregate, AggregatesCsvResponse aggregatesCsvResponse) { - return checkCsvAggregate(csvAggregate) + @Override + public Uni validateSendAggregatesCsv(File file) { + AggregatesCsvResponse aggregatesCsvResponse = readItemsFromCsv(file, CsvAggregateSend.class); + List csvAggregates = aggregatesCsvResponse.getCsvAggregateList(); + return Multi.createFrom().iterable(csvAggregates) + .onItem().transformToUniAndMerge(csvAggregate -> checkCsvAggregateSendAndFillAggregateOrErrorList(csvAggregate, aggregatesCsvResponse)) + .collect().asList() + .onItem().transform(list -> onboardingMapper.toVerifyAggregateResponse(aggregatesCsvResponse)) + .onItem().invoke(() -> LOG.infof("CSV file validated end: %s valid row and %s invalid row", + aggregatesCsvResponse.getValidAggregates().size(), + aggregatesCsvResponse.getRowErrorList().size())); + } + + @Override + public Uni validatePagoPaAggregatesCsv(File file) { + AggregatesCsvResponse aggregatesCsvResponse = readItemsFromCsv(file, CsvAggregatePagoPa.class); + List csvAggregates = aggregatesCsvResponse.getCsvAggregateList(); + Uni varr = Multi.createFrom().iterable(csvAggregates) + .onItem().transformToUniAndMerge(csvAggregate -> checkCsvAggregatePagoPaAndFillAggregateOrErrorList(csvAggregate, aggregatesCsvResponse)) + .collect().asList() + .onItem().transform(list -> onboardingMapper.toVerifyAggregateResponse(aggregatesCsvResponse)) + .onItem().invoke(() -> LOG.infof("CSV file validated end: %s valid row and %s invalid row", + aggregatesCsvResponse.getValidAggregates().size(), + aggregatesCsvResponse.getRowErrorList().size())); + + return varr; + } + + private Uni checkCsvAggregateAppIoAndFillAggregateOrErrorList(Csv csv, AggregatesCsvResponse aggregatesCsvResponse) { + CsvAggregate csvAggregate = (CsvAggregate) csv; + return checkCsvAggregateAppIo(csvAggregate) + .onItem().invoke(() -> aggregatesCsvResponse.getValidAggregates().add(csvAggregate)) + .onFailure(ResourceNotFoundException.class).recoverWithUni(throwable -> mapToErrorRow(csvAggregate, throwable, aggregatesCsvResponse)) + .onFailure(InvalidRequestException.class).recoverWithUni(throwable -> mapToErrorRow(csvAggregate, throwable, aggregatesCsvResponse)); + } + + private Uni checkCsvAggregateSendAndFillAggregateOrErrorList(Csv csv, AggregatesCsvResponse aggregatesCsvResponse) { + CsvAggregateSend csvAggregate = (CsvAggregateSend) csv; + return checkCsvAggregateSend(csvAggregate) .onItem().invoke(() -> aggregatesCsvResponse.getValidAggregates().add(csvAggregate)) .onFailure(ResourceNotFoundException.class).recoverWithUni(throwable -> mapToErrorRow(csvAggregate, throwable, aggregatesCsvResponse)) .onFailure(InvalidRequestException.class).recoverWithUni(throwable -> mapToErrorRow(csvAggregate, throwable, aggregatesCsvResponse)); } - private static Uni mapToErrorRow(CsvAggregate csvAggregate, Throwable throwable, AggregatesCsvResponse aggregatesCsvResponse) { + private Uni checkCsvAggregatePagoPaAndFillAggregateOrErrorList(Csv csv, AggregatesCsvResponse aggregatesCsvResponse) { + CsvAggregatePagoPa csvAggregated = null; + try { + csvAggregated = (CsvAggregatePagoPa) csv; + } catch (Exception ex){ + ex.printStackTrace(); + System.out.println("Error RR: " ); + } + + CsvAggregatePagoPa csvAggregate = csvAggregated; + + return checkCsvAggregatePagoPa(csvAggregate) + .onItem().invoke(() -> aggregatesCsvResponse.getValidAggregates().add(csvAggregate)) + .onFailure(ResourceNotFoundException.class).recoverWithUni(throwable -> mapToErrorRow(csvAggregate, throwable, aggregatesCsvResponse)) + .onFailure(InvalidRequestException.class).recoverWithUni(throwable -> mapToErrorRow(csvAggregate, throwable, aggregatesCsvResponse)); + } + + private static Uni mapToErrorRow(Csv csv, Throwable throwable, AggregatesCsvResponse aggregatesCsvResponse) { + CsvAggregate csvAggregate = (CsvAggregate) csv; aggregatesCsvResponse.getRowErrorList().add(new RowError(csvAggregate.getRowNumber(), csvAggregate.getTaxCode(), throwable.getMessage())); return Uni.createFrom().voidItem(); } - private Uni checkCsvAggregate(CsvAggregate csvAggregate) { - return checkRequiredFields(csvAggregate) - .onItem().transformToUni(unused -> checkSubunitType(csvAggregate)); + private Uni checkCsvAggregateAppIo(Csv csvAggregate) { + return checkRequiredFieldsAppIo(csvAggregate) + .onItem().transformToUni(unused -> checkSubunitTypeAppIo(csvAggregate)); + } + + private Uni checkCsvAggregateSend(CsvAggregateSend csvAggregate) { + return checkRequiredFieldsSend(csvAggregate) + .onItem().transformToUni(unused -> checkSubunitTypeSend(csvAggregate)); } - private Uni checkSubunitType(CsvAggregate csvAggregate) { + private Uni checkCsvAggregatePagoPa(CsvAggregatePagoPa csvAggregate) { + return checkRequiredFieldsPagoPa(csvAggregate); + } + + private Uni checkSubunitTypeAppIo(Csv csv) { + CsvAggregate csvAggregate = (CsvAggregate) csv; + + if (StringUtils.isEmpty(csvAggregate.getSubunitType())) { + return institutionApi.findInstitutionUsingGET(csvAggregate.getTaxCode(), null, null) + .onFailure(this::checkIfNotFound).recoverWithUni(Uni.createFrom().failure(new ResourceNotFoundException(ERROR_IPA))) + .replaceWith(Uni.createFrom().voidItem()); + } else if (InstitutionPaSubunitType.AOO.name().equals(csvAggregate.getSubunitType())) { + return aooApi.findByUnicodeUsingGET(csvAggregate.getSubunitCode(), null) + .onFailure(this::checkIfNotFound).recoverWithUni(Uni.createFrom().failure(new ResourceNotFoundException(ERROR_IPA))) + .replaceWith(Uni.createFrom().voidItem()); + } else if (InstitutionPaSubunitType.UO.name().equals(csvAggregate.getSubunitType())) { + return uoApi.findByUnicodeUsingGET1(csvAggregate.getSubunitCode(), null) + .onFailure(this::checkIfNotFound).recoverWithUni(Uni.createFrom().failure(new ResourceNotFoundException(ERROR_IPA))) + .replaceWith(Uni.createFrom().voidItem()); + } else { + return Uni.createFrom().failure(new InvalidRequestException(ERROR_SUBUNIT_TYPE)); + } + } + + private Uni checkSubunitTypeSend(CsvAggregateSend csvAggregate) { + if (StringUtils.isEmpty(csvAggregate.getSubunitType())) { return institutionApi.findInstitutionUsingGET(csvAggregate.getTaxCode(), null, null) .onFailure(this::checkIfNotFound).recoverWithUni(Uni.createFrom().failure(new ResourceNotFoundException(ERROR_IPA))) @@ -117,7 +199,8 @@ private boolean checkIfNotFound(Throwable throwable) { return throwable instanceof WebApplicationException webApplicationException && webApplicationException.getResponse().getStatus() == 404; } - private Uni checkRequiredFields(CsvAggregate csvAggregate) { + private Uni checkRequiredFieldsAppIo(Csv csv) { + CsvAggregate csvAggregate = (CsvAggregate) csv; if (StringUtils.isEmpty(csvAggregate.getTaxCode())) { return Uni.createFrom().failure(new InvalidRequestException(ERROR_TAXCODE)); } else if (StringUtils.isEmpty(csvAggregate.getDescription())) { @@ -131,8 +214,36 @@ private Uni checkRequiredFields(CsvAggregate csvAggregate) { return Uni.createFrom().voidItem(); } - public AggregatesCsvResponse readItemsFromCsv(File file) { - List resultList = new ArrayList<>(); + private Uni checkRequiredFieldsSend(CsvAggregateSend csvAggregate) { + if (StringUtils.isEmpty("TODO")) { + return Uni.createFrom().failure(new InvalidRequestException(ERROR_TAXCODE)); + } else if (StringUtils.isEmpty("TODO")) { + return Uni.createFrom().failure(new InvalidRequestException(ERROR_DESCRIPTION)); + } else if (StringUtils.isEmpty(csvAggregate.getVatNumber())) { + return Uni.createFrom().failure(new InvalidRequestException(ERROR_VATNUMBER)); + } else if ((StringUtils.isEmpty(csvAggregate.getSubunitType()) && StringUtils.isNotEmpty(csvAggregate.getSubunitCode())) + || (StringUtils.isNotEmpty(csvAggregate.getSubunitType()) && StringUtils.isEmpty(csvAggregate.getSubunitCode()))) { + return Uni.createFrom().failure(new InvalidRequestException(ERROR_AOO_UO)); + } + return Uni.createFrom().voidItem(); + } + + private Uni checkRequiredFieldsPagoPa(CsvAggregatePagoPa csvAggregate) { + if (StringUtils.isEmpty("TODO")) { + return Uni.createFrom().failure(new InvalidRequestException(ERROR_TAXCODE)); + } else if (StringUtils.isEmpty("TODO")) { + return Uni.createFrom().failure(new InvalidRequestException(ERROR_DESCRIPTION)); + } else if (StringUtils.isEmpty(csvAggregate.getVatNumber())) { + return Uni.createFrom().failure(new InvalidRequestException(ERROR_VATNUMBER)); + } else if ((StringUtils.isEmpty("TODO") && StringUtils.isNotEmpty("TODO")) + || (StringUtils.isNotEmpty("TODO") && StringUtils.isEmpty("TODO"))) { + return Uni.createFrom().failure(new InvalidRequestException(ERROR_AOO_UO)); + } + return Uni.createFrom().voidItem(); + } + + public AggregatesCsvResponse readItemsFromCsv(File file, Class csv) { + List resultList = new ArrayList<>(); List errors = new ArrayList<>(); try { @@ -146,7 +257,7 @@ public AggregatesCsvResponse readItemsFromCsv(File file) { while ((nextLine = bufferedReader.readLine()) != null) { if(!nextLine.startsWith("(*")){ - parseLine(nextLine, lineNumber, resultList, errors); + parseLine(nextLine, lineNumber, resultList, errors, csv); lineNumber++; } } @@ -159,13 +270,13 @@ public AggregatesCsvResponse readItemsFromCsv(File file) { } } - private void parseLine(String nextLine, int lineNumber, List resultList, List errors) { + private void parseLine(String nextLine, int lineNumber, List resultList, List errors, Class csv) { try { StringReader lineReader = new StringReader(nextLine); - CsvToBean csvToBean = getAggregateCsvToBean(new BufferedReader(lineReader)); - List csvAggregateList = csvToBean.parse(); + CsvToBean csvToBean = getAggregateCsvToBean(new BufferedReader(lineReader), csv); + List csvAggregateList = csvToBean.parse(); if (!csvAggregateList.isEmpty()) { - CsvAggregate csvAggregate = csvAggregateList.get(0); + Csv csvAggregate = csvAggregateList.get(0); csvAggregate.setRowNumber(lineNumber); resultList.add(csvAggregateList.get(0)); } @@ -176,9 +287,9 @@ private void parseLine(String nextLine, int lineNumber, List resul } } - private CsvToBean getAggregateCsvToBean(BufferedReader bufferedReader) { - CsvToBeanBuilder csvToBeanBuilder = new CsvToBeanBuilder<>(bufferedReader); - csvToBeanBuilder.withType(CsvAggregate.class); + private CsvToBean getAggregateCsvToBean(BufferedReader bufferedReader, Class csv) { + CsvToBeanBuilder csvToBeanBuilder = new CsvToBeanBuilder<>(bufferedReader); + csvToBeanBuilder.withType(csv); csvToBeanBuilder.withSeparator(';'); csvToBeanBuilder.withQuoteChar(DEFAULT_QUOTE_CHARACTER); csvToBeanBuilder.withOrderedResults(true); diff --git a/apps/onboarding-ms/src/main/resources/application.properties b/apps/onboarding-ms/src/main/resources/application.properties index 330ce5a32..2cb302902 100644 --- a/apps/onboarding-ms/src/main/resources/application.properties +++ b/apps/onboarding-ms/src/main/resources/application.properties @@ -5,7 +5,7 @@ quarkus.http.port=8080 ## JWT quarkus.http.auth.proactive=false -mp.jwt.verify.publickey=${JWT-PUBLIC-KEY} +mp.jwt.verify.publickey=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Imp3dF9hMjo3YTo0NjozYjoyYTo2MDo1Njo0MDo4ODphMDo1ZDphNDpmODowMToxZTozZSJ9.eyJmYW1pbHlfbmFtZSI6IkJlZ2lxaSIsImZpc2NhbF9udW1iZXIiOiJCR1FHTkU4MFMxNEYyMDVDIiwibmFtZSI6IkV1Z2VuIiwic3BpZF9sZXZlbCI6Imh0dHBzOi8vd3d3LnNwaWQuZ292Lml0L1NwaWRMMiIsImZyb21fYWEiOmZhbHNlLCJ1aWQiOiJhOTA2NGE5Ni00ZmM0LTQ0YjctYjJmYS0yMDVjM2M0NWE2ZTYiLCJsZXZlbCI6IkwyIiwiaWF0IjoxNzI1MzU2OTI2LCJleHAiOjE3MjUzODkzMjYsImF1ZCI6ImFwaS5kZXYuc2VsZmNhcmUucGFnb3BhLml0IiwiaXNzIjoiU1BJRCIsImp0aSI6Il8wYWY1ZDlkZmFlYWU3MGRiOGE1YiJ9.AXOyDELnfEJh_H5S8dVJKGPU8kWsspDeK7bxKbobO4I-6gTSZfKkE0SBqasBaXVlX-PwqBsDlrIWr_lMlvW3KGpB5GI7oBZwrDHnPq0hrZblgmCSTvFkQO3MGgMP6TpYuX8Tsn910PEJwSN4T-ZiJQVYYfAjTDEWzmQvOxWU7qMYjasF2rjpZl94BSsvWvu4PuqNDu17oLax0JQgdYePSuHEdAjCTInmPiaGghGOMIRHKC0m2XtvFgqXNxsgfi75OnfmD0F0rimZdh5IuRQvhMqtrKQnTwlskaevP6n_fzJQ4YKh9d9lBDh_NHo85HA11Kjohnmm7MenY7liGfiLlQ mp.jwt.verify.issuer=SPID #smallrye.jwt.verify.key-format=JWK_BASE64URL diff --git a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/controller/AggregatesControllerTest.java b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/controller/AggregatesControllerTest.java index 7c3a2f5db..82b86bbf0 100644 --- a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/controller/AggregatesControllerTest.java +++ b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/controller/AggregatesControllerTest.java @@ -31,7 +31,7 @@ public class AggregatesControllerTest { void verifyAggregatesCsv_succeeds() { File testFile = new File("src/test/resources/aggregates.csv"); - when(aggregatesService.validateAggregatesCsv(any())) + when(aggregatesService.validateAppIoAggregatesCsv(any())) .thenReturn(Uni.createFrom().item(new VerifyAggregateResponse())); given() @@ -43,6 +43,6 @@ void verifyAggregatesCsv_succeeds() { .statusCode(200); verify(aggregatesService, times(1)) - .validateAggregatesCsv(any()); + .validateAppIoAggregatesCsv(any()); } } diff --git a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/AggregatesServiceDefaultTest.java b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/AggregatesServiceDefaultTest.java index a1ea4ab30..00474260e 100644 --- a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/AggregatesServiceDefaultTest.java +++ b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/AggregatesServiceDefaultTest.java @@ -59,7 +59,7 @@ void validateAggregates(){ when(institutionApi.findInstitutionUsingGET("345645", null, null)).thenThrow(ResourceNotFoundException.class); when(uoApi.findByUnicodeUsingGET1("AQ66",null)).thenThrow(ResourceNotFoundException.class); - aggregatesServiceDefault.validateAggregatesCsv(testFile) + aggregatesServiceDefault.validateAppIoAggregatesCsv(testFile) .subscribe().withSubscriber(UniAssertSubscriber.create()) .assertCompleted(); } From 90dd51ed381cddfa9220a09477d1e386eeeb9a0d Mon Sep 17 00:00:00 2001 From: Eugen Begiqi Date: Tue, 3 Sep 2024 17:53:24 +0200 Subject: [PATCH 02/12] SELC-5438: Refactoring --- ...vAggregate.java => CsvAggregateAppIo.java} | 34 +++++++++++---- .../onboarding/model/CsvAggregatePagoPa.java | 16 ++++--- .../onboarding/model/CsvAggregateSend.java | 8 ++-- .../service/AggregatesServiceDefault.java | 42 +++++++++---------- 4 files changed, 61 insertions(+), 39 deletions(-) rename apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/{CsvAggregate.java => CsvAggregateAppIo.java} (66%) diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/CsvAggregate.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/CsvAggregateAppIo.java similarity index 66% rename from apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/CsvAggregate.java rename to apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/CsvAggregateAppIo.java index 7a560d681..2681153ce 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/CsvAggregate.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/CsvAggregateAppIo.java @@ -4,23 +4,40 @@ import lombok.Data; @Data -public class CsvAggregate implements Csv { +public class CsvAggregateAppIo implements Csv { @CsvBindByPosition(position = 0) - private String taxCode; + private String aggregateName; + @CsvBindByPosition(position = 1) - private String description; + private String pec; + @CsvBindByPosition(position = 2) - private String vatNumber; + private String taxCode; + @CsvBindByPosition(position = 3) - private String subunitType; + private String vatNumber; + @CsvBindByPosition(position = 4) - private String subunitCode; - @CsvBindByPosition(position = 5) private String address; + + @CsvBindByPosition(position = 5) + private String city; + @CsvBindByPosition(position = 6) - private String originId; + private String province; + + @CsvBindByPosition(position = 7) + private String ipaCode; + @CsvBindByPosition(position = 8) + private String subunitType; + + @CsvBindByPosition(position = 9) + private String subunitCode; + + @CsvBindByPosition(position = 10) + private String originId; private Integer rowNumber; @Override @@ -28,5 +45,4 @@ public void setRowNumber(int lineNumber) { this.rowNumber = lineNumber; } - } diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/CsvAggregatePagoPa.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/CsvAggregatePagoPa.java index c1e7cedbf..436db2113 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/CsvAggregatePagoPa.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/CsvAggregatePagoPa.java @@ -10,7 +10,7 @@ public class CsvAggregatePagoPa implements Csv { private String aggregateName; @CsvBindByPosition(position = 1) - private String emailPec; + private String pec; @CsvBindByPosition(position = 2) private String taxNumber; @@ -22,18 +22,24 @@ public class CsvAggregatePagoPa implements Csv { private String address; @CsvBindByPosition(position = 5) - private String taxCodePT; + private String city; @CsvBindByPosition(position = 6) - private String vatNumberPT; + private String province; @CsvBindByPosition(position = 7) - private String iban; + private String aggragateNamePT; @CsvBindByPosition(position = 8) - private String service; + private String taxCodePT; @CsvBindByPosition(position = 9) + private String iban; + + @CsvBindByPosition(position = 10) + private String service; + + @CsvBindByPosition(position = 11) private String syncAsyncMode; private Integer rowNumber; diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/CsvAggregateSend.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/CsvAggregateSend.java index 27d710e6a..1eab9cded 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/CsvAggregateSend.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/CsvAggregateSend.java @@ -40,16 +40,16 @@ public class CsvAggregateSend implements Csv { private String subunitCode; @CsvBindByPosition(position = 11) - private String adminAgreggateName; + private String adminAggregateName; @CsvBindByPosition(position = 12) - private String adminAgreggateSurname; + private String adminAggregateSurname; @CsvBindByPosition(position = 13) - private String adminAgreggateTaxCode; + private String adminAggregateTaxCode; @CsvBindByPosition(position = 14) - private String adminAgreggateEmail; + private String adminAggregateEmail; private Integer rowNumber; @Override public void setRowNumber(int lineNumber) { diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/AggregatesServiceDefault.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/AggregatesServiceDefault.java index ca336bac5..6277428f6 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/AggregatesServiceDefault.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/AggregatesServiceDefault.java @@ -64,7 +64,7 @@ public class AggregatesServiceDefault implements AggregatesService{ @Override public Uni validateAppIoAggregatesCsv(File file){ - AggregatesCsvResponse aggregatesCsvResponse = readItemsFromCsv(file, CsvAggregate.class); + AggregatesCsvResponse aggregatesCsvResponse = readItemsFromCsv(file, CsvAggregateAppIo.class); List csvAggregates = aggregatesCsvResponse.getCsvAggregateList(); return Multi.createFrom().iterable(csvAggregates) .onItem().transformToUniAndMerge(csvAggregate -> checkCsvAggregateAppIoAndFillAggregateOrErrorList(csvAggregate, aggregatesCsvResponse)) @@ -104,11 +104,11 @@ public Uni validatePagoPaAggregatesCsv(File file) { } private Uni checkCsvAggregateAppIoAndFillAggregateOrErrorList(Csv csv, AggregatesCsvResponse aggregatesCsvResponse) { - CsvAggregate csvAggregate = (CsvAggregate) csv; - return checkCsvAggregateAppIo(csvAggregate) - .onItem().invoke(() -> aggregatesCsvResponse.getValidAggregates().add(csvAggregate)) - .onFailure(ResourceNotFoundException.class).recoverWithUni(throwable -> mapToErrorRow(csvAggregate, throwable, aggregatesCsvResponse)) - .onFailure(InvalidRequestException.class).recoverWithUni(throwable -> mapToErrorRow(csvAggregate, throwable, aggregatesCsvResponse)); + CsvAggregateAppIo csvAggregateAppIo = (CsvAggregateAppIo) csv; + return checkCsvAggregateAppIo(csvAggregateAppIo) + .onItem().invoke(() -> aggregatesCsvResponse.getValidAggregates().add(csvAggregateAppIo)) + .onFailure(ResourceNotFoundException.class).recoverWithUni(throwable -> mapToErrorRow(csvAggregateAppIo, throwable, aggregatesCsvResponse)) + .onFailure(InvalidRequestException.class).recoverWithUni(throwable -> mapToErrorRow(csvAggregateAppIo, throwable, aggregatesCsvResponse)); } private Uni checkCsvAggregateSendAndFillAggregateOrErrorList(Csv csv, AggregatesCsvResponse aggregatesCsvResponse) { @@ -137,8 +137,8 @@ private Uni checkCsvAggregatePagoPaAndFillAggregateOrErrorList(Csv csv, Ag } private static Uni mapToErrorRow(Csv csv, Throwable throwable, AggregatesCsvResponse aggregatesCsvResponse) { - CsvAggregate csvAggregate = (CsvAggregate) csv; - aggregatesCsvResponse.getRowErrorList().add(new RowError(csvAggregate.getRowNumber(), csvAggregate.getTaxCode(), throwable.getMessage())); + CsvAggregateAppIo csvAggregateAppIo = (CsvAggregateAppIo) csv; + aggregatesCsvResponse.getRowErrorList().add(new RowError(csvAggregateAppIo.getRowNumber(), csvAggregateAppIo.getTaxCode(), throwable.getMessage())); return Uni.createFrom().voidItem(); } @@ -157,18 +157,18 @@ private Uni checkCsvAggregatePagoPa(CsvAggregatePagoPa csvAggregate) { } private Uni checkSubunitTypeAppIo(Csv csv) { - CsvAggregate csvAggregate = (CsvAggregate) csv; + CsvAggregateAppIo csvAggregateAppIo = (CsvAggregateAppIo) csv; - if (StringUtils.isEmpty(csvAggregate.getSubunitType())) { - return institutionApi.findInstitutionUsingGET(csvAggregate.getTaxCode(), null, null) + if (StringUtils.isEmpty(csvAggregateAppIo.getSubunitType())) { + return institutionApi.findInstitutionUsingGET(csvAggregateAppIo.getTaxCode(), null, null) .onFailure(this::checkIfNotFound).recoverWithUni(Uni.createFrom().failure(new ResourceNotFoundException(ERROR_IPA))) .replaceWith(Uni.createFrom().voidItem()); - } else if (InstitutionPaSubunitType.AOO.name().equals(csvAggregate.getSubunitType())) { - return aooApi.findByUnicodeUsingGET(csvAggregate.getSubunitCode(), null) + } else if (InstitutionPaSubunitType.AOO.name().equals(csvAggregateAppIo.getSubunitType())) { + return aooApi.findByUnicodeUsingGET(csvAggregateAppIo.getSubunitCode(), null) .onFailure(this::checkIfNotFound).recoverWithUni(Uni.createFrom().failure(new ResourceNotFoundException(ERROR_IPA))) .replaceWith(Uni.createFrom().voidItem()); - } else if (InstitutionPaSubunitType.UO.name().equals(csvAggregate.getSubunitType())) { - return uoApi.findByUnicodeUsingGET1(csvAggregate.getSubunitCode(), null) + } else if (InstitutionPaSubunitType.UO.name().equals(csvAggregateAppIo.getSubunitType())) { + return uoApi.findByUnicodeUsingGET1(csvAggregateAppIo.getSubunitCode(), null) .onFailure(this::checkIfNotFound).recoverWithUni(Uni.createFrom().failure(new ResourceNotFoundException(ERROR_IPA))) .replaceWith(Uni.createFrom().voidItem()); } else { @@ -200,15 +200,15 @@ private boolean checkIfNotFound(Throwable throwable) { } private Uni checkRequiredFieldsAppIo(Csv csv) { - CsvAggregate csvAggregate = (CsvAggregate) csv; - if (StringUtils.isEmpty(csvAggregate.getTaxCode())) { + CsvAggregateAppIo csvAggregateAppIo = (CsvAggregateAppIo) csv; + if (StringUtils.isEmpty(csvAggregateAppIo.getTaxCode())) { return Uni.createFrom().failure(new InvalidRequestException(ERROR_TAXCODE)); - } else if (StringUtils.isEmpty(csvAggregate.getDescription())) { + } else if (StringUtils.isEmpty(csvAggregateAppIo.getDescription())) { return Uni.createFrom().failure(new InvalidRequestException(ERROR_DESCRIPTION)); - } else if (StringUtils.isEmpty(csvAggregate.getVatNumber())) { + } else if (StringUtils.isEmpty(csvAggregateAppIo.getVatNumber())) { return Uni.createFrom().failure(new InvalidRequestException(ERROR_VATNUMBER)); - } else if ((StringUtils.isEmpty(csvAggregate.getSubunitType()) && StringUtils.isNotEmpty(csvAggregate.getSubunitCode())) - || (StringUtils.isNotEmpty(csvAggregate.getSubunitType()) && StringUtils.isEmpty(csvAggregate.getSubunitCode()))) { + } else if ((StringUtils.isEmpty(csvAggregateAppIo.getSubunitType()) && StringUtils.isNotEmpty(csvAggregateAppIo.getSubunitCode())) + || (StringUtils.isNotEmpty(csvAggregateAppIo.getSubunitType()) && StringUtils.isEmpty(csvAggregateAppIo.getSubunitCode()))) { return Uni.createFrom().failure(new InvalidRequestException(ERROR_AOO_UO)); } return Uni.createFrom().voidItem(); From fcbb70246f209049619299de6ef8ee97b95521d2 Mon Sep 17 00:00:00 2001 From: Eugen Begiqi Date: Wed, 4 Sep 2024 18:31:04 +0200 Subject: [PATCH 03/12] [SELC-5434] : added check for CSV files --- apps/onboarding-ms/src/main/docs/openapi.json | 17 --- apps/onboarding-ms/src/main/docs/openapi.yaml | 11 -- .../controller/AggregatesController.java | 7 +- .../model/AggregatesCsvResponse.java | 16 +-- .../onboarding/model/CsvAggregateAppIo.java | 2 +- .../onboarding/model/CsvAggregatePagoPa.java | 4 +- .../onboarding/model/CsvAggregateSend.java | 2 +- .../service/AggregatesServiceDefault.java | 133 +++++++++++++++--- .../src/main/resources/application.properties | 2 +- 9 files changed, 128 insertions(+), 66 deletions(-) diff --git a/apps/onboarding-ms/src/main/docs/openapi.json b/apps/onboarding-ms/src/main/docs/openapi.json index 69c49476e..b3ee8fdd9 100644 --- a/apps/onboarding-ms/src/main/docs/openapi.json +++ b/apps/onboarding-ms/src/main/docs/openapi.json @@ -25,23 +25,6 @@ "name" : "support" } ], "paths" : { - "/v1/aggregates/prova" : { - "get" : { - "tags" : [ "Aggregates Controller" ], - "responses" : { - "200" : { - "description" : "OK", - "content" : { - "text/plain" : { - "schema" : { - "type" : "string" - } - } - } - } - } - } - }, "/v1/aggregates/verification/appio" : { "post" : { "tags" : [ "Aggregates Controller" ], diff --git a/apps/onboarding-ms/src/main/docs/openapi.yaml b/apps/onboarding-ms/src/main/docs/openapi.yaml index 60251de43..6579b6008 100644 --- a/apps/onboarding-ms/src/main/docs/openapi.yaml +++ b/apps/onboarding-ms/src/main/docs/openapi.yaml @@ -16,17 +16,6 @@ tags: - name: internal-v1 - name: support paths: - /v1/aggregates/prova: - get: - tags: - - Aggregates Controller - responses: - "200": - description: OK - content: - text/plain: - schema: - type: string /v1/aggregates/verification/appio: post: tags: diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/AggregatesController.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/AggregatesController.java index 532185e00..64a40d059 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/AggregatesController.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/AggregatesController.java @@ -15,7 +15,7 @@ import java.io.File; -//@Authenticated +@Authenticated @Path("/v1/aggregates") @Tag(name = "Aggregates Controller") @AllArgsConstructor @@ -33,11 +33,6 @@ public Uni verifyAppIoAggregatesCsv(@NotNull @RestForm( return aggregatesService.validateAppIoAggregatesCsv(file); } - @Path("prova") - @GET - public String vv () { - return "ciao"; - } @Operation(summary = "Validate the data related to the aggregated entities present in a CSV file") @POST diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/AggregatesCsvResponse.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/AggregatesCsvResponse.java index c10b07cd8..2d5e6f574 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/AggregatesCsvResponse.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/AggregatesCsvResponse.java @@ -3,29 +3,29 @@ import java.util.ArrayList; import java.util.List; -public class AggregatesCsvResponse { - private List csvAggregateList; - private List validAggregates = new ArrayList<>(); +public class AggregatesCsvResponse { + private List csvAggregateList; + private List validAggregates = new ArrayList<>(); private List rowErrorList; - public AggregatesCsvResponse(List csvAggregateList, List rowErrorList) { + public AggregatesCsvResponse(List csvAggregateList, List rowErrorList) { this.csvAggregateList = csvAggregateList; this.rowErrorList = rowErrorList; } - public List getCsvAggregateList() { + public List getCsvAggregateList() { return csvAggregateList; } - public void setCsvAggregateList(List Csv) { + public void setCsvAggregateList(List Csv) { this.csvAggregateList = csvAggregateList; } - public List getValidAggregates() { + public List getValidAggregates() { return validAggregates; } - public void setValidAggregates(List Csv) { + public void setValidAggregates(List Csv) { this.validAggregates = validAggregates; } diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/CsvAggregateAppIo.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/CsvAggregateAppIo.java index 2681153ce..77f27e035 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/CsvAggregateAppIo.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/CsvAggregateAppIo.java @@ -7,7 +7,7 @@ public class CsvAggregateAppIo implements Csv { @CsvBindByPosition(position = 0) - private String aggregateName; + private String description; @CsvBindByPosition(position = 1) private String pec; diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/CsvAggregatePagoPa.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/CsvAggregatePagoPa.java index 436db2113..25c0e7ceb 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/CsvAggregatePagoPa.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/CsvAggregatePagoPa.java @@ -7,13 +7,13 @@ public class CsvAggregatePagoPa implements Csv { @CsvBindByPosition(position = 0) - private String aggregateName; + private String description; @CsvBindByPosition(position = 1) private String pec; @CsvBindByPosition(position = 2) - private String taxNumber; + private String taxCode; @CsvBindByPosition(position = 3) private String vatNumber; diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/CsvAggregateSend.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/CsvAggregateSend.java index 1eab9cded..fb859a316 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/CsvAggregateSend.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/CsvAggregateSend.java @@ -7,7 +7,7 @@ public class CsvAggregateSend implements Csv { @CsvBindByPosition(position = 0) - private String aggregateName; + private String description; @CsvBindByPosition(position = 1) private String pec; diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/AggregatesServiceDefault.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/AggregatesServiceDefault.java index 6277428f6..2878d396c 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/AggregatesServiceDefault.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/AggregatesServiceDefault.java @@ -37,6 +37,7 @@ public class AggregatesServiceDefault implements AggregatesService{ private static final Logger LOG = Logger.getLogger(AggregatesServiceDefault.class); + @Inject OnboardingMapper onboardingMapper; @@ -62,6 +63,22 @@ public class AggregatesServiceDefault implements AggregatesService{ public static final String ERROR_AOO_UO = "In caso di AOO/UO è necessario specificare la tipologia e il codice univoco IPA AOO/UO"; public static final String ERROR_VATNUMBER = "La partita IVA è obbligatoria"; + public static final String ERROR_ADDRESS = "Indirizzo è obbligatorio"; + public static final String ERROR_CITY = "La città è obbligatoria"; + public static final String ERROR_PROVINCE = "La provincia è obbligatoria"; + public static final String ERROR_PEC = "Indirizzo PEC è obbligatorio"; + public static final String ERROR_ADMIN_NAME = "Nome Amministratore Ente Aggregato è obbligatorio"; + public static final String ERROR_ADMIN_SURNAME = "Cognome Amministratore Ente Aggregato è obbligatorio"; + public static final String ERROR_ADMIN_EMAIL = "Email Amministratore Ente Aggregato è obbligatorio"; + public static final String ERROR_ADMIN_TAXCODE = "Codice Fiscale Amministratore Ente Aggregato è obbligatorio"; + public static final String ERROR_AGGREGATE_NAME_PT = "Ragine Sociale Partner Tecnologico è obbligatorio"; + public static final String ERROR_TAXCODE_PT = "Codice Fiscale Partner Tecnologico è obbligatorio"; + public static final String ERROR_IBAN = "IBAN è obbligatorio"; + public static final String ERROR_SERVICE = "Servizio è obbligatorio"; + public static final String ERROR_SYNC_ASYNC_MODE = "Modalità Sincrona/Asincrona è obbligatorio"; + private static final String ERROR_IPA_CODE = "Codice IPA è obbligatorio in caso di ente centrale"; + + @Override public Uni validateAppIoAggregatesCsv(File file){ AggregatesCsvResponse aggregatesCsvResponse = readItemsFromCsv(file, CsvAggregateAppIo.class); @@ -92,7 +109,7 @@ public Uni validateSendAggregatesCsv(File file) { public Uni validatePagoPaAggregatesCsv(File file) { AggregatesCsvResponse aggregatesCsvResponse = readItemsFromCsv(file, CsvAggregatePagoPa.class); List csvAggregates = aggregatesCsvResponse.getCsvAggregateList(); - Uni varr = Multi.createFrom().iterable(csvAggregates) + return Multi.createFrom().iterable(csvAggregates) .onItem().transformToUniAndMerge(csvAggregate -> checkCsvAggregatePagoPaAndFillAggregateOrErrorList(csvAggregate, aggregatesCsvResponse)) .collect().asList() .onItem().transform(list -> onboardingMapper.toVerifyAggregateResponse(aggregatesCsvResponse)) @@ -100,7 +117,6 @@ public Uni validatePagoPaAggregatesCsv(File file) { aggregatesCsvResponse.getValidAggregates().size(), aggregatesCsvResponse.getRowErrorList().size())); - return varr; } private Uni checkCsvAggregateAppIoAndFillAggregateOrErrorList(Csv csv, AggregatesCsvResponse aggregatesCsvResponse) { @@ -201,43 +217,122 @@ private boolean checkIfNotFound(Throwable throwable) { private Uni checkRequiredFieldsAppIo(Csv csv) { CsvAggregateAppIo csvAggregateAppIo = (CsvAggregateAppIo) csv; - if (StringUtils.isEmpty(csvAggregateAppIo.getTaxCode())) { - return Uni.createFrom().failure(new InvalidRequestException(ERROR_TAXCODE)); - } else if (StringUtils.isEmpty(csvAggregateAppIo.getDescription())) { + + if (StringUtils.isEmpty(csvAggregateAppIo.getDescription())){ return Uni.createFrom().failure(new InvalidRequestException(ERROR_DESCRIPTION)); - } else if (StringUtils.isEmpty(csvAggregateAppIo.getVatNumber())) { + } + else if (StringUtils.isEmpty(csvAggregateAppIo.getPec())) { + return Uni.createFrom().failure(new InvalidRequestException(ERROR_PEC)); + } + else if (StringUtils.isEmpty(csvAggregateAppIo.getTaxCode())) { + return Uni.createFrom().failure(new InvalidRequestException(ERROR_TAXCODE)); + } + else if (StringUtils.isEmpty(csvAggregateAppIo.getVatNumber())) { return Uni.createFrom().failure(new InvalidRequestException(ERROR_VATNUMBER)); - } else if ((StringUtils.isEmpty(csvAggregateAppIo.getSubunitType()) && StringUtils.isNotEmpty(csvAggregateAppIo.getSubunitCode())) + } + else if (StringUtils.isEmpty(csvAggregateAppIo.getAddress())) { + return Uni.createFrom().failure(new InvalidRequestException(ERROR_ADDRESS)); + } + else if (StringUtils.isEmpty(csvAggregateAppIo.getCity())) { + return Uni.createFrom().failure(new InvalidRequestException(ERROR_CITY)); + } + else if (StringUtils.isEmpty(csvAggregateAppIo.getProvince())) { + return Uni.createFrom().failure(new InvalidRequestException(ERROR_PROVINCE)); + } + else if ((StringUtils.isEmpty(csvAggregateAppIo.getSubunitType()) && StringUtils.isNotEmpty(csvAggregateAppIo.getSubunitCode())) || (StringUtils.isNotEmpty(csvAggregateAppIo.getSubunitType()) && StringUtils.isEmpty(csvAggregateAppIo.getSubunitCode()))) { return Uni.createFrom().failure(new InvalidRequestException(ERROR_AOO_UO)); } + else if ((StringUtils.isEmpty(csvAggregateAppIo.getSubunitType()) && StringUtils.isEmpty(csvAggregateAppIo.getSubunitCode())) + && (StringUtils.isEmpty(csvAggregateAppIo.getIpaCode()))) { + return Uni.createFrom().failure(new InvalidRequestException(ERROR_IPA_CODE)); + } return Uni.createFrom().voidItem(); } private Uni checkRequiredFieldsSend(CsvAggregateSend csvAggregate) { - if (StringUtils.isEmpty("TODO")) { - return Uni.createFrom().failure(new InvalidRequestException(ERROR_TAXCODE)); - } else if (StringUtils.isEmpty("TODO")) { + + if (StringUtils.isEmpty(csvAggregate.getDescription())) { return Uni.createFrom().failure(new InvalidRequestException(ERROR_DESCRIPTION)); - } else if (StringUtils.isEmpty(csvAggregate.getVatNumber())) { + } + else if (StringUtils.isEmpty(csvAggregate.getPec())) { + return Uni.createFrom().failure(new InvalidRequestException(ERROR_PEC)); + } + if (StringUtils.isEmpty(csvAggregate.getTaxCode())) { + return Uni.createFrom().failure(new InvalidRequestException(ERROR_TAXCODE)); + } + else if (StringUtils.isEmpty(csvAggregate.getVatNumber())) { return Uni.createFrom().failure(new InvalidRequestException(ERROR_VATNUMBER)); - } else if ((StringUtils.isEmpty(csvAggregate.getSubunitType()) && StringUtils.isNotEmpty(csvAggregate.getSubunitCode())) + } + else if (StringUtils.isEmpty(csvAggregate.getAddress())) { + return Uni.createFrom().failure(new InvalidRequestException(ERROR_ADDRESS)); + } + else if (StringUtils.isEmpty(csvAggregate.getCity())) { + return Uni.createFrom().failure(new InvalidRequestException(ERROR_CITY)); + } + else if (StringUtils.isEmpty(csvAggregate.getProvince())) { + return Uni.createFrom().failure(new InvalidRequestException(ERROR_PROVINCE)); + } + else if ((StringUtils.isEmpty(csvAggregate.getSubunitType()) && StringUtils.isNotEmpty(csvAggregate.getSubunitCode())) || (StringUtils.isNotEmpty(csvAggregate.getSubunitType()) && StringUtils.isEmpty(csvAggregate.getSubunitCode()))) { return Uni.createFrom().failure(new InvalidRequestException(ERROR_AOO_UO)); } + else if (StringUtils.isEmpty(csvAggregate.getAdminAggregateName())) { + return Uni.createFrom().failure(new InvalidRequestException(ERROR_ADMIN_NAME)); + } + else if (StringUtils.isEmpty(csvAggregate.getAdminAggregateSurname())) { + return Uni.createFrom().failure(new InvalidRequestException(ERROR_ADMIN_SURNAME)); + } + else if (StringUtils.isEmpty(csvAggregate.getAdminAggregateTaxCode())) { + return Uni.createFrom().failure(new InvalidRequestException(ERROR_ADMIN_TAXCODE)); + } + else if (StringUtils.isEmpty(csvAggregate.getAdminAggregateEmail())) { + return Uni.createFrom().failure(new InvalidRequestException(ERROR_ADMIN_EMAIL)); + } + else if ((StringUtils.isEmpty(csvAggregate.getSubunitType()) && StringUtils.isEmpty(csvAggregate.getSubunitCode())) + && (StringUtils.isEmpty(csvAggregate.getIpaCode()))) { + return Uni.createFrom().failure(new InvalidRequestException(ERROR_IPA_CODE)); + } return Uni.createFrom().voidItem(); } private Uni checkRequiredFieldsPagoPa(CsvAggregatePagoPa csvAggregate) { - if (StringUtils.isEmpty("TODO")) { - return Uni.createFrom().failure(new InvalidRequestException(ERROR_TAXCODE)); - } else if (StringUtils.isEmpty("TODO")) { + + if (StringUtils.isEmpty(csvAggregate.getDescription())) { return Uni.createFrom().failure(new InvalidRequestException(ERROR_DESCRIPTION)); - } else if (StringUtils.isEmpty(csvAggregate.getVatNumber())) { + } + else if (StringUtils.isEmpty(csvAggregate.getPec())) { + return Uni.createFrom().failure(new InvalidRequestException(ERROR_PEC)); + } + if (StringUtils.isEmpty(csvAggregate.getTaxCode())) { + return Uni.createFrom().failure(new InvalidRequestException(ERROR_TAXCODE)); + } + else if (StringUtils.isEmpty(csvAggregate.getVatNumber())) { return Uni.createFrom().failure(new InvalidRequestException(ERROR_VATNUMBER)); - } else if ((StringUtils.isEmpty("TODO") && StringUtils.isNotEmpty("TODO")) - || (StringUtils.isNotEmpty("TODO") && StringUtils.isEmpty("TODO"))) { - return Uni.createFrom().failure(new InvalidRequestException(ERROR_AOO_UO)); + } + else if (StringUtils.isEmpty(csvAggregate.getAddress())) { + return Uni.createFrom().failure(new InvalidRequestException(ERROR_ADDRESS)); + } + else if (StringUtils.isEmpty(csvAggregate.getCity())) { + return Uni.createFrom().failure(new InvalidRequestException(ERROR_CITY)); + } + else if (StringUtils.isEmpty(csvAggregate.getProvince())) { + return Uni.createFrom().failure(new InvalidRequestException(ERROR_PROVINCE)); + } + else if (StringUtils.isEmpty(csvAggregate.getAggragateNamePT())) { + return Uni.createFrom().failure(new InvalidRequestException(ERROR_AGGREGATE_NAME_PT)); + } + else if (StringUtils.isEmpty(csvAggregate.getTaxCodePT())) { + return Uni.createFrom().failure(new InvalidRequestException(ERROR_TAXCODE_PT)); + } + else if (StringUtils.isEmpty(csvAggregate.getIban())) { + return Uni.createFrom().failure(new InvalidRequestException(ERROR_IBAN)); + } + else if (StringUtils.isEmpty(csvAggregate.getService())) { + return Uni.createFrom().failure(new InvalidRequestException(ERROR_SERVICE)); + } + else if (StringUtils.isEmpty(csvAggregate.getSyncAsyncMode())) { + return Uni.createFrom().failure(new InvalidRequestException(ERROR_SYNC_ASYNC_MODE)); } return Uni.createFrom().voidItem(); } diff --git a/apps/onboarding-ms/src/main/resources/application.properties b/apps/onboarding-ms/src/main/resources/application.properties index 2cb302902..330ce5a32 100644 --- a/apps/onboarding-ms/src/main/resources/application.properties +++ b/apps/onboarding-ms/src/main/resources/application.properties @@ -5,7 +5,7 @@ quarkus.http.port=8080 ## JWT quarkus.http.auth.proactive=false -mp.jwt.verify.publickey=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Imp3dF9hMjo3YTo0NjozYjoyYTo2MDo1Njo0MDo4ODphMDo1ZDphNDpmODowMToxZTozZSJ9.eyJmYW1pbHlfbmFtZSI6IkJlZ2lxaSIsImZpc2NhbF9udW1iZXIiOiJCR1FHTkU4MFMxNEYyMDVDIiwibmFtZSI6IkV1Z2VuIiwic3BpZF9sZXZlbCI6Imh0dHBzOi8vd3d3LnNwaWQuZ292Lml0L1NwaWRMMiIsImZyb21fYWEiOmZhbHNlLCJ1aWQiOiJhOTA2NGE5Ni00ZmM0LTQ0YjctYjJmYS0yMDVjM2M0NWE2ZTYiLCJsZXZlbCI6IkwyIiwiaWF0IjoxNzI1MzU2OTI2LCJleHAiOjE3MjUzODkzMjYsImF1ZCI6ImFwaS5kZXYuc2VsZmNhcmUucGFnb3BhLml0IiwiaXNzIjoiU1BJRCIsImp0aSI6Il8wYWY1ZDlkZmFlYWU3MGRiOGE1YiJ9.AXOyDELnfEJh_H5S8dVJKGPU8kWsspDeK7bxKbobO4I-6gTSZfKkE0SBqasBaXVlX-PwqBsDlrIWr_lMlvW3KGpB5GI7oBZwrDHnPq0hrZblgmCSTvFkQO3MGgMP6TpYuX8Tsn910PEJwSN4T-ZiJQVYYfAjTDEWzmQvOxWU7qMYjasF2rjpZl94BSsvWvu4PuqNDu17oLax0JQgdYePSuHEdAjCTInmPiaGghGOMIRHKC0m2XtvFgqXNxsgfi75OnfmD0F0rimZdh5IuRQvhMqtrKQnTwlskaevP6n_fzJQ4YKh9d9lBDh_NHo85HA11Kjohnmm7MenY7liGfiLlQ +mp.jwt.verify.publickey=${JWT-PUBLIC-KEY} mp.jwt.verify.issuer=SPID #smallrye.jwt.verify.key-format=JWK_BASE64URL From dee26c1a44860ba66b05f47428e471bd76e06465 Mon Sep 17 00:00:00 2001 From: Eugen Begiqi Date: Thu, 5 Sep 2024 11:26:35 +0200 Subject: [PATCH 04/12] [SELC-5434] : changed API paths --- .../onboarding/controller/AggregatesController.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/AggregatesController.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/AggregatesController.java index 64a40d059..b020a2101 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/AggregatesController.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/AggregatesController.java @@ -26,7 +26,7 @@ public class AggregatesController { @Operation(summary = "Validate the data related to the aggregated entities present in a CSV file") @POST - @Path("/verification/appio") + @Path("/verification/prod-io") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.MULTIPART_FORM_DATA) public Uni verifyAppIoAggregatesCsv(@NotNull @RestForm("aggregates") File file){ @@ -36,7 +36,7 @@ public Uni verifyAppIoAggregatesCsv(@NotNull @RestForm( @Operation(summary = "Validate the data related to the aggregated entities present in a CSV file") @POST - @Path("/verification/send") + @Path("/verification/prod-pn") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.MULTIPART_FORM_DATA) public Uni verifySendAggregatesCsv(@NotNull @RestForm("aggregates") File file){ @@ -46,7 +46,7 @@ public Uni verifySendAggregatesCsv(@NotNull @RestForm(" @Operation(summary = "Validate the data related to the aggregated entities present in a CSV file") @POST - @Path("/verification/pagopa") + @Path("/verification/prod-pagopa") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.MULTIPART_FORM_DATA) public Uni verifyPagoPaAggregatesCsv(@NotNull @RestForm("aggregates") File file){ From 8ccf8212f3288ff51cd1818e24c885362fe7645c Mon Sep 17 00:00:00 2001 From: Eugen Begiqi Date: Fri, 6 Sep 2024 16:32:46 +0200 Subject: [PATCH 05/12] [SELC-5434] : changed send response --- apps/onboarding-ms/src/main/docs/openapi.json | 119 ++++++++++++++++-- apps/onboarding-ms/src/main/docs/openapi.yaml | 77 +++++++++++- .../controller/AggregatesController.java | 3 +- .../onboarding/mapper/OnboardingMapper.java | 40 +++++- .../model/VerifyAggregateSendResponse.java | 42 +++++++ .../onboarding/service/AggregatesService.java | 3 +- .../service/AggregatesServiceDefault.java | 4 +- .../src/main/resources/application.properties | 1 + 8 files changed, 270 insertions(+), 19 deletions(-) create mode 100644 apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/VerifyAggregateSendResponse.java diff --git a/apps/onboarding-ms/src/main/docs/openapi.json b/apps/onboarding-ms/src/main/docs/openapi.json index b3ee8fdd9..afe5cb2e8 100644 --- a/apps/onboarding-ms/src/main/docs/openapi.json +++ b/apps/onboarding-ms/src/main/docs/openapi.json @@ -25,7 +25,7 @@ "name" : "support" } ], "paths" : { - "/v1/aggregates/verification/appio" : { + "/v1/aggregates/verification/prod-io" : { "post" : { "tags" : [ "Aggregates Controller" ], "summary" : "Validate the data related to the aggregated entities present in a CSV file", @@ -55,11 +55,20 @@ } } } + }, + "401" : { + "description" : "Not Authorized" + }, + "403" : { + "description" : "Not Allowed" } - } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] } }, - "/v1/aggregates/verification/pagopa" : { + "/v1/aggregates/verification/prod-pagopa" : { "post" : { "tags" : [ "Aggregates Controller" ], "summary" : "Validate the data related to the aggregated entities present in a CSV file", @@ -89,11 +98,20 @@ } } } + }, + "401" : { + "description" : "Not Authorized" + }, + "403" : { + "description" : "Not Allowed" } - } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] } }, - "/v1/aggregates/verification/send" : { + "/v1/aggregates/verification/prod-pn" : { "post" : { "tags" : [ "Aggregates Controller" ], "summary" : "Validate the data related to the aggregated entities present in a CSV file", @@ -119,12 +137,21 @@ "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/VerifyAggregateResponse" + "$ref" : "#/components/schemas/VerifyAggregateSendResponse" } } } + }, + "401" : { + "description" : "Not Authorized" + }, + "403" : { + "description" : "Not Allowed" } - } + }, + "security" : [ { + "SecurityScheme" : [ ] + } ] } }, "/v1/notification/resend" : { @@ -1350,6 +1377,67 @@ } } }, + "AggregateSend" : { + "type" : "object", + "properties" : { + "description" : { + "type" : "string" + }, + "pec" : { + "type" : "string" + }, + "taxCode" : { + "type" : "string" + }, + "vatNumber" : { + "type" : "string" + }, + "codeSDI" : { + "type" : "string" + }, + "address" : { + "type" : "string" + }, + "city" : { + "type" : "string" + }, + "province" : { + "type" : "string" + }, + "subunitType" : { + "type" : "string" + }, + "subunitCode" : { + "type" : "string" + }, + "users" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/AggregateUser" + } + } + } + }, + "AggregateUser" : { + "type" : "object", + "properties" : { + "name" : { + "type" : "string" + }, + "surname" : { + "type" : "string" + }, + "taxCode" : { + "type" : "string" + }, + "email" : { + "type" : "string" + }, + "role" : { + "type" : "string" + } + } + }, "BillingPaRequest" : { "type" : "object", "properties" : { @@ -2402,6 +2490,23 @@ } } } + }, + "VerifyAggregateSendResponse" : { + "type" : "object", + "properties" : { + "aggregates" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/AggregateSend" + } + }, + "errors" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/RowError" + } + } + } } }, "securitySchemes" : { diff --git a/apps/onboarding-ms/src/main/docs/openapi.yaml b/apps/onboarding-ms/src/main/docs/openapi.yaml index 6579b6008..5c807b060 100644 --- a/apps/onboarding-ms/src/main/docs/openapi.yaml +++ b/apps/onboarding-ms/src/main/docs/openapi.yaml @@ -16,7 +16,7 @@ tags: - name: internal-v1 - name: support paths: - /v1/aggregates/verification/appio: + /v1/aggregates/verification/prod-io: post: tags: - Aggregates Controller @@ -40,7 +40,13 @@ paths: application/json: schema: $ref: "#/components/schemas/VerifyAggregateResponse" - /v1/aggregates/verification/pagopa: + "401": + description: Not Authorized + "403": + description: Not Allowed + security: + - SecurityScheme: [] + /v1/aggregates/verification/prod-pagopa: post: tags: - Aggregates Controller @@ -64,7 +70,13 @@ paths: application/json: schema: $ref: "#/components/schemas/VerifyAggregateResponse" - /v1/aggregates/verification/send: + "401": + description: Not Authorized + "403": + description: Not Allowed + security: + - SecurityScheme: [] + /v1/aggregates/verification/prod-pn: post: tags: - Aggregates Controller @@ -87,7 +99,13 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/VerifyAggregateResponse" + $ref: "#/components/schemas/VerifyAggregateSendResponse" + "401": + description: Not Authorized + "403": + description: Not Allowed + security: + - SecurityScheme: [] /v1/notification/resend: post: tags: @@ -956,6 +974,46 @@ components: type: string origin: $ref: "#/components/schemas/Origin" + AggregateSend: + type: object + properties: + description: + type: string + pec: + type: string + taxCode: + type: string + vatNumber: + type: string + codeSDI: + type: string + address: + type: string + city: + type: string + province: + type: string + subunitType: + type: string + subunitCode: + type: string + users: + type: array + items: + $ref: "#/components/schemas/AggregateUser" + AggregateUser: + type: object + properties: + name: + type: string + surname: + type: string + taxCode: + type: string + email: + type: string + role: + type: string BillingPaRequest: type: object properties: @@ -1731,6 +1789,17 @@ components: type: array items: $ref: "#/components/schemas/RowError" + VerifyAggregateSendResponse: + type: object + properties: + aggregates: + type: array + items: + $ref: "#/components/schemas/AggregateSend" + errors: + type: array + items: + $ref: "#/components/schemas/RowError" securitySchemes: SecurityScheme: type: http diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/AggregatesController.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/AggregatesController.java index b020a2101..7b0926d6c 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/AggregatesController.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/controller/AggregatesController.java @@ -3,6 +3,7 @@ import io.quarkus.security.Authenticated; import io.smallrye.mutiny.Uni; import it.pagopa.selfcare.onboarding.model.VerifyAggregateResponse; +import it.pagopa.selfcare.onboarding.model.VerifyAggregateSendResponse; import it.pagopa.selfcare.onboarding.service.AggregatesService; import jakarta.inject.Inject; import jakarta.validation.constraints.NotNull; @@ -39,7 +40,7 @@ public Uni verifyAppIoAggregatesCsv(@NotNull @RestForm( @Path("/verification/prod-pn") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.MULTIPART_FORM_DATA) - public Uni verifySendAggregatesCsv(@NotNull @RestForm("aggregates") File file){ + public Uni verifySendAggregatesCsv(@NotNull @RestForm("aggregates") File file){ return aggregatesService.validateSendAggregatesCsv(file); } diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/mapper/OnboardingMapper.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/mapper/OnboardingMapper.java index d1026d56b..e89230010 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/mapper/OnboardingMapper.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/mapper/OnboardingMapper.java @@ -5,20 +5,22 @@ import it.pagopa.selfcare.onboarding.controller.request.*; import it.pagopa.selfcare.onboarding.controller.response.OnboardingGet; import it.pagopa.selfcare.onboarding.controller.response.OnboardingResponse; +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.model.AggregatesCsvResponse; +import it.pagopa.selfcare.onboarding.model.CsvAggregateSend; import it.pagopa.selfcare.onboarding.model.VerifyAggregateResponse; -import org.mapstruct.Context; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.Named; +import it.pagopa.selfcare.onboarding.model.VerifyAggregateSendResponse; +import org.mapstruct.*; import org.openapi.quarkus.onboarding_functions_json.model.PartyRole; import java.time.OffsetDateTime; +import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.UUID; +import java.util.stream.Collectors; @Mapper(componentModel = "cdi", imports = { UUID.class, WorkflowType.class, OnboardingStatus.class }) public interface OnboardingMapper { @@ -119,4 +121,34 @@ default OffsetDateTime toOffsetDateTime(java.time.LocalDateTime localDateTime) { @Mapping(target = "errors", source = "rowErrorList") @Mapping(target = "aggregates", source = "validAggregates") VerifyAggregateResponse toVerifyAggregateResponse(AggregatesCsvResponse aggregatesCsvResponse); + + @Mapping(target = "errors", source = "rowErrorList") + @Mapping(target = "aggregates", source = "validAggregates") + VerifyAggregateSendResponse toVerifyAggregateSendResponse(AggregatesCsvResponse aggregatesCsvResponse); + + @Mapping(target = "users", source = ".") + VerifyAggregateSendResponse.AggregateSend csvToAggregateSend(CsvAggregateSend csvAggregateSend); + + default List mapCsvAggregatesToAggregates(List csvAggregateSendList) { + if (csvAggregateSendList == null) { + return null; + } + return csvAggregateSendList.stream() + .map(this::csvToAggregateSend) + .collect(Collectors.toList()); + } + + default List mapUsers(CsvAggregateSend csvAggregateSend) { + if (csvAggregateSend == null) { + return Collections.emptyList(); + } + VerifyAggregateSendResponse.AggregateUser user = new VerifyAggregateSendResponse.AggregateUser(); + user.setName(csvAggregateSend.getAdminAggregateName()); + user.setSurname(csvAggregateSend.getAdminAggregateSurname()); + user.setTaxCode(csvAggregateSend.getAdminAggregateTaxCode()); + user.setEmail(csvAggregateSend.getAdminAggregateEmail()); + user.setRole("Delegate"); + + return Collections.singletonList(user); + } } diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/VerifyAggregateSendResponse.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/VerifyAggregateSendResponse.java new file mode 100644 index 000000000..1281bdff3 --- /dev/null +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/VerifyAggregateSendResponse.java @@ -0,0 +1,42 @@ +package it.pagopa.selfcare.onboarding.model; + +import it.pagopa.selfcare.onboarding.entity.Institution; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class VerifyAggregateSendResponse { + + private List aggregates; + private List errors; + + @Data + public static class AggregateSend { + private String description; + private String pec; + private String taxCode; + private String vatNumber; + private String codeSDI; + private String address; + private String city; + private String province; + private String subunitType; + private String subunitCode; + private List users; + } + + @Data + public static class AggregateUser { + private String name; + private String surname; + private String taxCode; + private String email; + private String role; + } + +} diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/AggregatesService.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/AggregatesService.java index e246fabde..a9ee5269f 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/AggregatesService.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/AggregatesService.java @@ -3,6 +3,7 @@ import io.smallrye.mutiny.Uni; import it.pagopa.selfcare.onboarding.common.InstitutionType; import it.pagopa.selfcare.onboarding.model.VerifyAggregateResponse; +import it.pagopa.selfcare.onboarding.model.VerifyAggregateSendResponse; import java.io.File; @@ -10,7 +11,7 @@ public interface AggregatesService { Uni validateAppIoAggregatesCsv (File file); - Uni validateSendAggregatesCsv (File file); + Uni validateSendAggregatesCsv (File file); Uni validatePagoPaAggregatesCsv (File file); } diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/AggregatesServiceDefault.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/AggregatesServiceDefault.java index 2878d396c..aba52a3c4 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/AggregatesServiceDefault.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/AggregatesServiceDefault.java @@ -93,13 +93,13 @@ public Uni validateAppIoAggregatesCsv(File file){ } @Override - public Uni validateSendAggregatesCsv(File file) { + public Uni validateSendAggregatesCsv(File file) { AggregatesCsvResponse aggregatesCsvResponse = readItemsFromCsv(file, CsvAggregateSend.class); List csvAggregates = aggregatesCsvResponse.getCsvAggregateList(); return Multi.createFrom().iterable(csvAggregates) .onItem().transformToUniAndMerge(csvAggregate -> checkCsvAggregateSendAndFillAggregateOrErrorList(csvAggregate, aggregatesCsvResponse)) .collect().asList() - .onItem().transform(list -> onboardingMapper.toVerifyAggregateResponse(aggregatesCsvResponse)) + .onItem().transform(list -> onboardingMapper.toVerifyAggregateSendResponse(aggregatesCsvResponse)) .onItem().invoke(() -> LOG.infof("CSV file validated end: %s valid row and %s invalid row", aggregatesCsvResponse.getValidAggregates().size(), aggregatesCsvResponse.getRowErrorList().size())); diff --git a/apps/onboarding-ms/src/main/resources/application.properties b/apps/onboarding-ms/src/main/resources/application.properties index 330ce5a32..2afa5224c 100644 --- a/apps/onboarding-ms/src/main/resources/application.properties +++ b/apps/onboarding-ms/src/main/resources/application.properties @@ -6,6 +6,7 @@ quarkus.http.port=8080 ## JWT quarkus.http.auth.proactive=false mp.jwt.verify.publickey=${JWT-PUBLIC-KEY} + mp.jwt.verify.issuer=SPID #smallrye.jwt.verify.key-format=JWK_BASE64URL From ada82c4e6e9cbf18e33d17c76e65ff1ea7ecaa08 Mon Sep 17 00:00:00 2001 From: Eugen Begiqi Date: Mon, 9 Sep 2024 10:54:57 +0200 Subject: [PATCH 06/12] [SELC-5434] : fix test --- .../onboarding/controller/AggregatesControllerTest.java | 4 ++-- apps/onboarding-ms/src/test/resources/aggregates-appio.csv | 4 ++++ apps/onboarding-ms/src/test/resources/aggregates-pagopa.csv | 2 ++ apps/onboarding-ms/src/test/resources/aggregates-send.csv | 4 ++++ 4 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 apps/onboarding-ms/src/test/resources/aggregates-appio.csv create mode 100644 apps/onboarding-ms/src/test/resources/aggregates-pagopa.csv create mode 100644 apps/onboarding-ms/src/test/resources/aggregates-send.csv diff --git a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/controller/AggregatesControllerTest.java b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/controller/AggregatesControllerTest.java index 82b86bbf0..4b495571b 100644 --- a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/controller/AggregatesControllerTest.java +++ b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/controller/AggregatesControllerTest.java @@ -29,7 +29,7 @@ public class AggregatesControllerTest { @Test @TestSecurity(user = "userJwt") void verifyAggregatesCsv_succeeds() { - File testFile = new File("src/test/resources/aggregates.csv"); + File testFile = new File("src/test/resources/aggregates-appio.csv"); when(aggregatesService.validateAppIoAggregatesCsv(any())) .thenReturn(Uni.createFrom().item(new VerifyAggregateResponse())); @@ -38,7 +38,7 @@ void verifyAggregatesCsv_succeeds() { .when() .contentType(ContentType.MULTIPART) .multiPart("aggregates", testFile) - .post("/verification") + .post("/verification/prod-io") .then() .statusCode(200); diff --git a/apps/onboarding-ms/src/test/resources/aggregates-appio.csv b/apps/onboarding-ms/src/test/resources/aggregates-appio.csv new file mode 100644 index 000000000..29d2f039f --- /dev/null +++ b/apps/onboarding-ms/src/test/resources/aggregates-appio.csv @@ -0,0 +1,4 @@ +Ragione Sociale*;PEC*;Codice Fiscale*;P.IVA*;Sede legale - Indirizzo*;Sede legale - Città*;Sede legale - Provincia (sigla)*;Codice IPA***;AOO/UO**;Codice Univoco** +Ufficio del Sindaco;uff.sindaco@pec.comune.fi.it;1307110484;1307110484;Palazzo Vecchio Piazza Della Signoria;Firenze;FI;;UO;18SU3R +(**) campo obbligatorio in caso di AOO/UO;;;;;;;;; +(***) campo obbligatorio in caso di Ente Centrale;;;;;;;;; diff --git a/apps/onboarding-ms/src/test/resources/aggregates-pagopa.csv b/apps/onboarding-ms/src/test/resources/aggregates-pagopa.csv new file mode 100644 index 000000000..96347c38d --- /dev/null +++ b/apps/onboarding-ms/src/test/resources/aggregates-pagopa.csv @@ -0,0 +1,2 @@ +Ragione Sociale*;PEC*;Codice Fiscale*;P.IVA*;Sede legale - Indirizzo*;Sede legale - Città*;Sede legale - Provincia (sigla)*;Ragine Sociale Partner Tecnologico*;Codice Fiscale Partner Tecnologico*;IBAN*;Servizio*;Modalità Sincrona/Asincrona* +Acme srl.;acme@pec.aruba.it;12345678901;12345678901;Via Roma, 12;Bologna;BO;MyPartnerTech;98765432101;IT60 X054 2811 1010 0000 0123 456;XXXXXXX;Sincrona diff --git a/apps/onboarding-ms/src/test/resources/aggregates-send.csv b/apps/onboarding-ms/src/test/resources/aggregates-send.csv new file mode 100644 index 000000000..c8baf22de --- /dev/null +++ b/apps/onboarding-ms/src/test/resources/aggregates-send.csv @@ -0,0 +1,4 @@ +Ragione Sociale*;PEC*;Codice Fiscale*;P.IVA*;Codice SDI*;Sede legale - Indirizzo*;Sede legale - Città*;Sede legale - Provincia (sigla)*;Codice IPA***;AOO/UO**;Codice Univoco**;Nome Amministratore Ente Aggregato*;Cognome Amministratore Ente Aggregato*;Codice Fiscale Amministratore Ente Aggregato*;email Amministratore Ente Aggregato* +Ufficio centrale di fatturazione;protocollo.rivalta@cert.legalmail.it;1864440019;1864440019;NYJTPK;Via Balma , 5;Rivalta di Torino;TO;;UO;NYJTPK;Mario;Rossi;RSSMRA66A01H501W;mario.rossi@acme.it +(**) campo obbligatorio in caso di AOO/UO;;;;;;;;;;;;;; +(***) campo obbligatorio in caso di Ente Centrale;;;;;;;;;;;;;; From 0e2dd6373274a9805d9cf19c2ff2fae5975a847e Mon Sep 17 00:00:00 2001 From: Eugen Begiqi Date: Mon, 9 Sep 2024 11:22:14 +0200 Subject: [PATCH 07/12] [SELC-5434] : added some tests --- .../controller/AggregatesControllerTest.java | 42 ++++++++++++++++++- .../service/AggregatesServiceDefaultTest.java | 36 ++++++++++++++++ 2 files changed, 77 insertions(+), 1 deletion(-) diff --git a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/controller/AggregatesControllerTest.java b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/controller/AggregatesControllerTest.java index 4b495571b..298eb530c 100644 --- a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/controller/AggregatesControllerTest.java +++ b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/controller/AggregatesControllerTest.java @@ -9,6 +9,7 @@ import io.restassured.http.ContentType; import io.smallrye.mutiny.Uni; import it.pagopa.selfcare.onboarding.model.VerifyAggregateResponse; +import it.pagopa.selfcare.onboarding.model.VerifyAggregateSendResponse; import it.pagopa.selfcare.onboarding.service.AggregatesService; import org.junit.jupiter.api.Test; @@ -21,13 +22,13 @@ @QuarkusTest @TestHTTPEndpoint(AggregatesController.class) @QuarkusTestResource(MongoTestResource.class) +@TestSecurity(user = "userJwt") public class AggregatesControllerTest { @InjectMock AggregatesService aggregatesService; @Test - @TestSecurity(user = "userJwt") void verifyAggregatesCsv_succeeds() { File testFile = new File("src/test/resources/aggregates-appio.csv"); @@ -45,4 +46,43 @@ void verifyAggregatesCsv_succeeds() { verify(aggregatesService, times(1)) .validateAppIoAggregatesCsv(any()); } + + @Test + void verifyAggregatesPagoPaCsv_succeeds() { + File testFile = new File("src/test/resources/aggregates-pagopa.csv"); + + when(aggregatesService.validatePagoPaAggregatesCsv(any())) + .thenReturn(Uni.createFrom().item(new VerifyAggregateResponse())); + + given() + .when() + .contentType(ContentType.MULTIPART) + .multiPart("aggregates", testFile) + .post("/verification/prod-pagopa") + .then() + .statusCode(200); + + verify(aggregatesService, times(1)) + .validatePagoPaAggregatesCsv(any()); + } + + @TestSecurity(user = "userJwt") + @Test + void verifyAggregatesSendCsv_succeeds() { + File testFile = new File("src/test/resources/aggregates-send.csv"); + + when(aggregatesService.validateSendAggregatesCsv(any())) + .thenReturn(Uni.createFrom().item(new VerifyAggregateSendResponse())); + + given() + .when() + .contentType(ContentType.MULTIPART) + .multiPart("aggregates", testFile) + .post("/verification/prod-pn") + .then() + .statusCode(200); + + verify(aggregatesService, times(1)) + .validateSendAggregatesCsv(any()); + } } diff --git a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/AggregatesServiceDefaultTest.java b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/AggregatesServiceDefaultTest.java index 00474260e..a81d259c0 100644 --- a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/AggregatesServiceDefaultTest.java +++ b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/AggregatesServiceDefaultTest.java @@ -64,4 +64,40 @@ void validateAggregates(){ .assertCompleted(); } + @Test + @RunOnVertxContext + void validatePagoPaAggregates(){ + File testFile = new File("src/test/resources/aggregates-pagopa.csv"); + + when(aooApi.findByUnicodeUsingGET("1437190414", null)).thenReturn(Uni.createFrom().item(new AOOResource())); + when(institutionApi.findInstitutionUsingGET("00297110389", null, null)).thenReturn(Uni.createFrom().item(new InstitutionResource())); + when(uoApi.findByUnicodeUsingGET1("4551120274", null)).thenReturn(Uni.createFrom().item(new UOResource())); + + when(aooApi.findByUnicodeUsingGET("AQ66",null)).thenThrow(ResourceNotFoundException.class); + when(institutionApi.findInstitutionUsingGET("345645", null, null)).thenThrow(ResourceNotFoundException.class); + when(uoApi.findByUnicodeUsingGET1("AQ66",null)).thenThrow(ResourceNotFoundException.class); + + aggregatesServiceDefault.validatePagoPaAggregatesCsv(testFile) + .subscribe().withSubscriber(UniAssertSubscriber.create()) + .assertCompleted(); + } + + @Test + @RunOnVertxContext + void validateSendAggregates(){ + File testFile = new File("src/test/resources/aggregates-send.csv"); + + when(aooApi.findByUnicodeUsingGET("1437190414", null)).thenReturn(Uni.createFrom().item(new AOOResource())); + when(institutionApi.findInstitutionUsingGET("00297110389", null, null)).thenReturn(Uni.createFrom().item(new InstitutionResource())); + when(uoApi.findByUnicodeUsingGET1("4551120274", null)).thenReturn(Uni.createFrom().item(new UOResource())); + + when(aooApi.findByUnicodeUsingGET("AQ66",null)).thenThrow(ResourceNotFoundException.class); + when(institutionApi.findInstitutionUsingGET("345645", null, null)).thenThrow(ResourceNotFoundException.class); + when(uoApi.findByUnicodeUsingGET1("AQ66",null)).thenThrow(ResourceNotFoundException.class); + + aggregatesServiceDefault.validateSendAggregatesCsv(testFile) + .subscribe().withSubscriber(UniAssertSubscriber.create()) + .assertCompleted(); + } + } From 437081797151f77ecbbbd450b14232a2c859ef54 Mon Sep 17 00:00:00 2001 From: Eugen Begiqi Date: Mon, 9 Sep 2024 11:54:13 +0200 Subject: [PATCH 08/12] [SELC-5434] : added some tests --- .../service/AggregatesServiceDefault.java | 10 +-- .../model/CsvAggregateAppIoTest.java | 74 ++++++++++++++++ .../model/CsvAggregatePagoPaTest.java | 78 +++++++++++++++++ .../model/CsvAggregateSendTest.java | 87 +++++++++++++++++++ .../VerifyAggregateSendResponseTest.java | 68 +++++++++++++++ 5 files changed, 308 insertions(+), 9 deletions(-) create mode 100644 apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/model/CsvAggregateAppIoTest.java create mode 100644 apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/model/CsvAggregatePagoPaTest.java create mode 100644 apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/model/CsvAggregateSendTest.java create mode 100644 apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/model/VerifyAggregateSendResponseTest.java diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/AggregatesServiceDefault.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/AggregatesServiceDefault.java index aba52a3c4..fb55426d2 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/AggregatesServiceDefault.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/AggregatesServiceDefault.java @@ -136,15 +136,7 @@ private Uni checkCsvAggregateSendAndFillAggregateOrErrorList(Csv csv, Aggr } private Uni checkCsvAggregatePagoPaAndFillAggregateOrErrorList(Csv csv, AggregatesCsvResponse aggregatesCsvResponse) { - CsvAggregatePagoPa csvAggregated = null; - try { - csvAggregated = (CsvAggregatePagoPa) csv; - } catch (Exception ex){ - ex.printStackTrace(); - System.out.println("Error RR: " ); - } - - CsvAggregatePagoPa csvAggregate = csvAggregated; + CsvAggregatePagoPa csvAggregate = (CsvAggregatePagoPa) csv; return checkCsvAggregatePagoPa(csvAggregate) .onItem().invoke(() -> aggregatesCsvResponse.getValidAggregates().add(csvAggregate)) diff --git a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/model/CsvAggregateAppIoTest.java b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/model/CsvAggregateAppIoTest.java new file mode 100644 index 000000000..ff167dcea --- /dev/null +++ b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/model/CsvAggregateAppIoTest.java @@ -0,0 +1,74 @@ +package it.pagopa.selfcare.onboarding.model; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; + +class CsvAggregateAppIoTest { + + @Test + void testCsvAggregateAppIoConstructorAndGetters() { + + String description = "Test Description"; + String pec = "test@example.com"; + String taxCode = "TAX12345"; + String vatNumber = "VAT12345678"; + String address = "Test Address"; + String city = "Test City"; + String province = "Test Province"; + String ipaCode = "IPA12345"; + String subunitType = "Department"; + String subunitCode = "DEP001"; + String originId = "ORI123"; + Integer rowNumber = 5; + + CsvAggregateAppIo csvAggregateAppIo = new CsvAggregateAppIo(); + csvAggregateAppIo.setDescription(description); + csvAggregateAppIo.setPec(pec); + csvAggregateAppIo.setTaxCode(taxCode); + csvAggregateAppIo.setVatNumber(vatNumber); + csvAggregateAppIo.setAddress(address); + csvAggregateAppIo.setCity(city); + csvAggregateAppIo.setProvince(province); + csvAggregateAppIo.setIpaCode(ipaCode); + csvAggregateAppIo.setSubunitType(subunitType); + csvAggregateAppIo.setSubunitCode(subunitCode); + csvAggregateAppIo.setOriginId(originId); + csvAggregateAppIo.setRowNumber(rowNumber); + + assertEquals(description, csvAggregateAppIo.getDescription()); + assertEquals(pec, csvAggregateAppIo.getPec()); + assertEquals(taxCode, csvAggregateAppIo.getTaxCode()); + assertEquals(vatNumber, csvAggregateAppIo.getVatNumber()); + assertEquals(address, csvAggregateAppIo.getAddress()); + assertEquals(city, csvAggregateAppIo.getCity()); + assertEquals(province, csvAggregateAppIo.getProvince()); + assertEquals(ipaCode, csvAggregateAppIo.getIpaCode()); + assertEquals(subunitType, csvAggregateAppIo.getSubunitType()); + assertEquals(subunitCode, csvAggregateAppIo.getSubunitCode()); + assertEquals(originId, csvAggregateAppIo.getOriginId()); + assertEquals(rowNumber, csvAggregateAppIo.getRowNumber()); + } + + @Test + void testSetRowNumber() { + CsvAggregateAppIo csvAggregateAppIo = new CsvAggregateAppIo(); + int expectedRowNumber = 10; + + csvAggregateAppIo.setRowNumber(expectedRowNumber); + + assertEquals(expectedRowNumber, csvAggregateAppIo.getRowNumber()); + } + + @Test + void testCsvBindByPositionAnnotations() { + CsvAggregateAppIo csvAggregateAppIo = new CsvAggregateAppIo(); + csvAggregateAppIo.setDescription("Sample Description"); + csvAggregateAppIo.setPec("sample@example.com"); + csvAggregateAppIo.setTaxCode("SAMPLETAXCODE"); + + assertNotNull(csvAggregateAppIo); + assertEquals("Sample Description", csvAggregateAppIo.getDescription()); + assertEquals("sample@example.com", csvAggregateAppIo.getPec()); + assertEquals("SAMPLETAXCODE", csvAggregateAppIo.getTaxCode()); + } +} diff --git a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/model/CsvAggregatePagoPaTest.java b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/model/CsvAggregatePagoPaTest.java new file mode 100644 index 000000000..ed99bae8b --- /dev/null +++ b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/model/CsvAggregatePagoPaTest.java @@ -0,0 +1,78 @@ +package it.pagopa.selfcare.onboarding.model; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; + +class CsvAggregatePagoPaTest { + + @Test + void testCsvAggregatePagoPaConstructorAndGetters() { + String description = "PagoPa Description"; + String pec = "pagopa@example.com"; + String taxCode = "PAGOTAX12345"; + String vatNumber = "PAGOVAT12345678"; + String address = "PagoPa Address"; + String city = "PagoPa City"; + String province = "PagoPa Province"; + String aggragateNamePT = "PagoPa Name PT"; + String taxCodePT = "PTTAXCODE123"; + String iban = "IT60X0542811101000000123456"; + String service = "PagoPa Service"; + String syncAsyncMode = "SYNC"; + Integer rowNumber = 2; + + CsvAggregatePagoPa csvAggregatePagoPa = new CsvAggregatePagoPa(); + csvAggregatePagoPa.setDescription(description); + csvAggregatePagoPa.setPec(pec); + csvAggregatePagoPa.setTaxCode(taxCode); + csvAggregatePagoPa.setVatNumber(vatNumber); + csvAggregatePagoPa.setAddress(address); + csvAggregatePagoPa.setCity(city); + csvAggregatePagoPa.setProvince(province); + csvAggregatePagoPa.setAggragateNamePT(aggragateNamePT); + csvAggregatePagoPa.setTaxCodePT(taxCodePT); + csvAggregatePagoPa.setIban(iban); + csvAggregatePagoPa.setService(service); + csvAggregatePagoPa.setSyncAsyncMode(syncAsyncMode); + csvAggregatePagoPa.setRowNumber(rowNumber); + + assertEquals(description, csvAggregatePagoPa.getDescription()); + assertEquals(pec, csvAggregatePagoPa.getPec()); + assertEquals(taxCode, csvAggregatePagoPa.getTaxCode()); + assertEquals(vatNumber, csvAggregatePagoPa.getVatNumber()); + assertEquals(address, csvAggregatePagoPa.getAddress()); + assertEquals(city, csvAggregatePagoPa.getCity()); + assertEquals(province, csvAggregatePagoPa.getProvince()); + assertEquals(aggragateNamePT, csvAggregatePagoPa.getAggragateNamePT()); + assertEquals(taxCodePT, csvAggregatePagoPa.getTaxCodePT()); + assertEquals(iban, csvAggregatePagoPa.getIban()); + assertEquals(service, csvAggregatePagoPa.getService()); + assertEquals(syncAsyncMode, csvAggregatePagoPa.getSyncAsyncMode()); + assertEquals(rowNumber, csvAggregatePagoPa.getRowNumber()); + } + + @Test + void testSetRowNumber() { + CsvAggregatePagoPa csvAggregatePagoPa = new CsvAggregatePagoPa(); + int expectedRowNumber = 15; + + csvAggregatePagoPa.setRowNumber(expectedRowNumber); + + assertEquals(expectedRowNumber, csvAggregatePagoPa.getRowNumber()); + } + + @Test + void testCsvBindByPositionAnnotations() { + CsvAggregatePagoPa csvAggregatePagoPa = new CsvAggregatePagoPa(); + csvAggregatePagoPa.setDescription("Test Description"); + csvAggregatePagoPa.setPec("test@pagopa.it"); + csvAggregatePagoPa.setTaxCode("TESTTAXCODE"); + csvAggregatePagoPa.setIban("IT60X0542811101000000123456"); + + assertNotNull(csvAggregatePagoPa); + assertEquals("Test Description", csvAggregatePagoPa.getDescription()); + assertEquals("test@pagopa.it", csvAggregatePagoPa.getPec()); + assertEquals("TESTTAXCODE", csvAggregatePagoPa.getTaxCode()); + assertEquals("IT60X0542811101000000123456", csvAggregatePagoPa.getIban()); + } +} diff --git a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/model/CsvAggregateSendTest.java b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/model/CsvAggregateSendTest.java new file mode 100644 index 000000000..18ae8267d --- /dev/null +++ b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/model/CsvAggregateSendTest.java @@ -0,0 +1,87 @@ +package it.pagopa.selfcare.onboarding.model; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; + +class CsvAggregateSendTest { + + @Test + void testCsvAggregateSendConstructorAndGetters() { + String description = "Test Description"; + String pec = "test@example.com"; + String taxCode = "TAX12345"; + String vatNumber = "VAT12345678"; + String codeSDI = "SDI123456"; + String address = "Test Address"; + String city = "Test City"; + String province = "Test Province"; + String ipaCode = "IPA12345"; + String subunitType = "Department"; + String subunitCode = "DEP001"; + String adminAggregateName = "Admin Name"; + String adminAggregateSurname = "Admin Surname"; + String adminAggregateTaxCode = "ADMIN12345"; + String adminAggregateEmail = "admin@example.com"; + Integer rowNumber = 5; + + CsvAggregateSend csvAggregateSend = new CsvAggregateSend(); + csvAggregateSend.setDescription(description); + csvAggregateSend.setPec(pec); + csvAggregateSend.setTaxCode(taxCode); + csvAggregateSend.setVatNumber(vatNumber); + csvAggregateSend.setCodeSDI(codeSDI); + csvAggregateSend.setAddress(address); + csvAggregateSend.setCity(city); + csvAggregateSend.setProvince(province); + csvAggregateSend.setIpaCode(ipaCode); + csvAggregateSend.setSubunitType(subunitType); + csvAggregateSend.setSubunitCode(subunitCode); + csvAggregateSend.setAdminAggregateName(adminAggregateName); + csvAggregateSend.setAdminAggregateSurname(adminAggregateSurname); + csvAggregateSend.setAdminAggregateTaxCode(adminAggregateTaxCode); + csvAggregateSend.setAdminAggregateEmail(adminAggregateEmail); + csvAggregateSend.setRowNumber(rowNumber); + + assertEquals(description, csvAggregateSend.getDescription()); + assertEquals(pec, csvAggregateSend.getPec()); + assertEquals(taxCode, csvAggregateSend.getTaxCode()); + assertEquals(vatNumber, csvAggregateSend.getVatNumber()); + assertEquals(codeSDI, csvAggregateSend.getCodeSDI()); + assertEquals(address, csvAggregateSend.getAddress()); + assertEquals(city, csvAggregateSend.getCity()); + assertEquals(province, csvAggregateSend.getProvince()); + assertEquals(ipaCode, csvAggregateSend.getIpaCode()); + assertEquals(subunitType, csvAggregateSend.getSubunitType()); + assertEquals(subunitCode, csvAggregateSend.getSubunitCode()); + assertEquals(adminAggregateName, csvAggregateSend.getAdminAggregateName()); + assertEquals(adminAggregateSurname, csvAggregateSend.getAdminAggregateSurname()); + assertEquals(adminAggregateTaxCode, csvAggregateSend.getAdminAggregateTaxCode()); + assertEquals(adminAggregateEmail, csvAggregateSend.getAdminAggregateEmail()); + assertEquals(rowNumber, csvAggregateSend.getRowNumber()); + } + + @Test + void testSetRowNumber() { + CsvAggregateSend csvAggregateSend = new CsvAggregateSend(); + int expectedRowNumber = 10; + + csvAggregateSend.setRowNumber(expectedRowNumber); + + assertEquals(expectedRowNumber, csvAggregateSend.getRowNumber()); + } + + @Test + void testCsvBindByPositionAnnotations() { + CsvAggregateSend csvAggregateSend = new CsvAggregateSend(); + csvAggregateSend.setDescription("Sample Description"); + csvAggregateSend.setPec("sample@example.com"); + csvAggregateSend.setTaxCode("SAMPLETAXCODE"); + csvAggregateSend.setAdminAggregateEmail("admin@example.com"); + + assertNotNull(csvAggregateSend); + assertEquals("Sample Description", csvAggregateSend.getDescription()); + assertEquals("sample@example.com", csvAggregateSend.getPec()); + assertEquals("SAMPLETAXCODE", csvAggregateSend.getTaxCode()); + assertEquals("admin@example.com", csvAggregateSend.getAdminAggregateEmail()); + } +} diff --git a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/model/VerifyAggregateSendResponseTest.java b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/model/VerifyAggregateSendResponseTest.java new file mode 100644 index 000000000..341dab55e --- /dev/null +++ b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/model/VerifyAggregateSendResponseTest.java @@ -0,0 +1,68 @@ +package it.pagopa.selfcare.onboarding.model; + +import org.junit.jupiter.api.Test; +import java.util.List; +import java.util.ArrayList; + +import static org.junit.jupiter.api.Assertions.*; + +class VerifyAggregateSendResponseTest { + + @Test + void testVerifyAggregateSendResponseConstructorAndGetters() { + + List aggregates = new ArrayList<>(); + List errors = new ArrayList<>(); + + VerifyAggregateSendResponse.AggregateSend aggregateSend = new VerifyAggregateSendResponse.AggregateSend(); + aggregateSend.setDescription("Description"); + aggregateSend.setPec("example@pec.it"); + aggregateSend.setTaxCode("XYZ12345"); + aggregateSend.setVatNumber("IT123456789"); + aggregateSend.setCodeSDI("AB123CD"); + aggregateSend.setAddress("Street 123"); + aggregateSend.setCity("Rome"); + aggregateSend.setProvince("RM"); + aggregateSend.setSubunitType("Subunit Type"); + aggregateSend.setSubunitCode("Subunit Code"); + + VerifyAggregateSendResponse.AggregateUser user = new VerifyAggregateSendResponse.AggregateUser(); + user.setName("John"); + user.setSurname("Doe"); + user.setTaxCode("JD12345"); + user.setEmail("john.doe@example.com"); + user.setRole("Admin"); + + aggregateSend.setUsers(List.of(user)); + aggregates.add(aggregateSend); + + VerifyAggregateSendResponse response = new VerifyAggregateSendResponse(aggregates, errors); + + assertNotNull(response.getAggregates()); + assertEquals(1, response.getAggregates().size()); + assertEquals("Description", response.getAggregates().get(0).getDescription()); + assertEquals("example@pec.it", response.getAggregates().get(0).getPec()); + assertEquals("XYZ12345", response.getAggregates().get(0).getTaxCode()); + assertEquals("IT123456789", response.getAggregates().get(0).getVatNumber()); + assertEquals("AB123CD", response.getAggregates().get(0).getCodeSDI()); + assertEquals("Street 123", response.getAggregates().get(0).getAddress()); + assertEquals("Rome", response.getAggregates().get(0).getCity()); + assertEquals("RM", response.getAggregates().get(0).getProvince()); + assertEquals("Subunit Type", response.getAggregates().get(0).getSubunitType()); + assertEquals("Subunit Code", response.getAggregates().get(0).getSubunitCode()); + assertEquals(1, response.getAggregates().get(0).getUsers().size()); + assertEquals("John", response.getAggregates().get(0).getUsers().get(0).getName()); + assertEquals("Doe", response.getAggregates().get(0).getUsers().get(0).getSurname()); + assertEquals("JD12345", response.getAggregates().get(0).getUsers().get(0).getTaxCode()); + assertEquals("john.doe@example.com", response.getAggregates().get(0).getUsers().get(0).getEmail()); + assertEquals("Admin", response.getAggregates().get(0).getUsers().get(0).getRole()); + } + + @Test + void testNoArgsConstructor() { + VerifyAggregateSendResponse response = new VerifyAggregateSendResponse(); + + assertNull(response.getAggregates()); + assertNull(response.getErrors()); + } +} From bbf88b862e9fe8b64c93c1bbc6ebaffc0eb839c8 Mon Sep 17 00:00:00 2001 From: Eugen Begiqi Date: Mon, 9 Sep 2024 15:37:55 +0200 Subject: [PATCH 09/12] [SELC-5434] : added some tests --- .../service/AggregatesServiceDefaultTest.java | 130 +++++++++++++++++- 1 file changed, 125 insertions(+), 5 deletions(-) diff --git a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/AggregatesServiceDefaultTest.java b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/AggregatesServiceDefaultTest.java index a81d259c0..bbafc0ece 100644 --- a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/AggregatesServiceDefaultTest.java +++ b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/AggregatesServiceDefaultTest.java @@ -1,6 +1,5 @@ package it.pagopa.selfcare.onboarding.service; -import com.fasterxml.jackson.databind.ObjectMapper; import io.quarkus.test.InjectMock; import io.quarkus.test.junit.QuarkusTest; import io.quarkus.test.vertx.RunOnVertxContext; @@ -8,7 +7,7 @@ import io.smallrye.mutiny.helpers.test.UniAssertSubscriber; import it.pagopa.selfcare.onboarding.exception.ResourceNotFoundException; import it.pagopa.selfcare.onboarding.mapper.OnboardingMapper; -import it.pagopa.selfcare.onboarding.model.VerifyAggregateResponse; +import it.pagopa.selfcare.onboarding.model.*; import jakarta.inject.Inject; import org.eclipse.microprofile.rest.client.inject.RestClient; import org.junit.jupiter.api.Test; @@ -20,10 +19,15 @@ import org.openapi.quarkus.party_registry_proxy_json.model.UOResource; import java.io.File; -import java.io.IOException; -import java.nio.file.Files; +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; + +import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.when; @QuarkusTest public class AggregatesServiceDefaultTest { @@ -100,4 +104,120 @@ void validateSendAggregates(){ .assertCompleted(); } + + @Test + void testValidateAppIoAggregatesCsv() { + + File file = new File("src/test/resources/aggregates-appio.csv"); + + CsvAggregateAppIo csvAggregate = new CsvAggregateAppIo(); + csvAggregate.setSubunitType("AOO"); + csvAggregate.setSubunitCode("AOO_CODE"); + + List csvAggregateList = new ArrayList<>(); + csvAggregateList.add(csvAggregate); + + AggregatesCsvResponse aggregatesCsvResponse = aggregatesServiceDefault.readItemsFromCsv(file, CsvAggregateAppIo.class); + when(aooApi.findByUnicodeUsingGET("1437190414", null)).thenReturn(Uni.createFrom().item(new AOOResource())); + when(institutionApi.findInstitutionUsingGET("00297110389", null, null)).thenReturn(Uni.createFrom().item(new InstitutionResource())); + + Uni result = aggregatesServiceDefault.validateAppIoAggregatesCsv(file); + + VerifyAggregateResponse verifyAggregateResponse = result.await().indefinitely(); + assertNotNull(verifyAggregateResponse); + assertNotNull(aggregatesCsvResponse.getValidAggregates()); + + assertTrue(!aggregatesCsvResponse.getCsvAggregateList().isEmpty()); + assertTrue(aggregatesCsvResponse.getRowErrorList().isEmpty()); + + assertNotNull(((CsvAggregateAppIo) aggregatesCsvResponse.getCsvAggregateList().get(0)).getAddress()); + assertNotNull(((CsvAggregateAppIo) aggregatesCsvResponse.getCsvAggregateList().get(0)).getCity()); + assertNotNull(((CsvAggregateAppIo) aggregatesCsvResponse.getCsvAggregateList().get(0)).getPec()); + assertNotNull(((CsvAggregateAppIo) aggregatesCsvResponse.getCsvAggregateList().get(0)).getDescription()); + assertNotNull(((CsvAggregateAppIo) aggregatesCsvResponse.getCsvAggregateList().get(0)).getRowNumber()); + assertNotNull(((CsvAggregateAppIo) aggregatesCsvResponse.getCsvAggregateList().get(0)).getSubunitCode()); + assertNotNull(((CsvAggregateAppIo) aggregatesCsvResponse.getCsvAggregateList().get(0)).getTaxCode()); + assertNotNull(((CsvAggregateAppIo) aggregatesCsvResponse.getCsvAggregateList().get(0)).getProvince()); + assertNotNull(((CsvAggregateAppIo) aggregatesCsvResponse.getCsvAggregateList().get(0)).getSubunitType()); + assertNotNull(((CsvAggregateAppIo) aggregatesCsvResponse.getCsvAggregateList().get(0)).getVatNumber()); + + verify(aooApi,times(0)).findByUnicodeUsingGET("1437190414", null); + verify(institutionApi,times(0)).findInstitutionUsingGET("00297110389", null, null); + + } + + @Test + void testValidateSendAggregatesCsv() { + + File file = new File("src/test/resources/aggregates-send.csv"); + + CsvAggregateSend csvAggregate = new CsvAggregateSend(); + csvAggregate.setSubunitType("AOO"); + csvAggregate.setSubunitCode("AOO_CODE"); + + List csvAggregateList = new ArrayList<>(); + csvAggregateList.add(csvAggregate); + + AggregatesCsvResponse aggregatesCsvResponse = aggregatesServiceDefault.readItemsFromCsv(file, CsvAggregateSend.class); + when(aooApi.findByUnicodeUsingGET("1437190414", null)).thenReturn(Uni.createFrom().item(new AOOResource())); + when(institutionApi.findInstitutionUsingGET("00297110389", null, null)).thenReturn(Uni.createFrom().item(new InstitutionResource())); + when(uoApi.findByUnicodeUsingGET1("4551120274", null)).thenReturn(Uni.createFrom().item(new UOResource())); + + Uni result = aggregatesServiceDefault.validateAppIoAggregatesCsv(file); + + VerifyAggregateResponse verifyAggregateResponse = result.await().indefinitely(); + assertNotNull(verifyAggregateResponse); + assertNotNull(aggregatesCsvResponse.getValidAggregates()); + + assertTrue(!aggregatesCsvResponse.getCsvAggregateList().isEmpty()); + assertTrue(aggregatesCsvResponse.getRowErrorList().isEmpty()); + + assertNotNull(((CsvAggregateSend) aggregatesCsvResponse.getCsvAggregateList().get(0)).getAddress()); + assertNotNull(((CsvAggregateSend) aggregatesCsvResponse.getCsvAggregateList().get(0)).getCity()); + assertNotNull(((CsvAggregateSend) aggregatesCsvResponse.getCsvAggregateList().get(0)).getPec()); + assertNotNull(((CsvAggregateSend) aggregatesCsvResponse.getCsvAggregateList().get(0)).getDescription()); + assertNotNull(((CsvAggregateSend) aggregatesCsvResponse.getCsvAggregateList().get(0)).getRowNumber()); + assertNotNull(((CsvAggregateSend) aggregatesCsvResponse.getCsvAggregateList().get(0)).getSubunitCode()); + assertNotNull(((CsvAggregateSend) aggregatesCsvResponse.getCsvAggregateList().get(0)).getTaxCode()); + assertNotNull(((CsvAggregateSend) aggregatesCsvResponse.getCsvAggregateList().get(0)).getProvince()); + assertNotNull(((CsvAggregateSend) aggregatesCsvResponse.getCsvAggregateList().get(0)).getSubunitType()); + assertNotNull(((CsvAggregateSend) aggregatesCsvResponse.getCsvAggregateList().get(0)).getVatNumber()); + + verify(aooApi,times(0)).findByUnicodeUsingGET("1437190414", null); + verify(institutionApi,times(0)).findInstitutionUsingGET("00297110389", null, null); + verify(uoApi,times(0)).findByUnicodeUsingGET1("4551120274", null); + + } + + @Test + void testValidatePagoPaAggregatesCsv() { + + File file = new File("src/test/resources/aggregates-pagopa.csv"); + + CsvAggregatePagoPa csvAggregate = new CsvAggregatePagoPa(); + + List csvAggregateList = new ArrayList<>(); + csvAggregateList.add(csvAggregate); + + AggregatesCsvResponse aggregatesCsvResponse = aggregatesServiceDefault.readItemsFromCsv(file, CsvAggregatePagoPa.class); + Uni result = aggregatesServiceDefault.validateAppIoAggregatesCsv(file); + + VerifyAggregateResponse verifyAggregateResponse = result.await().indefinitely(); + assertNotNull(verifyAggregateResponse); + assertNotNull(aggregatesCsvResponse.getValidAggregates()); + + assertTrue(!aggregatesCsvResponse.getCsvAggregateList().isEmpty()); + assertTrue(aggregatesCsvResponse.getRowErrorList().isEmpty()); + + assertNotNull(((CsvAggregatePagoPa) aggregatesCsvResponse.getCsvAggregateList().get(0)).getAddress()); + assertNotNull(((CsvAggregatePagoPa) aggregatesCsvResponse.getCsvAggregateList().get(0)).getCity()); + assertNotNull(((CsvAggregatePagoPa) aggregatesCsvResponse.getCsvAggregateList().get(0)).getPec()); + assertNotNull(((CsvAggregatePagoPa) aggregatesCsvResponse.getCsvAggregateList().get(0)).getDescription()); + assertNotNull(((CsvAggregatePagoPa) aggregatesCsvResponse.getCsvAggregateList().get(0)).getRowNumber()); + assertNotNull(((CsvAggregatePagoPa) aggregatesCsvResponse.getCsvAggregateList().get(0)).getTaxCode()); + assertNotNull(((CsvAggregatePagoPa) aggregatesCsvResponse.getCsvAggregateList().get(0)).getProvince()); + assertNotNull(((CsvAggregatePagoPa) aggregatesCsvResponse.getCsvAggregateList().get(0)).getVatNumber()); + + } + } From 9b9906cc12f03e7fb547826c1afbedf7358a6ca0 Mon Sep 17 00:00:00 2001 From: Eugen Begiqi Date: Tue, 10 Sep 2024 15:40:00 +0200 Subject: [PATCH 10/12] [SELC-5434] : removed unused import --- .../selfcare/onboarding/model/VerifyAggregateSendResponse.java | 1 - .../onboarding/service/AggregatesServiceDefaultTest.java | 1 - 2 files changed, 2 deletions(-) diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/VerifyAggregateSendResponse.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/VerifyAggregateSendResponse.java index 1281bdff3..0a125d4cb 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/VerifyAggregateSendResponse.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/VerifyAggregateSendResponse.java @@ -1,6 +1,5 @@ package it.pagopa.selfcare.onboarding.model; -import it.pagopa.selfcare.onboarding.entity.Institution; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/AggregatesServiceDefaultTest.java b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/AggregatesServiceDefaultTest.java index bbafc0ece..0795218af 100644 --- a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/AggregatesServiceDefaultTest.java +++ b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/AggregatesServiceDefaultTest.java @@ -23,7 +23,6 @@ import java.util.List; import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.*; import static org.junit.jupiter.api.Assertions.*; From 5669059ea4076b6dd3c3e746dbbd041e12b55a31 Mon Sep 17 00:00:00 2001 From: Eugen Begiqi Date: Tue, 10 Sep 2024 16:58:07 +0200 Subject: [PATCH 11/12] [SELC-5434] : change code fot junit test --- .../onboarding/mapper/OnboardingMapper.java | 13 ++++------ .../onboarding/model/AggregateSend.java | 20 ++++++++++++++++ .../onboarding/model/AggregateUser.java | 12 ++++++++++ .../model/VerifyAggregateSendResponse.java | 24 ------------------- .../VerifyAggregateSendResponseTest.java | 6 ++--- .../service/AggregatesServiceDefaultTest.java | 2 +- 6 files changed, 41 insertions(+), 36 deletions(-) create mode 100644 apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/AggregateSend.java create mode 100644 apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/AggregateUser.java diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/mapper/OnboardingMapper.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/mapper/OnboardingMapper.java index e89230010..762920b16 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/mapper/OnboardingMapper.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/mapper/OnboardingMapper.java @@ -8,10 +8,7 @@ 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.model.AggregatesCsvResponse; -import it.pagopa.selfcare.onboarding.model.CsvAggregateSend; -import it.pagopa.selfcare.onboarding.model.VerifyAggregateResponse; -import it.pagopa.selfcare.onboarding.model.VerifyAggregateSendResponse; +import it.pagopa.selfcare.onboarding.model.*; import org.mapstruct.*; import org.openapi.quarkus.onboarding_functions_json.model.PartyRole; @@ -127,9 +124,9 @@ default OffsetDateTime toOffsetDateTime(java.time.LocalDateTime localDateTime) { VerifyAggregateSendResponse toVerifyAggregateSendResponse(AggregatesCsvResponse aggregatesCsvResponse); @Mapping(target = "users", source = ".") - VerifyAggregateSendResponse.AggregateSend csvToAggregateSend(CsvAggregateSend csvAggregateSend); + AggregateSend csvToAggregateSend(CsvAggregateSend csvAggregateSend); - default List mapCsvAggregatesToAggregates(List csvAggregateSendList) { + default List mapCsvAggregatesToAggregates(List csvAggregateSendList) { if (csvAggregateSendList == null) { return null; } @@ -138,11 +135,11 @@ default List mapCsvAggregatesToAggreg .collect(Collectors.toList()); } - default List mapUsers(CsvAggregateSend csvAggregateSend) { + default List mapUsers(CsvAggregateSend csvAggregateSend) { if (csvAggregateSend == null) { return Collections.emptyList(); } - VerifyAggregateSendResponse.AggregateUser user = new VerifyAggregateSendResponse.AggregateUser(); + AggregateUser user = new AggregateUser(); user.setName(csvAggregateSend.getAdminAggregateName()); user.setSurname(csvAggregateSend.getAdminAggregateSurname()); user.setTaxCode(csvAggregateSend.getAdminAggregateTaxCode()); diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/AggregateSend.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/AggregateSend.java new file mode 100644 index 000000000..8b3564ab5 --- /dev/null +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/AggregateSend.java @@ -0,0 +1,20 @@ +package it.pagopa.selfcare.onboarding.model; + +import lombok.Data; + +import java.util.List; + +@Data +public class AggregateSend { + private String description; + private String pec; + private String taxCode; + private String vatNumber; + private String codeSDI; + private String address; + private String city; + private String province; + private String subunitType; + private String subunitCode; + private List users; +} \ No newline at end of file diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/AggregateUser.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/AggregateUser.java new file mode 100644 index 000000000..d4329ab1e --- /dev/null +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/AggregateUser.java @@ -0,0 +1,12 @@ +package it.pagopa.selfcare.onboarding.model; + +import lombok.Data; + +@Data +public class AggregateUser { + private String name; + private String surname; + private String taxCode; + private String email; + private String role; +} \ No newline at end of file diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/VerifyAggregateSendResponse.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/VerifyAggregateSendResponse.java index 0a125d4cb..e86dd5f86 100644 --- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/VerifyAggregateSendResponse.java +++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/VerifyAggregateSendResponse.java @@ -14,28 +14,4 @@ public class VerifyAggregateSendResponse { private List aggregates; private List errors; - @Data - public static class AggregateSend { - private String description; - private String pec; - private String taxCode; - private String vatNumber; - private String codeSDI; - private String address; - private String city; - private String province; - private String subunitType; - private String subunitCode; - private List users; - } - - @Data - public static class AggregateUser { - private String name; - private String surname; - private String taxCode; - private String email; - private String role; - } - } diff --git a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/model/VerifyAggregateSendResponseTest.java b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/model/VerifyAggregateSendResponseTest.java index 341dab55e..a02c8fbca 100644 --- a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/model/VerifyAggregateSendResponseTest.java +++ b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/model/VerifyAggregateSendResponseTest.java @@ -11,10 +11,10 @@ class VerifyAggregateSendResponseTest { @Test void testVerifyAggregateSendResponseConstructorAndGetters() { - List aggregates = new ArrayList<>(); + List aggregates = new ArrayList<>(); List errors = new ArrayList<>(); - VerifyAggregateSendResponse.AggregateSend aggregateSend = new VerifyAggregateSendResponse.AggregateSend(); + AggregateSend aggregateSend = new AggregateSend(); aggregateSend.setDescription("Description"); aggregateSend.setPec("example@pec.it"); aggregateSend.setTaxCode("XYZ12345"); @@ -26,7 +26,7 @@ void testVerifyAggregateSendResponseConstructorAndGetters() { aggregateSend.setSubunitType("Subunit Type"); aggregateSend.setSubunitCode("Subunit Code"); - VerifyAggregateSendResponse.AggregateUser user = new VerifyAggregateSendResponse.AggregateUser(); + AggregateUser user = new AggregateUser(); user.setName("John"); user.setSurname("Doe"); user.setTaxCode("JD12345"); diff --git a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/AggregatesServiceDefaultTest.java b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/AggregatesServiceDefaultTest.java index 0795218af..f03001f71 100644 --- a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/AggregatesServiceDefaultTest.java +++ b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/AggregatesServiceDefaultTest.java @@ -123,7 +123,7 @@ void testValidateAppIoAggregatesCsv() { Uni result = aggregatesServiceDefault.validateAppIoAggregatesCsv(file); VerifyAggregateResponse verifyAggregateResponse = result.await().indefinitely(); - assertNotNull(verifyAggregateResponse); + assertNotNull(verifyAggregateResponse.getAggregates()); assertNotNull(aggregatesCsvResponse.getValidAggregates()); assertTrue(!aggregatesCsvResponse.getCsvAggregateList().isEmpty()); From 068f33a2e498709f65d00893bc9d06307ceca1db Mon Sep 17 00:00:00 2001 From: Eugen Begiqi Date: Wed, 11 Sep 2024 09:16:03 +0200 Subject: [PATCH 12/12] [SELC-5434] : removed eclipse file --- apps/onboarding-cdc/.factorypath | 47 -------------------------------- 1 file changed, 47 deletions(-) delete mode 100644 apps/onboarding-cdc/.factorypath diff --git a/apps/onboarding-cdc/.factorypath b/apps/onboarding-cdc/.factorypath deleted file mode 100644 index ff7032b1b..000000000 --- a/apps/onboarding-cdc/.factorypath +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -