diff --git a/apps/onboarding-ms/pom.xml b/apps/onboarding-ms/pom.xml
index 2d4fdc383..83f065b6b 100644
--- a/apps/onboarding-ms/pom.xml
+++ b/apps/onboarding-ms/pom.xml
@@ -55,6 +55,12 @@
quarkus-junit5
test
+
+ net.jodah
+ expiringmap
+ 0.5.10
+ compile
+
io.quarkus
quarkus-junit5-mockito
diff --git a/apps/onboarding-ms/src/main/docs/openapi.json b/apps/onboarding-ms/src/main/docs/openapi.json
index 6556b6b42..04a268251 100644
--- a/apps/onboarding-ms/src/main/docs/openapi.json
+++ b/apps/onboarding-ms/src/main/docs/openapi.json
@@ -47,51 +47,6 @@
}
}
},
- "responses" : {
- "200" : {
- "description" : "OK",
- "content" : {
- "application/json" : {
- "schema" : {
- "$ref" : "#/components/schemas/VerifyAggregateAppIoResponse"
- }
- }
- }
- },
- "401" : {
- "description" : "Not Authorized"
- },
- "403" : {
- "description" : "Not Allowed"
- }
- },
- "security" : [ {
- "SecurityScheme" : [ ]
- } ]
- }
- },
- "/v1/aggregates/verification/prod-pagopa" : {
- "post" : {
- "tags" : [ "Aggregates Controller" ],
- "summary" : "Validate the data related to the aggregated entities present in a CSV file",
- "description" : "Validates aggregated entity data specific to the PROD-Pagopa environment by processing the provided CSV file. This ensures that all entries meet the required criteria before further processing.",
- "operationId" : "verifyPagoPaAggregatesCsv",
- "requestBody" : {
- "content" : {
- "multipart/form-data" : {
- "schema" : {
- "required" : [ "aggregates" ],
- "type" : "object",
- "properties" : {
- "aggregates" : {
- "format" : "binary",
- "type" : "string"
- }
- }
- }
- }
- }
- },
"responses" : {
"200" : {
"description" : "OK",
@@ -115,51 +70,6 @@
} ]
}
},
- "/v1/aggregates/verification/prod-pn" : {
- "post" : {
- "tags" : [ "Aggregates Controller" ],
- "summary" : "Validate the data related to the aggregated entities present in a CSV file",
- "description" : "Validates aggregated entity data specific to the PROD-PN environment by processing the provided CSV file. This ensures that all entries meet the required criteria before further processing.",
- "operationId" : "verifySendAggregatesCsv",
- "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/VerifyAggregateSendResponse"
- }
- }
- }
- },
- "401" : {
- "description" : "Not Authorized"
- },
- "403" : {
- "description" : "Not Allowed"
- }
- },
- "security" : [ {
- "SecurityScheme" : [ ]
- } ]
- }
- },
"/v1/notification/resend" : {
"post" : {
"tags" : [ "Notification Controller" ],
@@ -1442,7 +1352,7 @@
}
}
},
- "AggregateAppIo" : {
+ "Aggregate" : {
"type" : "object",
"properties" : {
"subunitCode" : {
@@ -1466,6 +1376,15 @@
"address" : {
"type" : "string"
},
+ "city" : {
+ "type" : "string"
+ },
+ "county" : {
+ "type" : "string"
+ },
+ "zipCode" : {
+ "type" : "string"
+ },
"originId" : {
"type" : "string"
},
@@ -1547,67 +1466,6 @@
}
}
},
- "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" : {
@@ -1653,20 +1511,6 @@
}
}
},
- "DataProtectionOfficer" : {
- "type" : "object",
- "properties" : {
- "address" : {
- "type" : "string"
- },
- "email" : {
- "type" : "string"
- },
- "pec" : {
- "type" : "string"
- }
- }
- },
"DataProtectionOfficerRequest" : {
"type" : "object",
"properties" : {
@@ -1703,89 +1547,6 @@
}
}
},
- "Institution" : {
- "type" : "object",
- "properties" : {
- "id" : {
- "type" : "string"
- },
- "institutionType" : {
- "$ref" : "#/components/schemas/InstitutionType"
- },
- "taxCode" : {
- "type" : "string"
- },
- "subunitCode" : {
- "type" : "string"
- },
- "subunitType" : {
- "$ref" : "#/components/schemas/InstitutionPaSubunitType"
- },
- "origin" : {
- "$ref" : "#/components/schemas/Origin"
- },
- "originId" : {
- "type" : "string"
- },
- "city" : {
- "type" : "string"
- },
- "country" : {
- "type" : "string"
- },
- "county" : {
- "type" : "string"
- },
- "istatCode" : {
- "type" : "string"
- },
- "description" : {
- "type" : "string"
- },
- "digitalAddress" : {
- "type" : "string"
- },
- "address" : {
- "type" : "string"
- },
- "zipCode" : {
- "type" : "string"
- },
- "geographicTaxonomies" : {
- "type" : "array",
- "items" : {
- "$ref" : "#/components/schemas/GeographicTaxonomy"
- }
- },
- "rea" : {
- "type" : "string"
- },
- "shareCapital" : {
- "type" : "string"
- },
- "businessRegisterPlace" : {
- "type" : "string"
- },
- "supportEmail" : {
- "type" : "string"
- },
- "supportPhone" : {
- "type" : "string"
- },
- "imported" : {
- "type" : "boolean"
- },
- "paymentServiceProvider" : {
- "$ref" : "#/components/schemas/PaymentServiceProvider"
- },
- "dataProtectionOfficer" : {
- "$ref" : "#/components/schemas/DataProtectionOfficer"
- },
- "parentDescription" : {
- "type" : "string"
- }
- }
- },
"InstitutionBaseRequest" : {
"required" : [ "institutionType", "digitalAddress" ],
"type" : "object",
@@ -2477,26 +2238,6 @@
"enum" : [ "MANAGER", "DELEGATE", "SUB_DELEGATE", "OPERATOR", "ADMIN_EA" ],
"type" : "string"
},
- "PaymentServiceProvider" : {
- "type" : "object",
- "properties" : {
- "abiCode" : {
- "type" : "string"
- },
- "businessRegisterNumber" : {
- "type" : "string"
- },
- "legalRegisterNumber" : {
- "type" : "string"
- },
- "legalRegisterName" : {
- "type" : "string"
- },
- "vatNumberGroup" : {
- "type" : "boolean"
- }
- }
- },
"PaymentServiceProviderRequest" : {
"type" : "object",
"properties" : {
@@ -2650,47 +2391,13 @@
}
}
},
- "VerifyAggregateAppIoResponse" : {
- "type" : "object",
- "properties" : {
- "aggregates" : {
- "type" : "array",
- "items" : {
- "$ref" : "#/components/schemas/AggregateAppIo"
- }
- },
- "errors" : {
- "type" : "array",
- "items" : {
- "$ref" : "#/components/schemas/RowError"
- }
- }
- }
- },
"VerifyAggregateResponse" : {
"type" : "object",
"properties" : {
"aggregates" : {
"type" : "array",
"items" : {
- "$ref" : "#/components/schemas/Institution"
- }
- },
- "errors" : {
- "type" : "array",
- "items" : {
- "$ref" : "#/components/schemas/RowError"
- }
- }
- }
- },
- "VerifyAggregateSendResponse" : {
- "type" : "object",
- "properties" : {
- "aggregates" : {
- "type" : "array",
- "items" : {
- "$ref" : "#/components/schemas/AggregateSend"
+ "$ref" : "#/components/schemas/Aggregate"
}
},
"errors" : {
diff --git a/apps/onboarding-ms/src/main/docs/openapi.yaml b/apps/onboarding-ms/src/main/docs/openapi.yaml
index ea22186e1..f0bca40be 100644
--- a/apps/onboarding-ms/src/main/docs/openapi.yaml
+++ b/apps/onboarding-ms/src/main/docs/openapi.yaml
@@ -26,40 +26,6 @@ paths:
by processing the provided CSV file. This ensures that all entries meet the
required criteria before further processing.
operationId: verifyAppIoAggregatesCsv
- 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/VerifyAggregateAppIoResponse"
- "401":
- description: Not Authorized
- "403":
- description: Not Allowed
- security:
- - SecurityScheme: []
- /v1/aggregates/verification/prod-pagopa:
- post:
- tags:
- - Aggregates Controller
- summary: Validate the data related to the aggregated entities present in a CSV
- file
- description: Validates aggregated entity data specific to the PROD-Pagopa environment
- by processing the provided CSV file. This ensures that all entries meet the
- required criteria before further processing.
- operationId: verifyPagoPaAggregatesCsv
requestBody:
content:
multipart/form-data:
@@ -84,40 +50,6 @@ paths:
description: Not Allowed
security:
- SecurityScheme: []
- /v1/aggregates/verification/prod-pn:
- post:
- tags:
- - Aggregates Controller
- summary: Validate the data related to the aggregated entities present in a CSV
- file
- description: Validates aggregated entity data specific to the PROD-PN environment
- by processing the provided CSV file. This ensures that all entries meet the
- required criteria before further processing.
- operationId: verifySendAggregatesCsv
- 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/VerifyAggregateSendResponse"
- "401":
- description: Not Authorized
- "403":
- description: Not Allowed
- security:
- - SecurityScheme: []
/v1/notification/resend:
post:
tags:
@@ -1058,7 +990,7 @@ components:
type: string
otherNote:
type: string
- AggregateAppIo:
+ Aggregate:
type: object
properties:
subunitCode:
@@ -1075,6 +1007,12 @@ components:
type: string
address:
type: string
+ city:
+ type: string
+ county:
+ type: string
+ zipCode:
+ type: string
originId:
type: string
origin:
@@ -1130,46 +1068,6 @@ components:
type: string
syncAsyncMode:
type: string
- 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:
@@ -1199,15 +1097,6 @@ components:
type: string
publicServices:
type: boolean
- DataProtectionOfficer:
- type: object
- properties:
- address:
- type: string
- email:
- type: string
- pec:
- type: string
DataProtectionOfficerRequest:
type: object
properties:
@@ -1231,61 +1120,6 @@ components:
type: string
desc:
type: string
- Institution:
- type: object
- properties:
- id:
- type: string
- institutionType:
- $ref: "#/components/schemas/InstitutionType"
- taxCode:
- type: string
- subunitCode:
- type: string
- subunitType:
- $ref: "#/components/schemas/InstitutionPaSubunitType"
- origin:
- $ref: "#/components/schemas/Origin"
- originId:
- type: string
- city:
- type: string
- country:
- type: string
- county:
- type: string
- istatCode:
- type: string
- description:
- type: string
- digitalAddress:
- type: string
- address:
- type: string
- zipCode:
- type: string
- geographicTaxonomies:
- type: array
- items:
- $ref: "#/components/schemas/GeographicTaxonomy"
- rea:
- type: string
- shareCapital:
- type: string
- businessRegisterPlace:
- type: string
- supportEmail:
- type: string
- supportPhone:
- type: string
- imported:
- type: boolean
- paymentServiceProvider:
- $ref: "#/components/schemas/PaymentServiceProvider"
- dataProtectionOfficer:
- $ref: "#/components/schemas/DataProtectionOfficer"
- parentDescription:
- type: string
InstitutionBaseRequest:
required:
- institutionType
@@ -1818,19 +1652,6 @@ components:
- OPERATOR
- ADMIN_EA
type: string
- PaymentServiceProvider:
- type: object
- properties:
- abiCode:
- type: string
- businessRegisterNumber:
- type: string
- legalRegisterNumber:
- type: string
- legalRegisterName:
- type: string
- vatNumberGroup:
- type: boolean
PaymentServiceProviderRequest:
type: object
properties:
@@ -1939,35 +1760,13 @@ components:
$ref: "#/components/schemas/PartyRole"
productRole:
type: string
- VerifyAggregateAppIoResponse:
- type: object
- properties:
- aggregates:
- type: array
- items:
- $ref: "#/components/schemas/AggregateAppIo"
- errors:
- type: array
- items:
- $ref: "#/components/schemas/RowError"
VerifyAggregateResponse:
type: object
properties:
aggregates:
type: array
items:
- $ref: "#/components/schemas/Institution"
- errors:
- type: array
- items:
- $ref: "#/components/schemas/RowError"
- VerifyAggregateSendResponse:
- type: object
- properties:
- aggregates:
- type: array
- items:
- $ref: "#/components/schemas/AggregateSend"
+ $ref: "#/components/schemas/Aggregate"
errors:
type: array
items:
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 08c401460..6bd9f5868 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
@@ -2,9 +2,7 @@
import io.quarkus.security.Authenticated;
import io.smallrye.mutiny.Uni;
-import it.pagopa.selfcare.onboarding.model.VerifyAggregateAppIoResponse;
-import it.pagopa.selfcare.onboarding.model.VerifyAggregateResponse;
-import it.pagopa.selfcare.onboarding.model.VerifyAggregateSendResponse;
+import it.pagopa.selfcare.onboarding.model.*;
import it.pagopa.selfcare.onboarding.service.AggregatesService;
import jakarta.inject.Inject;
import jakarta.validation.constraints.NotNull;
@@ -34,36 +32,11 @@ public class AggregatesController {
@Path("/verification/prod-io")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.MULTIPART_FORM_DATA)
- public Uni verifyAppIoAggregatesCsv(@NotNull @RestForm("aggregates") File file){
+ public Uni verifyAppIoAggregatesCsv(@NotNull @RestForm("aggregates") File file){
return aggregatesService.validateAppIoAggregatesCsv(file);
}
- @Operation(
- summary = "Validate the data related to the aggregated entities present in a CSV file",
- description = "Validates aggregated entity data specific to the PROD-PN environment by processing the provided CSV file. This ensures that all entries meet the required criteria before further processing."
- )
- @POST
- @Path("/verification/prod-pn")
- @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",
- description = "Validates aggregated entity data specific to the PROD-Pagopa environment by processing the provided CSV file. This ensures that all entries meet the required criteria before further processing."
- )
- @POST
- @Path("/verification/prod-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/mapper/OnboardingMapper.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/mapper/OnboardingMapper.java
index d13224d4b..66d5f8928 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.Onboarding;
import it.pagopa.selfcare.onboarding.entity.User;
import it.pagopa.selfcare.onboarding.model.*;
-import org.mapstruct.Context;
-import org.mapstruct.Mapper;
-import org.mapstruct.Mapping;
-import org.mapstruct.Named;
+import org.mapstruct.*;
import org.openapi.quarkus.onboarding_functions_json.model.PartyRole;
import java.time.OffsetDateTime;
@@ -117,33 +114,10 @@ default OffsetDateTime toOffsetDateTime(java.time.LocalDateTime localDateTime) {
return localDateTime.atOffset(java.time.ZoneOffset.UTC);
}
- @Mapping(target = "errors", source = "rowErrorList")
- @Mapping(target = "aggregates", source = "validAggregates")
- VerifyAggregateResponse toVerifyAggregateResponse(AggregatesCsv aggregatesCsv);
+ Aggregate csvToAggregateAppIo(CsvAggregateAppIo csvAggregateAppIo);
- @Mapping(target = "errors", source = "rowErrorList")
- @Mapping(target = "aggregates", source = "validAggregates")
- VerifyAggregateAppIoResponse toVerifyAggregateAppIoResponse(AggregatesCsv aggregatesCsv);
- @Mapping(target = "errors", source = "rowErrorList")
- @Mapping(target = "aggregates", source = "validAggregates")
- VerifyAggregateSendResponse toVerifyAggregateSendResponse(AggregatesCsv aggregatesCsv);
-
- @Mapping(target = "users", source = ".")
- AggregateSend csvToAggregateSend(CsvAggregateSend csvAggregateSend);
-
- AggregateAppIo csvToAggregateAppIo(CsvAggregateAppIo csvAggregateIo);
-
- default List mapCsvAggregatesToAggregates(List csvAggregateSendList) {
- if (csvAggregateSendList == null) {
- return null;
- }
- return csvAggregateSendList.stream()
- .map(this::csvToAggregateSend)
- .collect(Collectors.toList());
- }
-
- default List mapCsvAppIoAggregatesToAggregates(List csvAggregateAppIoList) {
+ default List mapCsvAppIoAggregatesToAggregates(List csvAggregateAppIoList) {
if (csvAggregateAppIoList == null) {
return Collections.emptyList();
}
diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/AggregateAppIo.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/Aggregate.java
similarity index 81%
rename from apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/AggregateAppIo.java
rename to apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/Aggregate.java
index 6d45daeb8..a96ab2369 100644
--- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/AggregateAppIo.java
+++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/Aggregate.java
@@ -4,7 +4,7 @@
import wiremock.com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@Data
-public class AggregateAppIo {
+public class Aggregate {
private String subunitCode;
private String subunitType;
private String description;
@@ -12,6 +12,9 @@ public class AggregateAppIo {
private String taxCode;
private String vatNumber;
private String address;
+ private String city;
+ private String county;
+ private String zipCode;
private String originId;
private String origin;
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
deleted file mode 100644
index 8b3564ab5..000000000
--- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/AggregateSend.java
+++ /dev/null
@@ -1,20 +0,0 @@
-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/GeographicTaxonomyFromIstatCode.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/GeographicTaxonomyFromIstatCode.java
new file mode 100644
index 000000000..b7323ed25
--- /dev/null
+++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/GeographicTaxonomyFromIstatCode.java
@@ -0,0 +1,14 @@
+package it.pagopa.selfcare.onboarding.model;
+
+import lombok.Builder;
+import lombok.Getter;
+import lombok.Setter;
+
+@Builder
+@Getter
+@Setter
+public class GeographicTaxonomyFromIstatCode {
+
+ private String city;
+ private String county;
+}
diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/RowError.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/RowError.java
index 46ed9747b..db9514f7f 100644
--- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/RowError.java
+++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/RowError.java
@@ -1,7 +1,11 @@
package it.pagopa.selfcare.onboarding.model;
import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import lombok.ToString;
+@ToString
+@Data
public class RowError {
@NotNull
private Integer row;
@@ -14,28 +18,4 @@ public RowError(Integer row, String cf, String reason) {
this.cf = cf;
this.reason = reason;
}
-
- public Integer getRow() {
- return row;
- }
-
- public void setRow(Integer row) {
- this.row = row;
- }
-
- public String getCf() {
- return cf;
- }
-
- public void setCf(String cf) {
- this.cf = cf;
- }
-
- public String getReason() {
- return reason;
- }
-
- public void setReason(String reason) {
- this.reason = reason;
- }
}
diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/VerifyAggregateAppIoResponse.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/VerifyAggregateAppIoResponse.java
deleted file mode 100644
index 8cc05eaf4..000000000
--- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/VerifyAggregateAppIoResponse.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package it.pagopa.selfcare.onboarding.model;
-
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.util.List;
-@Data
-@AllArgsConstructor
-@NoArgsConstructor
-
-public class VerifyAggregateAppIoResponse {
- private List aggregates;
- private List errors;
-}
diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/VerifyAggregateResponse.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/VerifyAggregateResponse.java
index e8a032d80..ff071a182 100644
--- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/VerifyAggregateResponse.java
+++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/VerifyAggregateResponse.java
@@ -1,18 +1,14 @@
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.ArrayList;
import java.util.List;
@Data
-@AllArgsConstructor
-@NoArgsConstructor
public class VerifyAggregateResponse {
+ private List aggregates = new ArrayList<>();
+ private List errors = new ArrayList<>();
- private List aggregates;
- private List errors;
}
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
deleted file mode 100644
index e86dd5f86..000000000
--- a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/model/VerifyAggregateSendResponse.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package it.pagopa.selfcare.onboarding.model;
-
-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;
-
-}
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 c23d7932e..5716ebb2a 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
@@ -1,17 +1,12 @@
package it.pagopa.selfcare.onboarding.service;
import io.smallrye.mutiny.Uni;
-import it.pagopa.selfcare.onboarding.model.VerifyAggregateAppIoResponse;
-import it.pagopa.selfcare.onboarding.model.VerifyAggregateResponse;
-import it.pagopa.selfcare.onboarding.model.VerifyAggregateSendResponse;
+import it.pagopa.selfcare.onboarding.model.*;
import java.io.File;
public interface AggregatesService {
- Uni validateAppIoAggregatesCsv (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 c63ee21c6..4bfb7b27f 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
@@ -1,8 +1,5 @@
package it.pagopa.selfcare.onboarding.service;
-import com.opencsv.bean.CsvToBean;
-import com.opencsv.bean.CsvToBeanBuilder;
-import com.opencsv.enums.CSVReaderNullFieldIndicator;
import io.smallrye.mutiny.Multi;
import io.smallrye.mutiny.Uni;
import it.pagopa.selfcare.onboarding.common.InstitutionPaSubunitType;
@@ -14,26 +11,25 @@
import jakarta.inject.Inject;
import jakarta.ws.rs.WebApplicationException;
import lombok.extern.slf4j.Slf4j;
+import net.jodah.expiringmap.ExpiringMap;
import org.apache.commons.lang3.StringUtils;
import org.eclipse.microprofile.rest.client.inject.RestClient;
import org.jboss.logging.Logger;
import org.openapi.quarkus.party_registry_proxy_json.api.AooApi;
+import org.openapi.quarkus.party_registry_proxy_json.api.GeographicTaxonomiesApi;
import org.openapi.quarkus.party_registry_proxy_json.api.InstitutionApi;
import org.openapi.quarkus.party_registry_proxy_json.api.UoApi;
import org.openapi.quarkus.party_registry_proxy_json.model.AOOResource;
import org.openapi.quarkus.party_registry_proxy_json.model.InstitutionResource;
import org.openapi.quarkus.party_registry_proxy_json.model.UOResource;
-import java.io.BufferedReader;
import java.io.File;
-import java.io.StringReader;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.Files;
-import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
+import java.util.Optional;
+import java.util.concurrent.TimeUnit;
-import static com.opencsv.ICSVParser.DEFAULT_QUOTE_CHARACTER;
+import static it.pagopa.selfcare.onboarding.common.InstitutionPaSubunitType.UO;
@ApplicationScoped
@Slf4j
@@ -41,10 +37,6 @@ public class AggregatesServiceDefault implements AggregatesService {
private static final Logger LOG = Logger.getLogger(AggregatesServiceDefault.class);
-
- @Inject
- OnboardingMapper onboardingMapper;
-
@RestClient
@Inject
AooApi aooApi;
@@ -57,204 +49,161 @@ public class AggregatesServiceDefault implements AggregatesService {
@Inject
UoApi uoApi;
- public static final String ERROR_READING_CSV = "Error reading CSV: ";
- public static final String MALFORMED_ROW = "Riga malformata";
+ @RestClient
+ @Inject
+ GeographicTaxonomiesApi geographicTaxonomiesApi;
+
+ @Inject
+ OnboardingMapper onboardingMapper;
+
+ @Inject
+ CsvService csvService;
+
+ private final ExpiringMap expiringMap;
+
+ public AggregatesServiceDefault (){
+ this.expiringMap = ExpiringMap.builder()
+ .expiration(30, TimeUnit.MINUTES)
+ .build();
+ }
+
+ public static final String LOG_CSV_ROWS = "CSV file validated end: %s valid row and %s invalid row";
+ protected static final String DESCRIPTION_TO_REPLACE_REGEX = " - COMUNE";
public static final String ERROR_IPA = "Codice fiscale non presente su IPA";
public static final String ERROR_TAXCODE = "Il codice fiscale è obbligatorio";
- public static final String ERROR_DESCRIPTION = "La ragione sociale è obbligatoria";
public static final String ERROR_SUBUNIT_TYPE = "SubunitType non valido";
-
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";
+ private static final String PEC = "Pec";
@Override
- public Uni validateAppIoAggregatesCsv(File file) {
- AggregatesCsv aggregatesCsv = readItemsFromCsv(file, CsvAggregateAppIo.class);
+ public Uni validateAppIoAggregatesCsv(File file) {
+ AggregatesCsv aggregatesCsv = csvService.readItemsFromCsv(file, CsvAggregateAppIo.class);
List csvAggregates = aggregatesCsv.getCsvAggregateList();
- VerifyAggregateAppIoResponse verifyAggregateAppIoResponse = new VerifyAggregateAppIoResponse();
- verifyAggregateAppIoResponse.setAggregates(new ArrayList<>());
- verifyAggregateAppIoResponse.setErrors(new ArrayList<>());
+ VerifyAggregateResponse verifyAggregateAppIoResponse = new VerifyAggregateResponse();
return Multi.createFrom().iterable(csvAggregates)
- .onItem().transformToUniAndMerge(csvAggregateAppIo -> checkCsvAggregateAppIoAndFillAggregateOrErrorList(csvAggregateAppIo, verifyAggregateAppIoResponse))
+ .onItem().transformToUniAndMerge(csvAggregateAppIo ->
+ checkCsvAggregateAppIoAndFillAggregateOrErrorList(csvAggregateAppIo, verifyAggregateAppIoResponse))
.collect().asList()
.replaceWith(verifyAggregateAppIoResponse)
- .onItem().invoke(() -> LOG.infof("CSV file validated end: %s valid row and %s invalid row",
+ .onItem().invoke(() -> LOG.infof(LOG_CSV_ROWS,
verifyAggregateAppIoResponse.getAggregates().size(),
verifyAggregateAppIoResponse.getErrors().size()));
}
- @Override
- public Uni validateSendAggregatesCsv(File file) {
- AggregatesCsv aggregatesCsv = readItemsFromCsv(file, CsvAggregateSend.class);
- List csvAggregates = aggregatesCsv.getCsvAggregateList();
- return Multi.createFrom().iterable(csvAggregates)
- .onItem().transformToUniAndMerge(csvAggregate -> checkCsvAggregateSendAndFillAggregateOrErrorList(csvAggregate, aggregatesCsv))
- .collect().asList()
- .onItem().transform(list -> onboardingMapper.toVerifyAggregateSendResponse(aggregatesCsv))
- .onItem().invoke(() -> LOG.infof("CSV file validated end: %s valid row and %s invalid row",
- aggregatesCsv.getValidAggregates().size(),
- aggregatesCsv.getRowErrorList().size()));
- }
- @Override
- public Uni validatePagoPaAggregatesCsv(File file) {
- AggregatesCsv aggregatesCsv = readItemsFromCsv(file, CsvAggregatePagoPa.class);
- List csvAggregates = aggregatesCsv.getCsvAggregateList();
- return Multi.createFrom().iterable(csvAggregates)
- .onItem().transformToUniAndMerge(csvAggregate -> checkCsvAggregatePagoPaAndFillAggregateOrErrorList(csvAggregate, aggregatesCsv))
- .collect().asList()
- .onItem().transform(list -> onboardingMapper.toVerifyAggregateResponse(aggregatesCsv))
- .onItem().invoke(() -> LOG.infof("CSV file validated end: %s valid row and %s invalid row",
- aggregatesCsv.getValidAggregates().size(),
- aggregatesCsv.getRowErrorList().size()));
- }
-
- private Uni checkCsvAggregateAppIoAndFillAggregateOrErrorList(CsvAggregateAppIo csvAggregateAppIo, VerifyAggregateAppIoResponse verifyAggregateAppIoResponse) {
+ private Uni checkCsvAggregateAppIoAndFillAggregateOrErrorList(CsvAggregateAppIo csvAggregateAppIo, VerifyAggregateResponse verifyAggregateAppIoResponse) {
return checkCsvAggregateAppIo(csvAggregateAppIo)
.onItem().invoke(aggregateAppIo -> verifyAggregateAppIoResponse.getAggregates().add(aggregateAppIo))
.onFailure(ResourceNotFoundException.class)
.recoverWithUni(throwable -> {
- verifyAggregateAppIoResponse.getErrors().add(mapToAppIoErrorRow(csvAggregateAppIo, throwable));
+ verifyAggregateAppIoResponse.getErrors().add(mapToErrorRow(csvAggregateAppIo.getRowNumber(), csvAggregateAppIo.getTaxCode(), throwable));
return Uni.createFrom().nullItem();
})
.onFailure(InvalidRequestException.class)
.recoverWithUni(throwable -> {
- verifyAggregateAppIoResponse.getErrors().add(mapToAppIoErrorRow(csvAggregateAppIo, throwable));
+ verifyAggregateAppIoResponse.getErrors().add(mapToErrorRow(csvAggregateAppIo.getRowNumber(), csvAggregateAppIo.getTaxCode(), throwable));
return Uni.createFrom().nullItem();
})
.replaceWithVoid();
}
- private Uni checkCsvAggregateSendAndFillAggregateOrErrorList(Csv csv, AggregatesCsv 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 Uni checkCsvAggregatePagoPaAndFillAggregateOrErrorList(Csv csv, AggregatesCsv aggregatesCsv) {
- CsvAggregatePagoPa csvAggregate = (CsvAggregatePagoPa) csv;
-
- return checkCsvAggregatePagoPa(csvAggregate)
- .onItem().invoke(() -> aggregatesCsv.getValidAggregates().add(csvAggregate))
- .onFailure(ResourceNotFoundException.class).recoverWithUni(throwable -> mapToErrorRow(csvAggregate, throwable, aggregatesCsv))
- .onFailure(InvalidRequestException.class).recoverWithUni(throwable -> mapToErrorRow(csvAggregate, throwable, aggregatesCsv));
- }
-
- private static RowError mapToAppIoErrorRow(CsvAggregateAppIo csvAggregateAppIo, Throwable throwable) {
- return new RowError(csvAggregateAppIo.getRowNumber(), csvAggregateAppIo.getTaxCode(), throwable.getMessage());
+ private static RowError mapToErrorRow(Integer rowNumber, String taxCode, Throwable throwable) {
+ return new RowError(rowNumber, taxCode, throwable.getMessage());
}
- private static Uni mapToErrorRow(Csv csv, Throwable throwable, AggregatesCsv aggregatesCsv) {
- CsvAggregateAppIo csvAggregateAppIo = (CsvAggregateAppIo) csv;
- aggregatesCsv.getRowErrorList().add(new RowError(csvAggregateAppIo.getRowNumber(), csvAggregateAppIo.getTaxCode(), throwable.getMessage()));
- return Uni.createFrom().voidItem();
- }
-
- private Uni checkCsvAggregateAppIo(CsvAggregateAppIo csvAggregateAppIo) {
+ private Uni checkCsvAggregateAppIo(CsvAggregateAppIo csvAggregateAppIo) {
return checkRequiredFieldsAppIo(csvAggregateAppIo)
- .onItem().transformToUni(unused -> retrieveDataFromIpa(csvAggregateAppIo));
- }
-
- private Uni checkCsvAggregateSend(CsvAggregateSend csvAggregate) {
- return checkRequiredFieldsSend(csvAggregate)
- .onItem().transformToUni(unused -> checkSubunitTypeSend(csvAggregate));
- }
-
- private Uni checkCsvAggregatePagoPa(CsvAggregatePagoPa csvAggregate) {
- return checkRequiredFieldsPagoPa(csvAggregate);
+ .onItem().transformToUni(unused -> retrieveDataFromIpa(onboardingMapper.csvToAggregateAppIo(csvAggregateAppIo)));
}
- private Uni retrieveDataFromIpa(CsvAggregateAppIo csvAggregateAppIo) {
- AggregateAppIo aggregateAppIo = onboardingMapper.csvToAggregateAppIo(csvAggregateAppIo);
- aggregateAppIo.setOrigin(InstitutionResource.OriginEnum.IPA.value());
+ private Uni retrieveDataFromIpa(Aggregate aggregate) {
+ aggregate.setOrigin(InstitutionResource.OriginEnum.IPA.value());
- if (StringUtils.isEmpty(aggregateAppIo.getSubunitType())) {
- return institutionApi.findInstitutionUsingGET(csvAggregateAppIo.getTaxCode(), null, null)
+ if (Objects.isNull(aggregate.getSubunitType())){
+ return institutionApi.findInstitutionUsingGET(aggregate.getTaxCode(), null, null)
.onFailure(this::checkIfNotFound).recoverWithUni(Uni.createFrom().failure(new ResourceNotFoundException(ERROR_IPA)))
- .onItem().transform(institutionResource -> mapIpaFieldForPA(institutionResource, aggregateAppIo));
- } else if (InstitutionPaSubunitType.AOO.name().equals(aggregateAppIo.getSubunitType())) {
- return aooApi.findByUnicodeUsingGET(aggregateAppIo.getSubunitCode(), null)
+ .onItem().transformToUni(institutionResource -> retrieveCityCountyAndMapIpaFieldForPA(institutionResource, aggregate));
+ } else if (InstitutionPaSubunitType.AOO.name().equalsIgnoreCase(aggregate.getSubunitType())) {
+ return aooApi.findByUnicodeUsingGET(aggregate.getSubunitCode(), null)
.onFailure(this::checkIfNotFound)
.recoverWithUni(Uni.createFrom().failure(new ResourceNotFoundException(ERROR_IPA)))
- .onItem().transform(aooResource -> mapIpaFieldForAOO(aooResource, aggregateAppIo));
- } else if (InstitutionPaSubunitType.UO.name().equals(aggregateAppIo.getSubunitType())) {
- return uoApi.findByUnicodeUsingGET1(aggregateAppIo.getSubunitCode(), null)
+ .onItem().transformToUni(aooResource -> retrieveCityCountyAndMapIpaFieldForAOO(aooResource, aggregate));
+ } else if (UO.name().equalsIgnoreCase(aggregate.getSubunitType())) {
+ return uoApi.findByUnicodeUsingGET1(aggregate.getSubunitCode(), null)
.onFailure(this::checkIfNotFound)
.recoverWithUni(Uni.createFrom().failure(new ResourceNotFoundException(ERROR_IPA)))
- .onItem().transform(uoResource -> mapIpaFieldForUO(uoResource, aggregateAppIo));
+ .onItem().transformToUni(uoResource -> retrieveCityCountyAndMapIpaFieldForUO(uoResource, aggregate));
} else {
return Uni.createFrom().failure(new InvalidRequestException(ERROR_SUBUNIT_TYPE));
}
}
- private AggregateAppIo mapIpaFieldForUO(UOResource uoResource, AggregateAppIo aggregateAppIo) {
- if (Objects.equals(uoResource.getTipoMail1(), "Pec")) {
- aggregateAppIo.setDigitalAddress(uoResource.getMail1());
- }
- aggregateAppIo.setDescription(uoResource.getDenominazioneEnte());
- aggregateAppIo.setAddress(uoResource.getIndirizzo());
- aggregateAppIo.setOriginId(uoResource.getCodiceIpa());
- return aggregateAppIo;
+ private Uni retrieveCityCountyAndMapIpaFieldForUO(UOResource uoResource, Aggregate aggregateAppIo) {
+ return retrieveGeographicTaxonomies(uoResource.getCodiceComuneISTAT())
+ .onItem().transformToUni(geographicTaxonomyResource -> {
+ mapIpaField(uoResource.getDenominazioneEnte(), uoResource.getIndirizzo(), uoResource.getCap(), null, aggregateAppIo, geographicTaxonomyResource);
+ return retrieveDigitalAddress(uoResource.getTipoMail1(), uoResource.getMail1(), uoResource.getCodiceFiscaleEnte(), aggregateAppIo);
+ });
}
- private AggregateAppIo mapIpaFieldForAOO(AOOResource aooResource, AggregateAppIo aggregateAppIo) {
- if (Objects.equals(aooResource.getTipoMail1(), "Pec")) {
- aggregateAppIo.setDigitalAddress(aooResource.getMail1());
- }
- aggregateAppIo.setDescription(aooResource.getDenominazioneEnte());
- aggregateAppIo.setAddress(aooResource.getIndirizzo());
- aggregateAppIo.setOriginId(aooResource.getCodiceIpa());
- return aggregateAppIo;
+ private Uni retrieveCityCountyAndMapIpaFieldForAOO(AOOResource aooResource, Aggregate aggregateAppIo) {
+ return retrieveGeographicTaxonomies(aooResource.getCodiceComuneISTAT())
+ .onItem().transformToUni(geographicTaxonomyResource -> {
+ mapIpaField(aooResource.getDenominazioneEnte(), aooResource.getIndirizzo(), aooResource.getCap(), null, aggregateAppIo, geographicTaxonomyResource);
+ return retrieveDigitalAddress(aooResource.getTipoMail1(), aooResource.getMail1(), aooResource.getCodiceFiscaleEnte(), aggregateAppIo);
+ });
}
- private AggregateAppIo mapIpaFieldForPA(InstitutionResource institutionResource, AggregateAppIo aggregateAppIo) {
- aggregateAppIo.setDigitalAddress(institutionResource.getDigitalAddress());
- aggregateAppIo.setDescription(institutionResource.getDescription());
- aggregateAppIo.setAddress(institutionResource.getAddress());
- aggregateAppIo.setOriginId(institutionResource.getOriginId());
- return aggregateAppIo;
+ private Uni retrieveCityCountyAndMapIpaFieldForPA(InstitutionResource institutionResource, Aggregate aggregateAppIo) {
+ return retrieveGeographicTaxonomies(institutionResource.getIstatCode())
+ .onItem().transform(geographicTaxonomyResource -> {
+ mapIpaField(institutionResource.getDescription(), institutionResource.getAddress(), institutionResource.getZipCode(), institutionResource.getOriginId(), aggregateAppIo, geographicTaxonomyResource);
+ aggregateAppIo.setDigitalAddress(institutionResource.getDigitalAddress());
+ return aggregateAppIo;
+ });
}
- 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)))
- .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());
+ private Uni retrieveDigitalAddress(String mailType, String mail, String taxCode, Aggregate aggregateAppIo) {
+ if (Objects.equals(mailType, PEC)) {
+ aggregateAppIo.setDigitalAddress(mail);
+ return Uni.createFrom().item(aggregateAppIo);
} else {
- return Uni.createFrom().failure(new InvalidRequestException(ERROR_SUBUNIT_TYPE));
+ return institutionApi.findInstitutionUsingGET(taxCode, null, null)
+ .onItem().invoke(institutionResource -> aggregateAppIo.setDigitalAddress(institutionResource.getDigitalAddress()))
+ .replaceWith(aggregateAppIo);
}
}
+ private static void mapIpaField(String description, String address, String zipCode, String originId, Aggregate aggregateAppIo, GeographicTaxonomyFromIstatCode geographicTaxonomyFromIstatCode) {
+ if(Objects.nonNull(geographicTaxonomyFromIstatCode)) {
+ aggregateAppIo.setCounty(geographicTaxonomyFromIstatCode.getCounty());
+ aggregateAppIo.setCity(geographicTaxonomyFromIstatCode.getCity());
+ }
+ aggregateAppIo.setDescription(description);
+ aggregateAppIo.setAddress(address);
+ aggregateAppIo.setZipCode(zipCode);
+ aggregateAppIo.setOriginId(originId);
+ }
+
+ private Uni retrieveGeographicTaxonomies(String codiceIstat) {
+ GeographicTaxonomyFromIstatCode geographicTaxonomyFromIstatCode = expiringMap.get(codiceIstat);
+
+ if (Objects.isNull(geographicTaxonomyFromIstatCode)) {
+ return geographicTaxonomiesApi.retrieveGeoTaxonomiesByCodeUsingGET(codiceIstat)
+ .map(geographicTaxonomyResource -> GeographicTaxonomyFromIstatCode.builder()
+ .city(Optional.ofNullable(geographicTaxonomyResource.getDesc()).orElse("").replace(DESCRIPTION_TO_REPLACE_REGEX, ""))
+ .county(geographicTaxonomyResource.getProvinceAbbreviation())
+ .build())
+ .onItem().invoke(entity -> expiringMap.put(codiceIstat, entity));
+ }
+ return Uni.createFrom().item(geographicTaxonomyFromIstatCode);
+ }
+
private boolean checkIfNotFound(Throwable throwable) {
return throwable instanceof WebApplicationException webApplicationException && webApplicationException.getResponse().getStatus() == 404;
}
@@ -271,126 +220,4 @@ private Uni checkRequiredFieldsAppIo(CsvAggregateAppIo csvAggregateAppIo)
}
return Uni.createFrom().voidItem();
}
-
- private Uni checkRequiredFieldsSend(CsvAggregateSend csvAggregate) {
-
- if (StringUtils.isEmpty(csvAggregate.getDescription())) {
- return Uni.createFrom().failure(new InvalidRequestException(ERROR_DESCRIPTION));
- } 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.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(csvAggregate.getDescription())) {
- return Uni.createFrom().failure(new InvalidRequestException(ERROR_DESCRIPTION));
- } 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.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();
- }
-
- public AggregatesCsv readItemsFromCsv(File file, Class csv) {
- List resultList = new ArrayList<>();
- List errors = new ArrayList<>();
-
- try {
- byte[] fileBytes = Files.readAllBytes(file.toPath());
- StringReader stringReader = new StringReader(new String(fileBytes, StandardCharsets.UTF_8));
- BufferedReader bufferedReader = new BufferedReader(stringReader);
- String skip = bufferedReader.readLine();
- log.info("Skip header: " + skip);
- int lineNumber = 1;
- String nextLine;
-
- while ((nextLine = bufferedReader.readLine()) != null) {
- if (!nextLine.startsWith("(*")) {
- parseLine(nextLine, lineNumber, resultList, errors, csv);
- lineNumber++;
- }
- }
-
- return new AggregatesCsv(resultList, errors);
-
- } catch (Exception e) {
- log.error(ERROR_READING_CSV + e.getMessage(), e);
- throw new InvalidRequestException(ERROR_READING_CSV + e.getMessage());
- }
- }
-
- 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), csv);
- List csvAggregateList = csvToBean.parse();
- if (!csvAggregateList.isEmpty()) {
- Csv csvAggregate = csvAggregateList.get(0);
- csvAggregate.setRowNumber(lineNumber);
- resultList.add(csvAggregateList.get(0));
- }
- log.debug("Row " + lineNumber + ": ");
- } catch (Exception e) {
- log.error("Error to the row " + lineNumber + ": " + e.getMessage());
- errors.add(new RowError(lineNumber, "", MALFORMED_ROW));
- }
- }
-
- 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);
- csvToBeanBuilder.withFieldAsNull(CSVReaderNullFieldIndicator.EMPTY_SEPARATORS);
- csvToBeanBuilder.withThrowExceptions(false);
- return csvToBeanBuilder.build();
- }
}
diff --git a/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/CsvService.java b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/CsvService.java
new file mode 100644
index 000000000..33483dba8
--- /dev/null
+++ b/apps/onboarding-ms/src/main/java/it/pagopa/selfcare/onboarding/service/CsvService.java
@@ -0,0 +1,85 @@
+package it.pagopa.selfcare.onboarding.service;
+
+import com.opencsv.bean.CsvToBean;
+import com.opencsv.bean.CsvToBeanBuilder;
+import com.opencsv.enums.CSVReaderNullFieldIndicator;
+import it.pagopa.selfcare.onboarding.exception.InvalidRequestException;
+import it.pagopa.selfcare.onboarding.model.AggregatesCsv;
+import it.pagopa.selfcare.onboarding.model.Csv;
+import it.pagopa.selfcare.onboarding.model.RowError;
+import jakarta.enterprise.context.ApplicationScoped;
+import lombok.extern.slf4j.Slf4j;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.StringReader;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.util.ArrayList;
+import java.util.List;
+
+import static com.opencsv.ICSVParser.DEFAULT_QUOTE_CHARACTER;
+
+@ApplicationScoped
+@Slf4j
+public class CsvService {
+
+ public static final String ERROR_READING_CSV = "Error reading CSV: ";
+ public static final String MALFORMED_ROW = "Riga malformata";
+
+ public AggregatesCsv readItemsFromCsv(File file, Class csv) {
+ List resultList = new ArrayList<>();
+ List errors = new ArrayList<>();
+
+ try {
+ byte[] fileBytes = Files.readAllBytes(file.toPath());
+ StringReader stringReader = new StringReader(new String(fileBytes, StandardCharsets.UTF_8));
+ BufferedReader bufferedReader = new BufferedReader(stringReader);
+ String skip = bufferedReader.readLine();
+ log.info("Skip header: " + skip);
+ int lineNumber = 1;
+ String nextLine;
+
+ while ((nextLine = bufferedReader.readLine()) != null) {
+ if (!nextLine.startsWith("(*")) {
+ parseLine(nextLine, lineNumber, resultList, errors, csv);
+ lineNumber++;
+ }
+ }
+
+ return new AggregatesCsv(resultList, errors);
+
+ } catch (Exception e) {
+ log.error(ERROR_READING_CSV + e.getMessage(), e);
+ throw new InvalidRequestException(ERROR_READING_CSV + e.getMessage());
+ }
+ }
+
+ 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), csv);
+ List csvAggregateList = csvToBean.parse();
+ if (!csvAggregateList.isEmpty()) {
+ Csv csvAggregate = csvAggregateList.get(0);
+ csvAggregate.setRowNumber(lineNumber);
+ resultList.add(csvAggregateList.get(0));
+ }
+ log.debug("Row " + lineNumber + ": ");
+ } catch (Exception e) {
+ log.error("Error to the row " + lineNumber + ": " + e.getMessage());
+ errors.add(new RowError(lineNumber, "", MALFORMED_ROW));
+ }
+ }
+
+ 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);
+ csvToBeanBuilder.withFieldAsNull(CSVReaderNullFieldIndicator.EMPTY_SEPARATORS);
+ csvToBeanBuilder.withThrowExceptions(false);
+ return csvToBeanBuilder.build();
+ }
+}
diff --git a/apps/onboarding-ms/src/main/resources/application.properties b/apps/onboarding-ms/src/main/resources/application.properties
index 7adc529c6..245639580 100644
--- a/apps/onboarding-ms/src/main/resources/application.properties
+++ b/apps/onboarding-ms/src/main/resources/application.properties
@@ -74,6 +74,7 @@ quarkus.rest-client."org.openapi.quarkus.party_registry_proxy_json.api.UoApi".ur
quarkus.rest-client."org.openapi.quarkus.party_registry_proxy_json.api.AooApi".url=${MS_PARTY_REGISTRY_URL:http://localhost:8080}
quarkus.rest-client."org.openapi.quarkus.party_registry_proxy_json.api.InfocamerePdndApi".url=${MS_PARTY_REGISTRY_URL:http://localhost:8080}
quarkus.rest-client."org.openapi.quarkus.party_registry_proxy_json.api.InstitutionApi".url=${MS_PARTY_REGISTRY_URL:http://localhost:8080}
+quarkus.rest-client."org.openapi.quarkus.party_registry_proxy_json.api.GeographicTaxonomiesApi".url=${MS_PARTY_REGISTRY_URL:http://localhost:8080}
quarkus.rest-client."org.openapi.quarkus.core_json.api.InstitutionApi".url=${MS_CORE_URL:http://localhost:8080}
quarkus.rest-client."org.openapi.quarkus.core_json.api.InstitutionApi".read-timeout=60000
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 072a13e39..89ac6a37a 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
@@ -8,9 +8,7 @@
import io.quarkus.test.security.TestSecurity;
import io.restassured.http.ContentType;
import io.smallrye.mutiny.Uni;
-import it.pagopa.selfcare.onboarding.model.VerifyAggregateAppIoResponse;
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;
@@ -29,12 +27,13 @@ class AggregatesControllerTest {
@InjectMock
AggregatesService aggregatesService;
+ @TestSecurity(user = "userJwt")
@Test
void verifyAggregatesCsv_succeeds() {
File testFile = new File("src/test/resources/aggregates-appio.csv");
when(aggregatesService.validateAppIoAggregatesCsv(any()))
- .thenReturn(Uni.createFrom().item(new VerifyAggregateAppIoResponse()));
+ .thenReturn(Uni.createFrom().item(new VerifyAggregateResponse()));
given()
.when()
@@ -48,42 +47,4 @@ void verifyAggregatesCsv_succeeds() {
.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/mapper/OnboardingMapperTest.java b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/mapper/OnboardingMapperTest.java
index 5b0910f1b..83b196119 100644
--- a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/mapper/OnboardingMapperTest.java
+++ b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/mapper/OnboardingMapperTest.java
@@ -104,32 +104,17 @@ void toOffsetDateTime_withNullLocalDateTime_returnsNull() {
}
@Test
- void mapCsvAggregatesToAggregates_withValidList_returnsMappedList() {
- List input = List.of(new CsvAggregateSend());
- List result = mapper.mapCsvAggregatesToAggregates(input);
- assertNotNull(result);
- assertEquals(1, result.size());
- }
-
- @Test
- void mapCsvAggregatesToAggregates_withNullList_returnsNull() {
- List input = null;
- List result = mapper.mapCsvAggregatesToAggregates(input);
- assertNull(result);
- }
-
- @Test
- void mapCsvAppIoAggregatesToAggregates_withValidList_returnsMappedList() {
+ void mapCsvAppIoAggregateToAggregates_withValidList_returnsMappedList() {
List input = List.of(new CsvAggregateAppIo());
- List result = mapper.mapCsvAppIoAggregatesToAggregates(input);
+ List result = mapper.mapCsvAppIoAggregatesToAggregates(input);
assertNotNull(result);
assertEquals(1, result.size());
}
@Test
- void mapCsvAppIoAggregatesToAggregates_withNullList_returnsEmptyList() {
+ void mapCsvAppIoAggregateToAggregates_withNullList_returnsEmptyList() {
List input = null;
- List result = mapper.mapCsvAppIoAggregatesToAggregates(input);
+ List result = mapper.mapCsvAppIoAggregatesToAggregates(input);
assertNotNull(result);
assertTrue(result.isEmpty());
}
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
deleted file mode 100644
index ed99bae8b..000000000
--- a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/model/CsvAggregatePagoPaTest.java
+++ /dev/null
@@ -1,78 +0,0 @@
-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
deleted file mode 100644
index 18ae8267d..000000000
--- a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/model/CsvAggregateSendTest.java
+++ /dev/null
@@ -1,87 +0,0 @@
-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
deleted file mode 100644
index a02c8fbca..000000000
--- a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/model/VerifyAggregateSendResponseTest.java
+++ /dev/null
@@ -1,68 +0,0 @@
-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<>();
-
- AggregateSend aggregateSend = new 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");
-
- AggregateUser user = new 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());
- }
-}
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 b129d1e7a..76b486120 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
@@ -2,34 +2,38 @@
import io.quarkus.test.InjectMock;
import io.quarkus.test.junit.QuarkusTest;
+import io.quarkus.test.junit.TestProfile;
import io.quarkus.test.vertx.RunOnVertxContext;
import io.smallrye.mutiny.Uni;
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.*;
+import it.pagopa.selfcare.onboarding.model.Aggregate;
+import it.pagopa.selfcare.onboarding.model.RowError;
+import it.pagopa.selfcare.onboarding.model.VerifyAggregateResponse;
+import it.pagopa.selfcare.onboarding.service.profile.OnboardingTestProfile;
import jakarta.inject.Inject;
import jakarta.ws.rs.core.Response;
import org.eclipse.microprofile.rest.client.inject.RestClient;
import org.jboss.resteasy.reactive.client.api.WebClientApplicationException;
+import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.openapi.quarkus.party_registry_proxy_json.api.AooApi;
+import org.openapi.quarkus.party_registry_proxy_json.api.GeographicTaxonomiesApi;
import org.openapi.quarkus.party_registry_proxy_json.api.InstitutionApi;
import org.openapi.quarkus.party_registry_proxy_json.api.UoApi;
import org.openapi.quarkus.party_registry_proxy_json.model.AOOResource;
+import org.openapi.quarkus.party_registry_proxy_json.model.GeographicTaxonomyResource;
import org.openapi.quarkus.party_registry_proxy_json.model.InstitutionResource;
import org.openapi.quarkus.party_registry_proxy_json.model.UOResource;
import java.io.File;
-import java.util.ArrayList;
import java.util.List;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.*;
@QuarkusTest
+@TestProfile(OnboardingTestProfile.class)
class AggregatesServiceDefaultTest {
@Inject
@@ -38,6 +42,10 @@ class AggregatesServiceDefaultTest {
@Inject
OnboardingMapper onboardingMapper;
+ @RestClient
+ @InjectMock
+ GeographicTaxonomiesApi geographicTaxonomiesApi;
+
@RestClient
@InjectMock
AooApi aooApi;
@@ -46,198 +54,134 @@ class AggregatesServiceDefaultTest {
@InjectMock
InstitutionApi institutionApi;
+ @Inject
+ CsvService csvService;
+
@RestClient
@InjectMock
UoApi uoApi;
@Test
@RunOnVertxContext
- void validateAggregatesAppIo(){
- File testFile = new File("src/test/resources/aggregates-appio.csv");
-
- UOResource uoResource = new UOResource();
- uoResource.setMail1("pec@Pec");
- uoResource.setTipoMail1("Pec");
- uoResource.setDenominazioneEnte("denominazione");
- uoResource.setIndirizzo("Palazzo Vecchio Piazza Della Signoria");
-
- AOOResource aooResource = new AOOResource();
- aooResource.setTipoMail1("Pec");
- aooResource.setMail1("pec@Pec");
- aooResource.setCodiceUniAoo("18SU3R");
- aooResource.setIndirizzo("Palazzo Vecchio Piazza Della Signoria");
-
- when(aooApi.findByUnicodeUsingGET("18SU3R", null)).thenReturn(Uni.createFrom().item(aooResource));
- when(institutionApi.findInstitutionUsingGET("1307110484", null, null)).thenReturn(Uni.createFrom().item(new InstitutionResource()));
- when(uoApi.findByUnicodeUsingGET1("18SU3R", null)).thenReturn(Uni.createFrom().item(uoResource));
-
- aggregatesServiceDefault.validateAppIoAggregatesCsv(testFile)
- .subscribe().withSubscriber(UniAssertSubscriber.create())
- .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();
- }
-
-
- @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);
-
UOResource uoResource = new UOResource();
uoResource.setMail1("pec@Pec");
uoResource.setTipoMail1("Pec");
+ uoResource.setCodiceUniAoo("18SU3S");
+ uoResource.setCap("00100");
uoResource.setDenominazioneEnte("denominazione");
uoResource.setIndirizzo("Palazzo Vecchio Piazza Della Signoria");
+ uoResource.setCodiceComuneISTAT("123");
AOOResource aooResource = new AOOResource();
- aooResource.setTipoMail1("Pec");
+ aooResource.setTipoMail1("Altro");
aooResource.setMail1("pec@Pec");
- aooResource.setCodiceUniAoo("18SU3R");
+ aooResource.setCodiceUniAoo("18SU3S");
+ aooResource.setDenominazioneEnte("denominazione");
+ aooResource.setCap("00100");
+ aooResource.setCodiceFiscaleEnte("1307110484");
aooResource.setIndirizzo("Palazzo Vecchio Piazza Della Signoria");
+ aooResource.setCodiceComuneISTAT("123");
+
+ InstitutionResource institutionResource = mock(InstitutionResource.class);
+ when(institutionResource.getIstatCode()).thenReturn("123");
+ when(institutionResource.getOriginId()).thenReturn("test");
+ when(institutionResource.getDigitalAddress()).thenReturn("pec@Pec");
+
+ GeographicTaxonomyResource geographicTaxonomyResource = new GeographicTaxonomyResource();
+ geographicTaxonomyResource.setCode("123");
+ geographicTaxonomyResource.setDesc("città");
+ geographicTaxonomyResource.setProvinceAbbreviation("Provincia");
WebClientApplicationException webClientApplicationException = mock(WebClientApplicationException.class);
Response response = mock(Response.class);
when(webClientApplicationException.getResponse()).thenReturn(response);
when(response.getStatus()).thenReturn(404);
- AggregatesCsv aggregatesCsv = aggregatesServiceDefault.readItemsFromCsv(file, CsvAggregateAppIo.class);
+ when(aooApi.findByUnicodeUsingGET("18SU3S", null)).thenReturn(Uni.createFrom().item(aooResource));
when(aooApi.findByUnicodeUsingGET("18SU3R", null)).thenReturn(Uni.createFrom().failure(webClientApplicationException));
- when(institutionApi.findInstitutionUsingGET("1307110484", null, null)).thenReturn(Uni.createFrom().item(new InstitutionResource()));
+ when(institutionApi.findInstitutionUsingGET("1307110484", null, null)).thenReturn(Uni.createFrom().item(institutionResource));
when(uoApi.findByUnicodeUsingGET1("18SU3R", null)).thenReturn(Uni.createFrom().item(uoResource));
+ when(geographicTaxonomiesApi.retrieveGeoTaxonomiesByCodeUsingGET("123")).thenReturn(Uni.createFrom().item(geographicTaxonomyResource));
- Uni result = aggregatesServiceDefault.validateAppIoAggregatesCsv(file);
-
- VerifyAggregateAppIoResponse verifyAggregateResponse = result.await().indefinitely();
- assertNotNull(verifyAggregateResponse.getAggregates());
- assertNotNull(aggregatesCsv.getValidAggregates());
-
- assertTrue(!aggregatesCsv.getCsvAggregateList().isEmpty());
- assertTrue(aggregatesCsv.getRowErrorList().isEmpty());
-
- assertNotNull(aggregatesCsv.getCsvAggregateList().get(0).getRowNumber());
- assertNotNull(aggregatesCsv.getCsvAggregateList().get(0).getSubunitCode());
- assertNotNull(aggregatesCsv.getCsvAggregateList().get(0).getTaxCode());
- assertNotNull(aggregatesCsv.getCsvAggregateList().get(0).getSubunitType());
- assertNotNull(aggregatesCsv.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");
+ VerifyAggregateResponse verifyAggregateResponse = mockResponseForIO();
- CsvAggregateSend csvAggregate = new CsvAggregateSend();
- csvAggregate.setSubunitType("AOO");
- csvAggregate.setSubunitCode("AOO_CODE");
-
- List csvAggregateList = new ArrayList<>();
- csvAggregateList.add(csvAggregate);
-
- AggregatesCsv aggregatesCsv = 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.validateSendAggregatesCsv(file);
-
- VerifyAggregateSendResponse verifyAggregateResponse = result.await().indefinitely();
- assertNotNull(verifyAggregateResponse);
- assertNotNull(aggregatesCsv.getValidAggregates());
-
- assertTrue(!aggregatesCsv.getCsvAggregateList().isEmpty());
- assertTrue(aggregatesCsv.getRowErrorList().isEmpty());
-
- assertNotNull(((CsvAggregateSend) aggregatesCsv.getCsvAggregateList().get(0)).getAddress());
- assertNotNull(((CsvAggregateSend) aggregatesCsv.getCsvAggregateList().get(0)).getCity());
- assertNotNull(((CsvAggregateSend) aggregatesCsv.getCsvAggregateList().get(0)).getPec());
- assertNotNull(((CsvAggregateSend) aggregatesCsv.getCsvAggregateList().get(0)).getDescription());
- assertNotNull(((CsvAggregateSend) aggregatesCsv.getCsvAggregateList().get(0)).getRowNumber());
- assertNotNull(((CsvAggregateSend) aggregatesCsv.getCsvAggregateList().get(0)).getSubunitCode());
- assertNotNull(((CsvAggregateSend) aggregatesCsv.getCsvAggregateList().get(0)).getTaxCode());
- assertNotNull(((CsvAggregateSend) aggregatesCsv.getCsvAggregateList().get(0)).getProvince());
- assertNotNull(((CsvAggregateSend) aggregatesCsv.getCsvAggregateList().get(0)).getSubunitType());
- assertNotNull(((CsvAggregateSend) aggregatesCsv.getCsvAggregateList().get(0)).getVatNumber());
+ UniAssertSubscriber resp = aggregatesServiceDefault.validateAppIoAggregatesCsv(file)
+ .subscribe().withSubscriber(UniAssertSubscriber.create())
+ .assertCompleted();
- verify(aooApi,times(0)).findByUnicodeUsingGET("1437190414", null);
- verify(institutionApi,times(0)).findInstitutionUsingGET("00297110389", null, null);
- verify(uoApi,times(0)).findByUnicodeUsingGET1("4551120274", null);
+ Assertions.assertEquals(3, resp.getItem().getAggregates().size());
+ Assertions.assertEquals(verifyAggregateResponse.getAggregates().get(0), resp.getItem().getAggregates().get(0));
+ Assertions.assertEquals(verifyAggregateResponse.getAggregates().get(1), resp.getItem().getAggregates().get(1));
+ Assertions.assertEquals(verifyAggregateResponse.getAggregates().get(2), resp.getItem().getAggregates().get(2));
+ Assertions.assertEquals(6, resp.getItem().getErrors().size());
+ Assertions.assertEquals(verifyAggregateResponse.getErrors().get(0), resp.getItem().getErrors().get(0));
+ Assertions.assertEquals(verifyAggregateResponse.getErrors().get(1), resp.getItem().getErrors().get(1));
+ Assertions.assertEquals(verifyAggregateResponse.getErrors().get(2), resp.getItem().getErrors().get(2));
+ Assertions.assertEquals(verifyAggregateResponse.getErrors().get(3), resp.getItem().getErrors().get(3));
+
+ verify(geographicTaxonomiesApi,times(1)).retrieveGeoTaxonomiesByCodeUsingGET("123");
+ verify(aooApi,times(1)).findByUnicodeUsingGET("18SU3R", null);
+ verify(aooApi,times(1)).findByUnicodeUsingGET("18SU3S", null);
+ verify(institutionApi,times(2)).findInstitutionUsingGET("1307110484", null, 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);
-
- AggregatesCsv aggregatesCsv = aggregatesServiceDefault.readItemsFromCsv(file, CsvAggregatePagoPa.class);
- Uni result = aggregatesServiceDefault.validatePagoPaAggregatesCsv(file);
-
- VerifyAggregateResponse verifyAggregateResponse = result.await().indefinitely();
- assertNotNull(verifyAggregateResponse);
- assertNotNull(aggregatesCsv.getValidAggregates());
-
- assertTrue(!aggregatesCsv.getCsvAggregateList().isEmpty());
- assertTrue(aggregatesCsv.getRowErrorList().isEmpty());
-
- assertNotNull(((CsvAggregatePagoPa) aggregatesCsv.getCsvAggregateList().get(0)).getAddress());
- assertNotNull(((CsvAggregatePagoPa) aggregatesCsv.getCsvAggregateList().get(0)).getCity());
- assertNotNull(((CsvAggregatePagoPa) aggregatesCsv.getCsvAggregateList().get(0)).getPec());
- assertNotNull(((CsvAggregatePagoPa) aggregatesCsv.getCsvAggregateList().get(0)).getDescription());
- assertNotNull(((CsvAggregatePagoPa) aggregatesCsv.getCsvAggregateList().get(0)).getRowNumber());
- assertNotNull(((CsvAggregatePagoPa) aggregatesCsv.getCsvAggregateList().get(0)).getTaxCode());
- assertNotNull(((CsvAggregatePagoPa) aggregatesCsv.getCsvAggregateList().get(0)).getProvince());
- assertNotNull(((CsvAggregatePagoPa) aggregatesCsv.getCsvAggregateList().get(0)).getVatNumber());
-
+ private static VerifyAggregateResponse mockResponseForIO() {
+ VerifyAggregateResponse verifyAggregateResponse = new VerifyAggregateResponse();
+ Aggregate aggregateUO = new Aggregate();
+ aggregateUO.setSubunitCode("18SU3R");
+ aggregateUO.setSubunitType("UO");
+ aggregateUO.setDescription("denominazione");
+ aggregateUO.setDigitalAddress("pec@Pec");
+ aggregateUO.setTaxCode("1307110484");
+ aggregateUO.setVatNumber("1307110484");
+ aggregateUO.setAddress("Palazzo Vecchio Piazza Della Signoria");
+ aggregateUO.setCity("città");
+ aggregateUO.setCounty("Provincia");
+ aggregateUO.setZipCode("00100");
+ aggregateUO.setOrigin("IPA");
+ aggregateUO.setRowNumber(1);
+
+ Aggregate aggregateAOO = new Aggregate();
+ aggregateAOO.setSubunitCode("18SU3S");
+ aggregateAOO.setSubunitType("AOO");
+ aggregateAOO.setDescription("denominazione");
+ aggregateAOO.setDigitalAddress("pec@Pec");
+ aggregateAOO.setTaxCode("1307110484");
+ aggregateAOO.setVatNumber("1307110484");
+ aggregateAOO.setAddress("Palazzo Vecchio Piazza Della Signoria");
+ aggregateAOO.setCity("città");
+ aggregateAOO.setCounty("Provincia");
+ aggregateAOO.setZipCode("00100");
+ aggregateAOO.setOrigin("IPA");
+ aggregateAOO.setRowNumber(5);
+
+ Aggregate aggregate = new Aggregate();
+ aggregate.setSubunitCode(null);
+ aggregate.setSubunitType(null);
+ aggregate.setDescription(null);
+ aggregate.setDigitalAddress("pec@Pec");
+ aggregate.setTaxCode("1307110484");
+ aggregate.setVatNumber("1307110484");
+ aggregate.setAddress(null);
+ aggregate.setCity("città");
+ aggregate.setCounty("Provincia");
+ aggregate.setZipCode(null);
+ aggregate.setOriginId(null);
+ aggregate.setOrigin("IPA");
+ aggregate.setOriginId("test");
+ aggregate.setRowNumber(6);
+
+ verifyAggregateResponse.setAggregates(List.of(aggregateUO, aggregateAOO, aggregate));
+
+ RowError error0 = new RowError(2,"1307110484","SubunitType non valido");
+ RowError error1 = new RowError(3,"1307110484","La partita IVA è obbligatoria");
+ RowError error2 = new RowError(7,null,"Il codice fiscale è obbligatorio");
+ RowError error4 = new RowError(4,"1307110484","Codice fiscale non presente su IPA");
+ RowError error3 = new RowError(8,"1307110484","In caso di AOO/UO è necessario specificare la tipologia e il codice univoco IPA AOO/UO");
+ verifyAggregateResponse.setErrors(List.of(error0, error1,error4,error2, error3));
+ return verifyAggregateResponse;
}
-
}
diff --git a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/profile/OnboardingTestProfile.java b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/profile/OnboardingTestProfile.java
index 5a031e919..f4b94310e 100644
--- a/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/profile/OnboardingTestProfile.java
+++ b/apps/onboarding-ms/src/test/java/it/pagopa/selfcare/onboarding/service/profile/OnboardingTestProfile.java
@@ -7,6 +7,7 @@ public class OnboardingTestProfile implements QuarkusTestProfile {
@Override
public Map getConfigOverrides() {
- return Map.of("onboarding-ms.signature.verify-enabled", "true");
+ return Map.of("onboarding-ms.signature.verify-enabled", "true",
+ "onboarding-ms.istat-cache-duration-days","30");
}
}
diff --git a/apps/onboarding-ms/src/test/resources/aggregates-appio.csv b/apps/onboarding-ms/src/test/resources/aggregates-appio.csv
index 30ef88972..86e90b2e8 100644
--- a/apps/onboarding-ms/src/test/resources/aggregates-appio.csv
+++ b/apps/onboarding-ms/src/test/resources/aggregates-appio.csv
@@ -1,10 +1,10 @@
-Codice Fiscale*;P.IVA*;AOO/UO**;Codice Univoco**;PEC;Sede legale - Indirizzo;
-1307110484;1307110484;UO;18SU3R;pec@Pec;Palazzo Vecchio Piazza Della Signoria
-1307110484;;;;pec@Pec;Palazzo Vecchio Piazza Della Signoria
-1307110484;1307110484;AOO;18SU3R;pec@Pec;Palazzo Vecchio Piazza Della Signoria
-1307110484;1307110484;;;pec@Pec;Palazzo Vecchio Piazza Della Signoria
-;;;;pec@Pec;Palazzo Vecchio Piazza Della Signoria
-1307110484;1307110484;UO;;pec@Pec;Palazzo Vecchio Piazza Della Signoria
-;;;;;
-(*) campo obbligatorio;;;;
-(**) campo obbligatorio in caso di AOO/UO;;;;
\ No newline at end of file
+Codice Fiscale*;P.IVA*;AOO/UO**;Codice Univoco**;
+1307110484;1307110484;UO;18SU3R
+1307110484;1307110484;UOO;18SU3R
+1307110484;;;
+1307110484;1307110484;AOO;18SU3R
+1307110484;1307110484;AOO;18SU3S
+1307110484;1307110484;;
+;;;
+1307110484;1307110484;UO;
+1307110484;1307110484;UOAOO;
\ No newline at end of file
diff --git a/apps/onboarding-ms/src/test/resources/application.properties b/apps/onboarding-ms/src/test/resources/application.properties
index b3c706a8a..2f24bed44 100644
--- a/apps/onboarding-ms/src/test/resources/application.properties
+++ b/apps/onboarding-ms/src/test/resources/application.properties
@@ -2,3 +2,5 @@ mp.jwt.verify.publickey=""
mp.jwt.verify.issuer=SPID
onboarding-ms.signature.verify-enabled=false
+onboarding-ms.istat-cache-duration-minute=30
+