diff --git a/.gitignore b/.gitignore
index 46bfbc4e8..6a3629ada 100644
--- a/.gitignore
+++ b/.gitignore
@@ -45,6 +45,6 @@ build/
.vscode/
/config/api-keys-dev.properties
/config/bearer-token-dev.properties
-/config/interop-tracing-dev.properties
+/interop-qa-tests/src/main/resources/interop-tracing-dev.properties
token.json
diff --git a/config/application.properties b/config/application.properties
index 96d06de0b..177a53f2e 100644
--- a/config/application.properties
+++ b/config/application.properties
@@ -148,11 +148,6 @@ pn.interop.clientId=${interop.clientId.value}
pn.interop.base-url=https://auth.uat.interop.pagopa.it
pn.interop.token-oauth2.path=/token.oauth2
-#INTEROP TRACING
-pn.interop.tracing.base-url=https://api.dev.tracing.interop.pagopa.it
-pn.interop.tracing.bearerToken-1=${interop.configuration.tracing.bearerToken-1}
-pn.interop.tracing.bearerToken-2=${interop.configuration.tracing.bearerToken-2}
-
#RADD ALT ADEGUAMENTO
pn.radd.alt.external.max-print-request=10
diff --git a/interop-qa-tests/config/application-dev.properties b/interop-qa-tests/config/application-dev.properties
new file mode 100644
index 000000000..b0f297bbc
--- /dev/null
+++ b/interop-qa-tests/config/application-dev.properties
@@ -0,0 +1,5 @@
+#TRACING
+pn.interop.tracing.base-url=https://api.dev.tracing.interop.pagopa.it
+tracing.success.csv.filepath=src/main/resources/tracing/dev/tracing-ok.csv
+tracing.error.csv.filepath=src/main/resources/tracing/dev/tracing-error.csv
+
diff --git a/interop-qa-tests/config/application-qa.properties b/interop-qa-tests/config/application-qa.properties
new file mode 100644
index 000000000..0fa529f5c
--- /dev/null
+++ b/interop-qa-tests/config/application-qa.properties
@@ -0,0 +1,4 @@
+#TRACING
+pn.interop.tracing.base-url=https://api.qa.tracing.interop.pagopa.it
+tracing.success.csv.filepath=src/main/resources/tracing/qa/tracing-ok.csv
+tracing.error.csv.filepath=src/main/resources/tracing/qa/tracing-error.csv
diff --git a/interop-qa-tests/config/application.properties b/interop-qa-tests/config/application.properties
new file mode 100644
index 000000000..f8c516314
--- /dev/null
+++ b/interop-qa-tests/config/application.properties
@@ -0,0 +1,18 @@
+spring.profiles.active=qa
+#TRACING
+pn.interop.tracing.base-url=https://api.qa.tracing.interop.pagopa.it
+pn.interop.tracing.bearerToken-1=${interop.configuration.tracing.bearerToken-1}
+pn.interop.tracing.bearerToken-2=${interop.configuration.tracing.bearerToken-2}
+#PURPOSE_ID 28874634-6ea6-4def-b200-7377182c71be
+interop.configuration.tracing.bearerToken-1=eyJhbGciOiJSUzI1NiIsInVzZSI6InNpZyIsInR5cCI6ImF0K2p3dCIsImtpZCI6IjBiOTEwNmExLWRiMGMtNDg4Zi05MDg0LWNlOGM2MzIxNDJiYyJ9.eyJqdGkiOiJhMGQzN2QxYy1iMzU3LTRlN2EtYjIzYy05MDViNTU3NzA2NjciLCJpc3MiOiJ0cmFjaW5nLWlzc3VlciIsImF1ZCI6Imh0dHA6Ly9sb2NhbGhvc3Q6NDAwMSIsInN1YiI6InRyYWNpbmctc3ViamVjdCIsImlhdCI6MTcyOTYwNzUwMCwibmJmIjoxNzI5NjA3NTAwLCJleHAiOjE4Mjk2MDc0OTksIm9yZ2FuaXphdGlvbklkIjoiMGU5ZTJkYWItMmU5My00ZjI0LWJhNTktMzhkOWYxMTE5OGNhIiwicm9sZSI6ImludGVybmFsIn0.AEhPS-dnJWwTOY1gN5gqKtfAswKxZtRTPozHVM2xbG4TD3oSoo5TCyLyvPWYezFMEIIueMZykeiBnUvT_EEePl018cpio_lrlmKqHpGiYe-9u_6EU-cmPTAU9Cnpu6yESS7KyaGziFHm-Rp7qxmjnMsMgKG6IpxgmnbEwxnu4pBiFwHx_sJyUtVks7xZr50UVRzpNQNYRv9ypko140fx85bDQHyNzFqLa75wFX3hiF2yi7A-vmEuwqVwCRrpwuphMksNaSEs-E8bbxnXeq1zeiav7oc9wZHtnPruhth9fr6PoTcPwtftLEEh_QH_IssciqpTY8stA0S4AMwvFYyP_w
+#PURPOSE_ID 5602d95a-9297-4221-86d0-f142b8690d5c
+interop.configuration.tracing.bearerToken-2=eyJhbGciOiJSUzI1NiIsInVzZSI6InNpZyIsInR5cCI6ImF0K2p3dCIsImtpZCI6IjBiOTEwNmExLWRiMGMtNDg4Zi05MDg0LWNlOGM2MzIxNDJiYyJ9.eyJqdGkiOiI0MDNlYzc3ZC01OGM3LTQwMmYtYTg4Zi1iYzNmODFjMTBiNGIiLCJpc3MiOiJ0cmFjaW5nLWlzc3VlciIsImF1ZCI6Imh0dHA6Ly9sb2NhbGhvc3Q6NDAwMSIsInN1YiI6InRyYWNpbmctc3ViamVjdCIsImlhdCI6MTczMDI3NzkwOCwibmJmIjoxNzMwMjc3OTA4LCJleHAiOjE4MzAyNzc5MDcsIm9yZ2FuaXphdGlvbklkIjoiNjllMjg2NWUtNjVhYi00ZTQ4LWE2MzgtMjAzN2E5ZWUyZWU3Iiwicm9sZSI6ImludGVybmFsIn0.JH2Rs9pDCHlMCBmrIvMOiCKd6eb_Xs1OdIDG47ET5gTpd1uPFio0wwHpKBnhzVZpjuFzi14EaMVHRuZqLq7NBkP4-xRAP5_muOdCKjRu6gcJVagXVTwtFXw-3WnP7jFX8FEOqjqmRoA83hX4s_dPewKZbqtC8VkKDPAHOaN9I0ZEUWwzwn9X07gCJPi3jimfhdsk4YgjcR4qlTUif73hxcHwNvfpiCqYCAXZDa_KWcz7D_QQsOLxRWFHKgfGNRr5gbuYDBSykb-ZLqsxecnXyhc3Fpwe5rTnIHWKcITfRNQjej5YnJ88HUyPrTqLqOfGvWIM3kY4n82Vt1oJYSmQNA
+tracing.success.csv.filepath=src/main/resources/tracing/dev/tracing-ok.csv
+tracing.error.csv.filepath=src/main/resources/tracing/dev/tracing-error.csv
+
+#INTEROP GLOBAL PROPERTIES
+bff.base-url=https://selfcare.qa.interop.pagopa.it/1.0/backend-for-frontend
+session.tokens.duration.seconds=3000
+interop-env=qa
+max-polling-try-ms=50
+max-polling-sleep-ms=1000
diff --git a/interop-qa-tests/pom.xml b/interop-qa-tests/pom.xml
index fc0a57aa6..8b7dd5180 100644
--- a/interop-qa-tests/pom.xml
+++ b/interop-qa-tests/pom.xml
@@ -123,6 +123,12 @@
3.17.0
+
+ com.opencsv
+ opencsv
+ 5.9
+
+
@@ -155,7 +161,7 @@
OffsetDateTime=java.lang.String
- https://raw.githubusercontent.com/pagopa/interop-be-monorepo/refs/heads/develop/packages/api-clients/open-api/bffApi.yml
+ https://raw.githubusercontent.com/pagopa/interop-be-monorepo/bae46fcee339b15245ac748a6583e6dd829a6be5/packages/api-clients/open-api/bffApi.yml
java
resttemplate
false
@@ -177,6 +183,41 @@
it.pagopa.interop.generated.openapi.clients.bff.model
+
+
+ generate-external-interop-tracing-client
+
+ generate
+
+ process-resources
+
+
+ OffsetDateTime=java.lang.String
+
+ https://raw.githubusercontent.com/pagopa/interop-tracing-core/refs/heads/develop/packages/api/open-api/api-external-interop-v1.yaml
+ java
+ resttemplate
+ false
+ false
+ true
+
+ it.pagopa.interop.client.b2b.generated.openapi.clients.interop.tracing.api
+ it.pagopa.interop.client.b2b.generated.openapi.clients.interop.tracing.model
+ java8
+ none
+ source
+ false
+ true
+ false
+
+ @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL)
+
+
+ it.pagopa.interop.client.b2b.generated.openapi.clients.interop.tracing.api
+ it.pagopa.interop.client.b2b.generated.openapi.clients.interop.tracing.model
+
+
+
diff --git a/interop-qa-tests/src/main/java/it/pagopa/interop/agreement/service/IAgreementClient.java b/interop-qa-tests/src/main/java/it/pagopa/interop/agreement/service/IAgreementClient.java
index 05d747d0c..7bf35a353 100644
--- a/interop-qa-tests/src/main/java/it/pagopa/interop/agreement/service/IAgreementClient.java
+++ b/interop-qa-tests/src/main/java/it/pagopa/interop/agreement/service/IAgreementClient.java
@@ -1,13 +1,17 @@
package it.pagopa.interop.agreement.service;
import it.pagopa.interop.authorization.service.utils.SettableBearerToken;
-import it.pagopa.interop.generated.openapi.clients.bff.model.*;
+import it.pagopa.interop.generated.openapi.clients.bff.model.Agreement;
+import it.pagopa.interop.generated.openapi.clients.bff.model.AgreementPayload;
+import it.pagopa.interop.generated.openapi.clients.bff.model.AgreementRejectionPayload;
+import it.pagopa.interop.generated.openapi.clients.bff.model.AgreementSubmissionPayload;
+import it.pagopa.interop.generated.openapi.clients.bff.model.CreatedResource;
import java.io.File;
import java.util.UUID;
public interface IAgreementClient extends SettableBearerToken {
- CreatedResource createAgreement(String xCorrelationId, AgreementPayload agreementPayload);
+ CreatedResource createAgreement(AgreementPayload agreementPayload);
Agreement getAgreementById(String xCorrelationId, UUID agreementId);
Agreement activateAgreement(String xCorrelationId, UUID agreementId);
Agreement submitAgreement(String xCorrelationId, UUID agreementId, AgreementSubmissionPayload agreementSubmissionPayload);
diff --git a/interop-qa-tests/src/main/java/it/pagopa/interop/agreement/service/impl/AgreementClientImpl.java b/interop-qa-tests/src/main/java/it/pagopa/interop/agreement/service/impl/AgreementClientImpl.java
index bfe9a4d23..43841a6d8 100644
--- a/interop-qa-tests/src/main/java/it/pagopa/interop/agreement/service/impl/AgreementClientImpl.java
+++ b/interop-qa-tests/src/main/java/it/pagopa/interop/agreement/service/impl/AgreementClientImpl.java
@@ -1,7 +1,7 @@
package it.pagopa.interop.agreement.service.impl;
import it.pagopa.interop.agreement.service.IAgreementClient;
-import it.pagopa.interop.conf.springconfig.InteropClientConfigs;
+import it.pagopa.interop.conf.InteropClientConfigs;
import it.pagopa.interop.generated.openapi.clients.bff.ApiClient;
import it.pagopa.interop.generated.openapi.clients.bff.api.AgreementsApi;
import it.pagopa.interop.generated.openapi.clients.bff.model.Agreement;
@@ -38,8 +38,8 @@ private ApiClient createApiClient(String bearerToken) {
}
@Override
- public CreatedResource createAgreement(String xCorrelationId, AgreementPayload agreementPayload) {
- return agreementsApi.createAgreement(xCorrelationId, agreementPayload);
+ public CreatedResource createAgreement(AgreementPayload agreementPayload) {
+ return agreementsApi.createAgreement(agreementPayload);
}
@Override
diff --git a/interop-qa-tests/src/main/java/it/pagopa/interop/agreement/service/impl/EServiceApiClientImpl.java b/interop-qa-tests/src/main/java/it/pagopa/interop/agreement/service/impl/EServiceApiClientImpl.java
index f36bacaaf..1a283a977 100644
--- a/interop-qa-tests/src/main/java/it/pagopa/interop/agreement/service/impl/EServiceApiClientImpl.java
+++ b/interop-qa-tests/src/main/java/it/pagopa/interop/agreement/service/impl/EServiceApiClientImpl.java
@@ -1,10 +1,9 @@
package it.pagopa.interop.agreement.service.impl;
import it.pagopa.interop.agreement.service.IEServiceClient;
-import it.pagopa.interop.conf.springconfig.InteropClientConfigs;
+import it.pagopa.interop.conf.InteropClientConfigs;
import it.pagopa.interop.generated.openapi.clients.bff.ApiClient;
import it.pagopa.interop.generated.openapi.clients.bff.api.EservicesApi;
-import it.pagopa.interop.generated.openapi.clients.bff.model.*;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
diff --git a/interop-qa-tests/src/main/java/it/pagopa/interop/attribute/service/impl/AttributeApiClientImpl.java b/interop-qa-tests/src/main/java/it/pagopa/interop/attribute/service/impl/AttributeApiClientImpl.java
index 9dd6ba27d..24144a926 100644
--- a/interop-qa-tests/src/main/java/it/pagopa/interop/attribute/service/impl/AttributeApiClientImpl.java
+++ b/interop-qa-tests/src/main/java/it/pagopa/interop/attribute/service/impl/AttributeApiClientImpl.java
@@ -1,7 +1,7 @@
package it.pagopa.interop.attribute.service.impl;
import it.pagopa.interop.attribute.service.IAttributeApiClient;
-import it.pagopa.interop.conf.springconfig.InteropClientConfigs;
+import it.pagopa.interop.conf.InteropClientConfigs;
import it.pagopa.interop.generated.openapi.clients.bff.ApiClient;
import it.pagopa.interop.generated.openapi.clients.bff.api.AttributesApi;
import it.pagopa.interop.generated.openapi.clients.bff.model.Attribute;
diff --git a/interop-qa-tests/src/main/java/it/pagopa/interop/authorization/service/factory/InteropTokenFactory.java b/interop-qa-tests/src/main/java/it/pagopa/interop/authorization/service/factory/InteropTokenFactory.java
new file mode 100644
index 000000000..b01375164
--- /dev/null
+++ b/interop-qa-tests/src/main/java/it/pagopa/interop/authorization/service/factory/InteropTokenFactory.java
@@ -0,0 +1,39 @@
+package it.pagopa.interop.authorization.service.factory;
+
+import it.pagopa.interop.authorization.service.utils.ConfigFileReader;
+import it.pagopa.interop.conf.InteropClientConfigs;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.config.ConfigurableBeanFactory;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+@Slf4j
+@Getter
+@Setter
+public class InteropTokenFactory extends SessionTokenFactory {
+ private static final String WELLKNOWN_URL = "https://qa.interop.pagopa.it/.well-known/jwks.json";
+ private Map> cachedTokens = null;
+
+ public InteropTokenFactory(InteropClientConfigs interopClientConfigs, ConfigFileReader configFileReader) {
+ super(interopClientConfigs, configFileReader);
+ }
+
+ public Map> loadToken() {
+ getSessionTokenPayloadTemplate().put("aud", "{{ENVIRONMENT}}.interop.pagopa.it/ui");
+ try {
+ if (cachedTokens == null) cachedTokens = generateSessionToken();
+ } catch (Exception ex) {
+ throw new IllegalArgumentException("There was an error while creating the session token: " + ex.getMessage(), ex);
+ }
+ return cachedTokens;
+ }
+
+ @Override
+ public String getRemoteWellknownUrl() {
+ return WELLKNOWN_URL;
+ }
+}
diff --git a/interop-qa-tests/src/main/java/it/pagopa/interop/authorization/service/factory/SessionTokenFactory.java b/interop-qa-tests/src/main/java/it/pagopa/interop/authorization/service/factory/SessionTokenFactory.java
index d03c15701..e08c78973 100644
--- a/interop-qa-tests/src/main/java/it/pagopa/interop/authorization/service/factory/SessionTokenFactory.java
+++ b/interop-qa-tests/src/main/java/it/pagopa/interop/authorization/service/factory/SessionTokenFactory.java
@@ -10,7 +10,7 @@
import it.pagopa.interop.authorization.domain.Tenant;
import it.pagopa.interop.authorization.service.exception.UnsignedSTSGenerationException;
import it.pagopa.interop.authorization.service.utils.ConfigFileReader;
-import it.pagopa.interop.conf.springconfig.InteropClientConfigs;
+import it.pagopa.interop.conf.InteropClientConfigs;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
@@ -39,9 +39,7 @@
import software.amazon.awssdk.services.kms.model.VerifyResponse;
@Slf4j
-@Component
-@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
-public class SessionTokenFactory {
+public abstract class SessionTokenFactory {
private static final Map> CONFIG = new HashMap<>();
private static final Map SESSION_TOKEN_PAYLOAD_TEMPLATE;
private static final Map SESSION_TOKEN_HEADER_TEMPLATE = Map.of(
@@ -72,7 +70,6 @@ public class SessionTokenFactory {
));
SESSION_TOKEN_PAYLOAD_TEMPLATE.put("uid", "VALUES_UID");
SESSION_TOKEN_PAYLOAD_TEMPLATE.put("iss", "{{ENVIRONMENT}}.interop.pagopa.it");
- SESSION_TOKEN_PAYLOAD_TEMPLATE.put("aud", "{{ENVIRONMENT}}.interop.pagopa.it/ui");
SESSION_TOKEN_PAYLOAD_TEMPLATE.put("nbf", 123);
SESSION_TOKEN_PAYLOAD_TEMPLATE.put("iat", 123);
SESSION_TOKEN_PAYLOAD_TEMPLATE.put("exp", 456);
@@ -80,29 +77,18 @@ public class SessionTokenFactory {
}
private final InteropClientConfigs interopClientConfigs;
- @Getter
- private Map> cachedTokens = null;
private ConfigFileReader configFileReader;
-
public SessionTokenFactory(InteropClientConfigs interopClientConfigs, ConfigFileReader configFileReader) {
this.interopClientConfigs = interopClientConfigs;
this.configFileReader = configFileReader;
- this.cachedTokens = loadToken();
}
- private Map> loadToken() {
- try {
- if (cachedTokens == null) {
- cachedTokens = generateSessionToken(configFileReader.getTenantList());
- }
- } catch (Exception ex) {
- throw new IllegalArgumentException("There was an error while creating the session token: " + ex.getMessage(), ex);
- }
- return cachedTokens;
- }
+ public abstract Map> loadToken();
+
+ public abstract String getRemoteWellknownUrl();
- public Map> generateSessionToken(List configFile) throws Exception {
+ public Map> generateSessionToken() throws Exception {
// Step 1. Read session token payload values file
log.info("##Generating session token... ##");
log.debug("##Step 1. Read session token payload values file ##");
@@ -110,7 +96,7 @@ public Map> generateSessionToken(List config
// Step 2. Parse well known
log.debug("##Step 2. Parse well known ##");
- URL wellKnownUrl = new URL(interopClientConfigs.getRemoteWellknownUrl());
+ URL wellKnownUrl = new URL(getRemoteWellknownUrl());
Map wellKnownData = fetchWellKnown(wellKnownUrl.toString());
if (!wellKnownData.containsKey("kid") || !wellKnownData.containsKey("alg")) {
throw new IllegalStateException("Kid or alg not found.");
@@ -152,7 +138,7 @@ public Map> generateSessionToken(List config
log.debug("ST Payload Compiled: {}", stPayloadCompiled);
log.debug("## Step 5. Generate unsigned STs ##");
- Map> unsignedSTs = unsignedStsGeneration(stHeaderCompiled, stPayloadCompiled, configFile, environment);
+ Map> unsignedSTs = unsignedStsGeneration(stHeaderCompiled, stPayloadCompiled, configFileReader.getTenantList(), environment);
log.debug("Unsigned STs: {}", unsignedSTs);
log.debug("## Step 6. Generate signed STs ##");
@@ -191,9 +177,8 @@ private static Map fetchWellKnown(String wellKnownUrl) throws Ex
}
- public Map> unsignedStsGeneration(
- Map stHeaderCompiled, HashMap stPayloadCompiled, List stPayloadValues, String environment) {
-
+ private Map> unsignedStsGeneration(Map stHeaderCompiled,
+ HashMap stPayloadCompiled, List stPayloadValues, String environment) {
try {
log.debug("unsignedStsGeneration::Phase1:START: Build roles dynamic substitutions");
Map stsSubOutput = new HashMap<>();
@@ -290,7 +275,7 @@ private Map> signedStsGeneration(Map getSessionTokenPayloadTemplate() {
+ return SESSION_TOKEN_PAYLOAD_TEMPLATE;
+ }
+
}
diff --git a/interop-qa-tests/src/main/java/it/pagopa/interop/authorization/service/factory/TracingTokenFactory.java b/interop-qa-tests/src/main/java/it/pagopa/interop/authorization/service/factory/TracingTokenFactory.java
new file mode 100644
index 000000000..4249a9d4c
--- /dev/null
+++ b/interop-qa-tests/src/main/java/it/pagopa/interop/authorization/service/factory/TracingTokenFactory.java
@@ -0,0 +1,40 @@
+package it.pagopa.interop.authorization.service.factory;
+
+import it.pagopa.interop.authorization.service.utils.ConfigFileReader;
+import it.pagopa.interop.conf.InteropClientConfigs;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.config.ConfigurableBeanFactory;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+@Slf4j
+@Getter
+@Setter
+public class TracingTokenFactory extends SessionTokenFactory {
+ private static final String WELLKNOWN_URL = "https://tracing-qa-only-well-known-qa.s3.eu-south-1.amazonaws.com/.well-known/jwks.json";
+ private Map> cachedTokens = null;
+
+ public TracingTokenFactory(InteropClientConfigs interopClientConfigs, ConfigFileReader configFileReader) {
+ super(interopClientConfigs, configFileReader);
+ }
+
+ @Override
+ public Map> loadToken() {
+ getSessionTokenPayloadTemplate().put("aud", "{{ENVIRONMENT}}.interop.pagopa.it/m2m");
+ try {
+ if (cachedTokens == null) cachedTokens = generateSessionToken();
+ } catch (Exception ex) {
+ throw new IllegalArgumentException("There was an error while creating the session token: " + ex.getMessage(), ex);
+ }
+ return cachedTokens;
+ }
+
+ @Override
+ public String getRemoteWellknownUrl() {
+ return WELLKNOWN_URL;
+ }
+}
diff --git a/interop-qa-tests/src/main/java/it/pagopa/interop/authorization/service/impl/AuthorizationClientImpl.java b/interop-qa-tests/src/main/java/it/pagopa/interop/authorization/service/impl/AuthorizationClientImpl.java
index 80e688a99..40610ca63 100644
--- a/interop-qa-tests/src/main/java/it/pagopa/interop/authorization/service/impl/AuthorizationClientImpl.java
+++ b/interop-qa-tests/src/main/java/it/pagopa/interop/authorization/service/impl/AuthorizationClientImpl.java
@@ -8,7 +8,7 @@
import org.springframework.stereotype.Component;
import it.pagopa.interop.authorization.service.IAuthorizationClient;
-import it.pagopa.interop.conf.springconfig.InteropClientConfigs;
+import it.pagopa.interop.conf.InteropClientConfigs;
import it.pagopa.interop.generated.openapi.clients.bff.ApiClient;
import it.pagopa.interop.generated.openapi.clients.bff.api.ClientsApi;
import it.pagopa.interop.generated.openapi.clients.bff.model.Client;
diff --git a/interop-qa-tests/src/main/java/it/pagopa/interop/authorization/service/impl/ProducerClientImpl.java b/interop-qa-tests/src/main/java/it/pagopa/interop/authorization/service/impl/ProducerClientImpl.java
index ba7fe6174..62bc2d2ff 100644
--- a/interop-qa-tests/src/main/java/it/pagopa/interop/authorization/service/impl/ProducerClientImpl.java
+++ b/interop-qa-tests/src/main/java/it/pagopa/interop/authorization/service/impl/ProducerClientImpl.java
@@ -1,7 +1,7 @@
package it.pagopa.interop.authorization.service.impl;
import it.pagopa.interop.authorization.service.IProducerClient;
-import it.pagopa.interop.conf.springconfig.InteropClientConfigs;
+import it.pagopa.interop.conf.InteropClientConfigs;
import it.pagopa.interop.generated.openapi.clients.bff.ApiClient;
import it.pagopa.interop.generated.openapi.clients.bff.api.EservicesApi;
import it.pagopa.interop.generated.openapi.clients.bff.model.ProducerEServiceDescriptor;
diff --git a/interop-qa-tests/src/main/java/it/pagopa/interop/authorization/service/utils/IdentityService.java b/interop-qa-tests/src/main/java/it/pagopa/interop/authorization/service/utils/IdentityService.java
index 2b8256639..a0c3acabf 100644
--- a/interop-qa-tests/src/main/java/it/pagopa/interop/authorization/service/utils/IdentityService.java
+++ b/interop-qa-tests/src/main/java/it/pagopa/interop/authorization/service/utils/IdentityService.java
@@ -1,14 +1,13 @@
package it.pagopa.interop.authorization.service.utils;
import it.pagopa.interop.authorization.domain.Tenant;
+import it.pagopa.interop.authorization.service.factory.InteropTokenFactory;
import it.pagopa.interop.authorization.service.factory.SessionTokenFactory;
+import it.pagopa.interop.authorization.service.factory.TracingTokenFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
-import it.pagopa.interop.conf.springconfig.InteropClientConfigs;
-import org.yaml.snakeyaml.Yaml;
-import org.yaml.snakeyaml.constructor.Constructor;
import java.util.List;
import java.util.Objects;
@@ -16,8 +15,6 @@
import java.util.UUID;
@Slf4j
-@Component
-@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class IdentityService {
private final SessionTokenFactory sessionTokenFactory;
private final List tenantList;
@@ -29,7 +26,7 @@ public IdentityService(SessionTokenFactory sessionTokenFactory,
}
public String getToken(String tenantType, String role) {
- String token = Optional.ofNullable(sessionTokenFactory.getCachedTokens())
+ String token = Optional.ofNullable(sessionTokenFactory.loadToken())
.map(m -> m.get(tenantType))
.map(m -> (role == null) ? m.get("admin") : m.get(role))
.filter(Objects::nonNull)
diff --git a/interop-qa-tests/src/main/java/it/pagopa/interop/authorization/service/utils/PollingService.java b/interop-qa-tests/src/main/java/it/pagopa/interop/authorization/service/utils/PollingService.java
index 5ac2d80c2..06c31acec 100644
--- a/interop-qa-tests/src/main/java/it/pagopa/interop/authorization/service/utils/PollingService.java
+++ b/interop-qa-tests/src/main/java/it/pagopa/interop/authorization/service/utils/PollingService.java
@@ -1,6 +1,6 @@
package it.pagopa.interop.authorization.service.utils;
-import it.pagopa.interop.conf.springconfig.InteropClientConfigs;
+import it.pagopa.interop.conf.InteropClientConfigs;
import java.util.function.Predicate;
import java.util.function.Supplier;
import lombok.AllArgsConstructor;
diff --git a/interop-qa-tests/src/main/java/it/pagopa/interop/authorization/service/utils/SettableBearerToken.java b/interop-qa-tests/src/main/java/it/pagopa/interop/authorization/service/utils/SettableBearerToken.java
index d65e02ed8..5ed0ae3e7 100644
--- a/interop-qa-tests/src/main/java/it/pagopa/interop/authorization/service/utils/SettableBearerToken.java
+++ b/interop-qa-tests/src/main/java/it/pagopa/interop/authorization/service/utils/SettableBearerToken.java
@@ -1,6 +1,6 @@
package it.pagopa.interop.authorization.service.utils;
public interface SettableBearerToken {
- enum BearerTokenType { CONSUMER, API}
+ enum BearerTokenType { CONSUMER, API, TENANT_1, TENANT_2}
void setBearerToken(String bearerToken);
}
\ No newline at end of file
diff --git a/interop-qa-tests/src/main/java/it/pagopa/interop/conf/springconfig/InteropClientConfigs.java b/interop-qa-tests/src/main/java/it/pagopa/interop/conf/InteropClientConfigs.java
similarity index 88%
rename from interop-qa-tests/src/main/java/it/pagopa/interop/conf/springconfig/InteropClientConfigs.java
rename to interop-qa-tests/src/main/java/it/pagopa/interop/conf/InteropClientConfigs.java
index eb3ca1a30..da73432d1 100644
--- a/interop-qa-tests/src/main/java/it/pagopa/interop/conf/springconfig/InteropClientConfigs.java
+++ b/interop-qa-tests/src/main/java/it/pagopa/interop/conf/InteropClientConfigs.java
@@ -1,4 +1,4 @@
-package it.pagopa.interop.conf.springconfig;
+package it.pagopa.interop.conf;
import lombok.Getter;
import lombok.Setter;
@@ -7,7 +7,6 @@
import org.springframework.context.annotation.PropertySource;
@Configuration
-@PropertySource("classpath:qa-interop.properties")
@Getter
@Setter
public class InteropClientConfigs {
diff --git a/interop-qa-tests/src/main/java/it/pagopa/interop/config/springconfig/springconfig/JwtTokenServiceConfiguration.java b/interop-qa-tests/src/main/java/it/pagopa/interop/config/springconfig/springconfig/JwtTokenServiceConfiguration.java
new file mode 100644
index 000000000..5564bd3ca
--- /dev/null
+++ b/interop-qa-tests/src/main/java/it/pagopa/interop/config/springconfig/springconfig/JwtTokenServiceConfiguration.java
@@ -0,0 +1,41 @@
+package it.pagopa.interop.config.springconfig.springconfig;
+
+import it.pagopa.interop.authorization.service.factory.InteropTokenFactory;
+import it.pagopa.interop.authorization.service.factory.TracingTokenFactory;
+import it.pagopa.interop.authorization.service.utils.ConfigFileReader;
+import it.pagopa.interop.authorization.service.utils.IdentityService;
+import it.pagopa.interop.conf.InteropClientConfigs;
+import org.springframework.beans.factory.config.ConfigurableBeanFactory;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+import org.springframework.context.annotation.Scope;
+
+@Configuration
+public class JwtTokenServiceConfiguration {
+
+ @Bean
+ @Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
+ public TracingTokenFactory tracingTokenFactory(InteropClientConfigs interopClientConfigs, ConfigFileReader configFileReader) {
+ return new TracingTokenFactory(interopClientConfigs, configFileReader);
+ }
+
+ @Bean
+ @Primary
+ @Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
+ public InteropTokenFactory interopTokenFactory(InteropClientConfigs interopClientConfigs, ConfigFileReader configFileReader) {
+ return new InteropTokenFactory(interopClientConfigs, configFileReader);
+ }
+
+ @Bean(name = "tracingIdentityService")
+ @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
+ public IdentityService tracingIdentityService(TracingTokenFactory tracingTokenFactory, ConfigFileReader configFileReader) {
+ return new IdentityService(tracingTokenFactory, configFileReader);
+ }
+
+ @Bean(name = "interopIdentityService")
+ @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
+ public IdentityService interopIdentityService(InteropTokenFactory interopTokenFactory, ConfigFileReader configFileReader) {
+ return new IdentityService(interopTokenFactory, configFileReader);
+ }
+}
diff --git a/interop-qa-tests/src/main/java/it/pagopa/interop/delegate/service/impl/DelegationApiClientImpl.java b/interop-qa-tests/src/main/java/it/pagopa/interop/delegate/service/impl/DelegationApiClientImpl.java
index 926100a65..862e2c10f 100644
--- a/interop-qa-tests/src/main/java/it/pagopa/interop/delegate/service/impl/DelegationApiClientImpl.java
+++ b/interop-qa-tests/src/main/java/it/pagopa/interop/delegate/service/impl/DelegationApiClientImpl.java
@@ -1,6 +1,6 @@
package it.pagopa.interop.delegate.service.impl;
-import it.pagopa.interop.conf.springconfig.InteropClientConfigs;
+import it.pagopa.interop.conf.InteropClientConfigs;
import it.pagopa.interop.delegate.service.IDelegationApiClient;
import it.pagopa.interop.generated.openapi.clients.bff.ApiClient;
import it.pagopa.interop.generated.openapi.clients.bff.api.DelegationsApi;
diff --git a/interop-qa-tests/src/main/java/it/pagopa/interop/delegate/service/impl/ProducerDelegationsApiClientImpl.java b/interop-qa-tests/src/main/java/it/pagopa/interop/delegate/service/impl/ProducerDelegationsApiClientImpl.java
index 73567754b..afb231ea6 100644
--- a/interop-qa-tests/src/main/java/it/pagopa/interop/delegate/service/impl/ProducerDelegationsApiClientImpl.java
+++ b/interop-qa-tests/src/main/java/it/pagopa/interop/delegate/service/impl/ProducerDelegationsApiClientImpl.java
@@ -1,6 +1,6 @@
package it.pagopa.interop.delegate.service.impl;
-import it.pagopa.interop.conf.springconfig.InteropClientConfigs;
+import it.pagopa.interop.conf.InteropClientConfigs;
import it.pagopa.interop.delegate.service.IProducerDelegationsApiClient;
import it.pagopa.interop.generated.openapi.clients.bff.ApiClient;
import it.pagopa.interop.generated.openapi.clients.bff.api.ProducerDelegationsApi;
@@ -41,12 +41,12 @@ public CreatedResource createProducerDelegation(String xCorrelationId, Delegatio
@Override
public void approveDelegation(String xCorrelationId, UUID delegationId) {
- producerDelegationsApi.approveDelegation(xCorrelationId, delegationId);
+ producerDelegationsApi.approveProducerDelegation(xCorrelationId, delegationId);
}
@Override
public void rejectDelegation(String xCorrelationId, UUID delegationId, RejectDelegationPayload rejectDelegationPayload) {
- producerDelegationsApi.rejectDelegation(xCorrelationId, delegationId, rejectDelegationPayload);
+ producerDelegationsApi.rejectProducerDelegation(xCorrelationId, delegationId, rejectDelegationPayload);
}
@Override
diff --git a/interop-qa-tests/src/main/java/it/pagopa/interop/purpose/service/impl/PurposeApiClientImpl.java b/interop-qa-tests/src/main/java/it/pagopa/interop/purpose/service/impl/PurposeApiClientImpl.java
index f5ff57254..b49d9e036 100644
--- a/interop-qa-tests/src/main/java/it/pagopa/interop/purpose/service/impl/PurposeApiClientImpl.java
+++ b/interop-qa-tests/src/main/java/it/pagopa/interop/purpose/service/impl/PurposeApiClientImpl.java
@@ -1,6 +1,6 @@
package it.pagopa.interop.purpose.service.impl;
-import it.pagopa.interop.conf.springconfig.InteropClientConfigs;
+import it.pagopa.interop.conf.InteropClientConfigs;
import it.pagopa.interop.generated.openapi.clients.bff.ApiClient;
import it.pagopa.interop.generated.openapi.clients.bff.api.PurposesApi;
import it.pagopa.interop.generated.openapi.clients.bff.model.CreatedResource;
@@ -17,7 +17,6 @@
import org.springframework.web.client.RestTemplate;
import java.util.UUID;
-import org.springframework.web.client.RestTemplate;
@Component
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
diff --git a/interop-qa-tests/src/main/java/it/pagopa/interop/tenant/service/ITenantsApi.java b/interop-qa-tests/src/main/java/it/pagopa/interop/tenant/service/ITenantsApi.java
index 481318b06..918c10437 100644
--- a/interop-qa-tests/src/main/java/it/pagopa/interop/tenant/service/ITenantsApi.java
+++ b/interop-qa-tests/src/main/java/it/pagopa/interop/tenant/service/ITenantsApi.java
@@ -1,7 +1,11 @@
package it.pagopa.interop.tenant.service;
import it.pagopa.interop.authorization.service.utils.SettableBearerToken;
-import it.pagopa.interop.generated.openapi.clients.bff.model.*;
+import it.pagopa.interop.generated.openapi.clients.bff.model.CertifiedAttributesResponse;
+import it.pagopa.interop.generated.openapi.clients.bff.model.CertifiedTenantAttributeSeed;
+import it.pagopa.interop.generated.openapi.clients.bff.model.DeclaredAttributesResponse;
+import it.pagopa.interop.generated.openapi.clients.bff.model.DeclaredTenantAttributeSeed;
+import it.pagopa.interop.generated.openapi.clients.bff.model.Tenant;
import java.util.UUID;
diff --git a/interop-qa-tests/src/main/java/it/pagopa/interop/tenant/service/impl/TenantsApiClientImpl.java b/interop-qa-tests/src/main/java/it/pagopa/interop/tenant/service/impl/TenantsApiClientImpl.java
index cce3a1186..561783b6a 100644
--- a/interop-qa-tests/src/main/java/it/pagopa/interop/tenant/service/impl/TenantsApiClientImpl.java
+++ b/interop-qa-tests/src/main/java/it/pagopa/interop/tenant/service/impl/TenantsApiClientImpl.java
@@ -1,6 +1,6 @@
package it.pagopa.interop.tenant.service.impl;
-import it.pagopa.interop.conf.springconfig.InteropClientConfigs;
+import it.pagopa.interop.conf.InteropClientConfigs;
import it.pagopa.interop.generated.openapi.clients.bff.ApiClient;
import it.pagopa.interop.generated.openapi.clients.bff.api.TenantsApi;
import it.pagopa.interop.generated.openapi.clients.bff.model.CertifiedAttributesResponse;
@@ -15,7 +15,6 @@
import org.springframework.web.client.RestTemplate;
import java.util.UUID;
-import org.springframework.web.client.RestTemplate;
@Component
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
diff --git a/src/main/java/it/pagopa/pn/client/b2b/pa/interop/config/InteropClientConfigs.java b/interop-qa-tests/src/main/java/it/pagopa/interop/tracing/config/TracingClientConfigs.java
similarity index 69%
rename from src/main/java/it/pagopa/pn/client/b2b/pa/interop/config/InteropClientConfigs.java
rename to interop-qa-tests/src/main/java/it/pagopa/interop/tracing/config/TracingClientConfigs.java
index 62d6d045f..5efadc1eb 100644
--- a/src/main/java/it/pagopa/pn/client/b2b/pa/interop/config/InteropClientConfigs.java
+++ b/interop-qa-tests/src/main/java/it/pagopa/interop/tracing/config/TracingClientConfigs.java
@@ -1,12 +1,13 @@
-package it.pagopa.pn.client.b2b.pa.interop.config;
+package it.pagopa.interop.tracing.config;
-import lombok.*;
+import lombok.Getter;
+import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = "pn.interop.tracing", ignoreUnknownFields = false)
@Getter
@Setter
-public class InteropClientConfigs {
+public class TracingClientConfigs {
private String baseUrl;
private String bearerToken1;
private String bearerToken2;
diff --git a/src/main/java/it/pagopa/pn/client/b2b/pa/interop/IInteropTracingClient.java b/interop-qa-tests/src/main/java/it/pagopa/interop/tracing/service/IInteropTracingClient.java
similarity index 57%
rename from src/main/java/it/pagopa/pn/client/b2b/pa/interop/IInteropTracingClient.java
rename to interop-qa-tests/src/main/java/it/pagopa/interop/tracing/service/IInteropTracingClient.java
index 74638f4bf..2e0f0a4da 100644
--- a/src/main/java/it/pagopa/pn/client/b2b/pa/interop/IInteropTracingClient.java
+++ b/interop-qa-tests/src/main/java/it/pagopa/interop/tracing/service/IInteropTracingClient.java
@@ -1,10 +1,14 @@
-package it.pagopa.pn.client.b2b.pa.interop;
-
-import it.pagopa.interop.client.b2b.generated.openapi.clients.interop.model.*;
-import it.pagopa.pn.client.b2b.pa.service.utils.SettableBearerToken;
+package it.pagopa.interop.tracing.service;
+
+import it.pagopa.interop.authorization.service.utils.SettableBearerToken;
+import it.pagopa.interop.client.b2b.generated.openapi.clients.interop.tracing.model.GetTracingErrorsResponse;
+import it.pagopa.interop.client.b2b.generated.openapi.clients.interop.tracing.model.GetTracingsResponse;
+import it.pagopa.interop.client.b2b.generated.openapi.clients.interop.tracing.model.RecoverTracingResponse;
+import it.pagopa.interop.client.b2b.generated.openapi.clients.interop.tracing.model.ReplaceTracingResponse;
+import it.pagopa.interop.client.b2b.generated.openapi.clients.interop.tracing.model.SubmitTracingResponse;
+import it.pagopa.interop.client.b2b.generated.openapi.clients.interop.tracing.model.TracingState;
import org.springframework.web.client.RestClientException;
-import java.time.LocalDate;
import java.util.List;
import java.util.UUID;
diff --git a/interop-qa-tests/src/main/java/it/pagopa/interop/tracing/service/TracingRetriever.java b/interop-qa-tests/src/main/java/it/pagopa/interop/tracing/service/TracingRetriever.java
new file mode 100644
index 000000000..7c4fcd084
--- /dev/null
+++ b/interop-qa-tests/src/main/java/it/pagopa/interop/tracing/service/TracingRetriever.java
@@ -0,0 +1,18 @@
+package it.pagopa.interop.tracing.service;
+
+import it.pagopa.interop.client.b2b.generated.openapi.clients.interop.tracing.model.GetTracingsResponse;
+import it.pagopa.interop.client.b2b.generated.openapi.clients.interop.tracing.model.TracingState;
+
+import java.util.List;
+
+public class TracingRetriever {
+ private final IInteropTracingClient interopTracingClient;
+
+ public TracingRetriever(IInteropTracingClient interopTracingClient) {
+ this.interopTracingClient = interopTracingClient;
+ }
+
+ public GetTracingsResponse retrieve(int offset, List states) {
+ return interopTracingClient.getTracings(offset, 50, states);
+ }
+}
diff --git a/interop-qa-tests/src/main/java/it/pagopa/interop/tracing/service/impl/AbstractInteropTracingClient.java b/interop-qa-tests/src/main/java/it/pagopa/interop/tracing/service/impl/AbstractInteropTracingClient.java
new file mode 100644
index 000000000..8e2edae55
--- /dev/null
+++ b/interop-qa-tests/src/main/java/it/pagopa/interop/tracing/service/impl/AbstractInteropTracingClient.java
@@ -0,0 +1,79 @@
+package it.pagopa.interop.tracing.service.impl;
+
+import it.pagopa.interop.client.b2b.generated.openapi.clients.interop.tracing.ApiClient;
+import it.pagopa.interop.client.b2b.generated.openapi.clients.interop.tracing.api.HealthApi;
+import it.pagopa.interop.client.b2b.generated.openapi.clients.interop.tracing.api.TracingsApi;
+import it.pagopa.interop.client.b2b.generated.openapi.clients.interop.tracing.model.GetTracingErrorsResponse;
+import it.pagopa.interop.client.b2b.generated.openapi.clients.interop.tracing.model.GetTracingsResponse;
+import it.pagopa.interop.client.b2b.generated.openapi.clients.interop.tracing.model.RecoverTracingResponse;
+import it.pagopa.interop.client.b2b.generated.openapi.clients.interop.tracing.model.ReplaceTracingResponse;
+import it.pagopa.interop.client.b2b.generated.openapi.clients.interop.tracing.model.SubmitTracingResponse;
+import it.pagopa.interop.client.b2b.generated.openapi.clients.interop.tracing.model.TracingState;
+import it.pagopa.interop.tracing.config.TracingClientConfigs;
+import it.pagopa.interop.tracing.service.IInteropTracingClient;
+import org.springframework.core.io.Resource;
+import org.springframework.web.client.RestClientException;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.List;
+import java.util.UUID;
+
+public abstract class AbstractInteropTracingClient implements IInteropTracingClient {
+ private final RestTemplate restTemplate;
+ protected final TracingsApi tracingsApi;
+ protected final HealthApi healthApi;
+ private final TracingClientConfigs tracingClientConfigs;
+ protected BearerTokenType bearerTokenSetted;
+
+ public AbstractInteropTracingClient(RestTemplate restTemplate, TracingClientConfigs tracingClientConfigs, String bearerToken) {
+ this.restTemplate = restTemplate;
+ this.tracingClientConfigs = tracingClientConfigs;
+ this.tracingsApi = new TracingsApi(createApiClient(tracingClientConfigs.getBaseUrl(), bearerToken));
+ this.healthApi = new HealthApi(createApiClient(tracingClientConfigs.getBaseUrl(), bearerToken));
+ }
+
+ protected ApiClient createApiClient(String basePath, String bearerToken) {
+ ApiClient apiClient = new ApiClient(restTemplate);
+ apiClient.setBasePath(basePath);
+ apiClient.setBearerToken(bearerToken);
+ return apiClient;
+ }
+
+ @Override
+ public GetTracingErrorsResponse getTracingErrors(UUID tracingId, Integer offset, Integer limit) throws RestClientException {
+ return tracingsApi.getTracingErrors(tracingId, offset, limit);
+ }
+
+ @Override
+ public GetTracingsResponse getTracings(Integer offset, Integer limit, List states) throws RestClientException {
+ return tracingsApi.getTracings(offset, limit, states);
+ }
+
+ @Override
+ public RecoverTracingResponse recoverTracing(UUID tracingId, Resource _file) throws RestClientException {
+ return tracingsApi.recoverTracing(tracingId, _file);
+ }
+
+ @Override
+ public ReplaceTracingResponse replaceTracing(UUID tracingId, Resource _file) throws RestClientException {
+ return tracingsApi.replaceTracing(tracingId, _file);
+ }
+
+ @Override
+ public SubmitTracingResponse submitTracing(Resource _file, String date) throws RestClientException {
+ return tracingsApi.submitTracing(_file, date);
+ }
+
+ @Override
+ public void getHealthStatus() {
+ healthApi.getStatus();
+ }
+
+ public BearerTokenType getBearerTokenSetted() {
+ return this.bearerTokenSetted;
+ }
+
+ public TracingClientConfigs getTracingClientConfigs() {
+ return tracingClientConfigs;
+ }
+}
diff --git a/interop-qa-tests/src/main/java/it/pagopa/interop/tracing/service/impl/DevAbstractInteropTracingClient.java b/interop-qa-tests/src/main/java/it/pagopa/interop/tracing/service/impl/DevAbstractInteropTracingClient.java
new file mode 100644
index 000000000..96a8f5556
--- /dev/null
+++ b/interop-qa-tests/src/main/java/it/pagopa/interop/tracing/service/impl/DevAbstractInteropTracingClient.java
@@ -0,0 +1,43 @@
+package it.pagopa.interop.tracing.service.impl;
+
+import it.pagopa.interop.authorization.service.utils.IdentityService;
+import it.pagopa.interop.client.b2b.generated.openapi.clients.interop.tracing.api.HealthApi;
+import it.pagopa.interop.client.b2b.generated.openapi.clients.interop.tracing.api.TracingsApi;
+import it.pagopa.interop.tracing.config.TracingClientConfigs;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.beans.factory.config.ConfigurableBeanFactory;
+import org.springframework.context.annotation.Profile;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+@Profile("dev")
+@Component
+@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
+public class DevAbstractInteropTracingClient extends AbstractInteropTracingClient {
+ private BearerTokenType bearerTokenSetted;
+
+ public DevAbstractInteropTracingClient(RestTemplate restTemplate, TracingClientConfigs tracingClientConfigs) {
+ super(restTemplate, tracingClientConfigs, tracingClientConfigs.getBearerToken1());
+ this.bearerTokenSetted = BearerTokenType.TENANT_1;
+ }
+
+ @Override
+ public void setBearerToken(String bearerToken) {
+ switch (bearerToken) {
+ case "TENANT_1" -> {
+ this.tracingsApi.setApiClient(createApiClient(getTracingClientConfigs().getBaseUrl(), getTracingClientConfigs().getBearerToken1()));
+ this.bearerTokenSetted = BearerTokenType.TENANT_1;
+ }
+ case "TENANT_2" -> {
+ this.tracingsApi.setApiClient(createApiClient(getTracingClientConfigs().getBaseUrl(), getTracingClientConfigs().getBearerToken2()));
+ this.bearerTokenSetted = BearerTokenType.TENANT_2;
+ }
+ default -> throw new IllegalStateException("Unexpected value: " + bearerToken);
+ }
+ }
+
+ public BearerTokenType getBearerTokenSetted() {
+ return this.bearerTokenSetted;
+ }
+}
diff --git a/interop-qa-tests/src/main/java/it/pagopa/interop/tracing/service/impl/QAAbstractInteropTracingClient.java b/interop-qa-tests/src/main/java/it/pagopa/interop/tracing/service/impl/QAAbstractInteropTracingClient.java
new file mode 100644
index 000000000..f4b9c55a7
--- /dev/null
+++ b/interop-qa-tests/src/main/java/it/pagopa/interop/tracing/service/impl/QAAbstractInteropTracingClient.java
@@ -0,0 +1,41 @@
+package it.pagopa.interop.tracing.service.impl;
+
+import it.pagopa.interop.authorization.service.utils.IdentityService;
+import it.pagopa.interop.client.b2b.generated.openapi.clients.interop.tracing.api.HealthApi;
+import it.pagopa.interop.client.b2b.generated.openapi.clients.interop.tracing.api.TracingsApi;
+import it.pagopa.interop.tracing.config.TracingClientConfigs;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.beans.factory.config.ConfigurableBeanFactory;
+import org.springframework.context.annotation.Profile;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+@Profile("qa")
+@Component
+@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
+public class QAAbstractInteropTracingClient extends AbstractInteropTracingClient {
+ private IdentityService identityService;
+
+ public QAAbstractInteropTracingClient(RestTemplate restTemplate, TracingClientConfigs tracingClientConfigs, @Qualifier("tracingIdentityService") IdentityService identityService) {
+ super(restTemplate, tracingClientConfigs, identityService.getToken("PA1", null));
+ this.bearerTokenSetted = BearerTokenType.TENANT_1;
+ this.identityService = identityService;
+ }
+
+ @Override
+ public void setBearerToken(String bearerToken) {
+ switch (bearerToken) {
+ case "TENANT_1" -> {
+ this.tracingsApi.setApiClient(createApiClient(getTracingClientConfigs().getBaseUrl(), identityService.getToken("PA1", null)));
+ this.bearerTokenSetted = BearerTokenType.TENANT_1;
+ }
+ case "TENANT_2" -> {
+ this.tracingsApi.setApiClient(createApiClient(getTracingClientConfigs().getBaseUrl(), identityService.getToken("PA2", null)));
+ this.bearerTokenSetted = BearerTokenType.TENANT_2;
+ }
+ default -> throw new IllegalStateException("Unexpected value: " + bearerToken);
+ }
+ }
+
+}
diff --git a/interop-qa-tests/src/main/resources/qa-interop.properties b/interop-qa-tests/src/main/resources/qa-interop.properties
deleted file mode 100644
index 30f83206b..000000000
--- a/interop-qa-tests/src/main/resources/qa-interop.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-bff.base-url=https://selfcare.qa.interop.pagopa.it/1.0/backend-for-frontend
-remote-wellknown-url=https://qa.interop.pagopa.it/.well-known/jwks.json
-session.tokens.duration.seconds=3000
-interop-env=qa
-max-polling-try-ms=50
-max-polling-sleep-ms=1000
\ No newline at end of file
diff --git a/src/main/resources/interop/tracing-error.csv b/interop-qa-tests/src/main/resources/tracing/dev/tracing-error.csv
similarity index 100%
rename from src/main/resources/interop/tracing-error.csv
rename to interop-qa-tests/src/main/resources/tracing/dev/tracing-error.csv
diff --git a/interop-qa-tests/src/main/resources/tracing/dev/tracing-ok.csv b/interop-qa-tests/src/main/resources/tracing/dev/tracing-ok.csv
new file mode 100644
index 000000000..207e0bee0
--- /dev/null
+++ b/interop-qa-tests/src/main/resources/tracing/dev/tracing-ok.csv
@@ -0,0 +1,2 @@
+"date","purpose_id","token_id","status","requests_count"
+"1917-11-30","28874634-6ea6-4def-b200-7377182c71be","99382e29-b0cf-412b-a060-72e421b6d167","200","48"
diff --git a/interop-qa-tests/src/main/resources/tracing/qa/tracing-error.csv b/interop-qa-tests/src/main/resources/tracing/qa/tracing-error.csv
new file mode 100644
index 000000000..8aef59001
--- /dev/null
+++ b/interop-qa-tests/src/main/resources/tracing/qa/tracing-error.csv
@@ -0,0 +1,3 @@
+"date","purpose_id","status","requests_count"
+"2024-08-25","0e1e4c98-6f2e-4f55-90e3-45f7d3f1dbf8","999","48"
+"2024-08-25","","200","47"
diff --git a/interop-qa-tests/src/main/resources/tracing/qa/tracing-ok.csv b/interop-qa-tests/src/main/resources/tracing/qa/tracing-ok.csv
new file mode 100644
index 000000000..3c1861393
--- /dev/null
+++ b/interop-qa-tests/src/main/resources/tracing/qa/tracing-ok.csv
@@ -0,0 +1,3 @@
+"date","purpose_id","status","token_id","requests_count"
+"2025-02-13","59b568cc-a097-4217-9c58-66fa76389fe0","200","c7ebf39e-e323-46f1-92d8-0482bcc3bfe3","555"
+"2025-02-13","59b568cc-a097-4217-9c58-66fa76389fe0","404","c7ebf39e-e323-46f1-92d8-0482bcc3bfe3","0"
diff --git a/interop-qa-tests/src/main/resources/tracing/tracing-error.csv b/interop-qa-tests/src/main/resources/tracing/tracing-error.csv
new file mode 100644
index 000000000..8aef59001
--- /dev/null
+++ b/interop-qa-tests/src/main/resources/tracing/tracing-error.csv
@@ -0,0 +1,3 @@
+"date","purpose_id","status","requests_count"
+"2024-08-25","0e1e4c98-6f2e-4f55-90e3-45f7d3f1dbf8","999","48"
+"2024-08-25","","200","47"
diff --git a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/AuthorizationTest.java b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/AuthorizationTest.java
index 8c4528579..47691a4e1 100644
--- a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/AuthorizationTest.java
+++ b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/AuthorizationTest.java
@@ -1,8 +1,16 @@
package it.pagopa.pn.interop.cucumber;
-import org.junit.platform.suite.api.*;
+import org.junit.platform.suite.api.ConfigurationParameter;
+import org.junit.platform.suite.api.ConfigurationParameters;
+import org.junit.platform.suite.api.ExcludeTags;
+import org.junit.platform.suite.api.IncludeEngines;
+import org.junit.platform.suite.api.IncludeTags;
+import org.junit.platform.suite.api.SelectClasspathResource;
+import org.junit.platform.suite.api.Suite;
-import static io.cucumber.junit.platform.engine.Constants.*;
+import static io.cucumber.junit.platform.engine.Constants.EXECUTION_MODE_FEATURE_PROPERTY_NAME;
+import static io.cucumber.junit.platform.engine.Constants.GLUE_PROPERTY_NAME;
+import static io.cucumber.junit.platform.engine.Constants.PLUGIN_PROPERTY_NAME;
@Suite
@IncludeEngines("cucumber")
diff --git a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/InteropTracingTest.java b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/InteropTracingTest.java
new file mode 100644
index 000000000..ddda9fee5
--- /dev/null
+++ b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/InteropTracingTest.java
@@ -0,0 +1,28 @@
+package it.pagopa.pn.interop.cucumber;
+
+import org.junit.platform.suite.api.ConfigurationParameter;
+import org.junit.platform.suite.api.ConfigurationParameters;
+import org.junit.platform.suite.api.ExcludeTags;
+import org.junit.platform.suite.api.IncludeEngines;
+import org.junit.platform.suite.api.IncludeTags;
+import org.junit.platform.suite.api.SelectClasspathResource;
+import org.junit.platform.suite.api.Suite;
+
+import static io.cucumber.junit.platform.engine.Constants.EXECUTION_MODE_FEATURE_PROPERTY_NAME;
+import static io.cucumber.junit.platform.engine.Constants.GLUE_PROPERTY_NAME;
+import static io.cucumber.junit.platform.engine.Constants.PLUGIN_PROPERTY_NAME;
+
+@Suite
+@IncludeEngines("cucumber")
+@SelectClasspathResource("it/pagopa/pn/cucumber")
+@ConfigurationParameters({
+ @ConfigurationParameter(key = PLUGIN_PROPERTY_NAME, value = "pretty"),
+ @ConfigurationParameter(key = PLUGIN_PROPERTY_NAME, value = "json:target/cucumber-report.json," +
+ "html:target/cucumber-report.html"),
+ @ConfigurationParameter(key = GLUE_PROPERTY_NAME, value = "it.pagopa.pn.interop.cucumber.steps"),
+ @ConfigurationParameter(key = EXECUTION_MODE_FEATURE_PROPERTY_NAME, value = "same_thread"),
+})
+@IncludeTags({"interopTracingCsv"})
+@ExcludeTags({"ignore"})
+public class InteropTracingTest {
+}
diff --git a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/DataPreparationService.java b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/DataPreparationService.java
index 78b54f6c7..fe199a275 100644
--- a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/DataPreparationService.java
+++ b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/DataPreparationService.java
@@ -227,7 +227,7 @@ public UUID createAgreementWithGivenState(AgreementState agreementState, UUID eS
}
public UUID createAgreement(UUID eServiceID, UUID descriptorId) {
- httpCallExecutor.performCall(() -> agreementClient.createAgreement(sharedStepsContext.getXCorrelationId(), new AgreementPayload().eserviceId(eServiceID).descriptorId(descriptorId)));
+ httpCallExecutor.performCall(() -> agreementClient.createAgreement(new AgreementPayload().eserviceId(eServiceID).descriptorId(descriptorId)));
assertValidResponse();
UUID agreementId = ((CreatedResource) httpCallExecutor.getResponse()).getId();
pollingService.makePolling(
diff --git a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/InteropCucumberSpringIntegration.java b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/InteropCucumberSpringIntegration.java
index ae38fe1e3..9f55e2dca 100644
--- a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/InteropCucumberSpringIntegration.java
+++ b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/InteropCucumberSpringIntegration.java
@@ -8,34 +8,38 @@
import it.pagopa.interop.attribute.service.IAttributeApiClient;
import it.pagopa.interop.attribute.service.impl.AttributeApiClientImpl;
import it.pagopa.interop.authorization.service.IAuthorizationClient;
-import it.pagopa.interop.authorization.service.factory.SessionTokenFactory;
import it.pagopa.interop.authorization.service.impl.AuthorizationClientImpl;
import it.pagopa.interop.authorization.service.impl.ProducerClientImpl;
import it.pagopa.interop.authorization.service.utils.ConfigFileReader;
import it.pagopa.interop.authorization.service.utils.IdentityService;
import it.pagopa.interop.authorization.service.utils.PollingService;
-import it.pagopa.interop.conf.springconfig.InteropClientConfigs;
+import it.pagopa.interop.conf.InteropClientConfigs;
import it.pagopa.interop.config.springconfig.springconfig.InteropRestTemplateConfiguration;
+import it.pagopa.interop.config.springconfig.springconfig.JwtTokenServiceConfiguration;
import it.pagopa.interop.delegate.service.impl.DelegationApiClientImpl;
import it.pagopa.interop.delegate.service.impl.ProducerDelegationsApiClientImpl;
import it.pagopa.interop.purpose.RiskAnalysisDataInitializer;
import it.pagopa.interop.purpose.service.impl.PurposeApiClientImpl;
import it.pagopa.interop.tenant.service.ITenantsApi;
import it.pagopa.interop.tenant.service.impl.TenantsApiClientImpl;
+import it.pagopa.interop.tracing.config.TracingClientConfigs;
+import it.pagopa.interop.tracing.service.TracingRetriever;
+import it.pagopa.interop.tracing.service.impl.DevAbstractInteropTracingClient;
+import it.pagopa.interop.tracing.service.impl.QAAbstractInteropTracingClient;
import it.pagopa.interop.utils.HttpCallExecutor;
+import it.pagopa.pn.interop.cucumber.utility.TracingFileUtils;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.scheduling.annotation.EnableScheduling;
-//@ComponentScan(basePackages = {"it.pagopa.pn.interop.cucumber"})
@CucumberContextConfiguration
@SpringBootTest(classes = {
IAuthorizationClient.class,
AuthorizationClientImpl.class,
InteropRestTemplateConfiguration.class,
+ JwtTokenServiceConfiguration.class,
IdentityService.class,
PollingService.class,
- SessionTokenFactory.class,
ProducerClientImpl.class,
DataPreparationService.class,
HttpCallExecutor.class,
@@ -45,7 +49,6 @@
IAttributeApiClient.class,
ITenantsApi.class,
TenantsApiClientImpl.class,
- InteropClientConfigs.class,
PurposeApiClientImpl.class,
IEServiceClient.class,
EServiceApiClientImpl.class,
@@ -53,7 +56,13 @@
ClientTokenConfigurator.class,
ProducerDelegationsApiClientImpl.class,
DelegationApiClientImpl.class,
- ConfigFileReader.class
+ ConfigFileReader.class,
+ InteropClientConfigs.class,
+ TracingFileUtils.class,
+ TracingClientConfigs.class,
+ TracingRetriever.class,
+ DevAbstractInteropTracingClient.class,
+ QAAbstractInteropTracingClient.class
})
@EnableScheduling
@EnableConfigurationProperties
diff --git a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/SharedStepsContext.java b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/SharedStepsContext.java
index 43b35a2d1..3c0d0e019 100644
--- a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/SharedStepsContext.java
+++ b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/SharedStepsContext.java
@@ -11,6 +11,7 @@
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope;
@@ -37,7 +38,7 @@ public class SharedStepsContext {
public SharedStepsContext(
HttpCallExecutor httpCallExecutor,
- IdentityService identityService,
+ @Qualifier("interopIdentityService") IdentityService identityService,
PollingService pollingService) {
this.httpCallExecutor = httpCallExecutor;
this.identityService = identityService;
diff --git a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/purpose/PurposeCommonStep.java b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/purpose/PurposeCommonStep.java
index 3394704b0..023e824aa 100644
--- a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/purpose/PurposeCommonStep.java
+++ b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/purpose/PurposeCommonStep.java
@@ -10,6 +10,7 @@
import it.pagopa.pn.interop.cucumber.steps.common.PurposeCommonContext;
import it.pagopa.pn.interop.cucumber.steps.DataPreparationService;
import it.pagopa.pn.interop.cucumber.steps.SharedStepsContext;
+import org.springframework.beans.factory.annotation.Qualifier;
import java.util.List;
import java.util.UUID;
@@ -22,7 +23,7 @@ public class PurposeCommonStep {
private final SharedStepsContext sharedStepsContext;
public PurposeCommonStep(ClientTokenConfigurator clientTokenConfigurator,
- IdentityService identityService,
+ @Qualifier("interopIdentityService") IdentityService identityService,
DataPreparationService dataPreparationService,
SharedStepsContext sharedStepsContext) {
this.clientTokenConfigurator = clientTokenConfigurator;
diff --git a/src/test/java/it/pagopa/pn/cucumber/steps/pa/TracingSteps.java b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/tracing/TracingSteps.java
similarity index 81%
rename from src/test/java/it/pagopa/pn/cucumber/steps/pa/TracingSteps.java
rename to interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/tracing/TracingSteps.java
index b1b9f23d9..32d554ef2 100644
--- a/src/test/java/it/pagopa/pn/cucumber/steps/pa/TracingSteps.java
+++ b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/tracing/TracingSteps.java
@@ -1,35 +1,37 @@
-package it.pagopa.pn.cucumber.steps.pa;
+package it.pagopa.pn.interop.cucumber.steps.tracing;
import io.cucumber.java.en.And;
import io.cucumber.java.en.Given;
import io.cucumber.java.en.Then;
import io.cucumber.java.en.When;
-import it.pagopa.interop.client.b2b.generated.openapi.clients.interop.model.*;
-import it.pagopa.pn.client.b2b.pa.interop.IInteropTracingClient;
-import it.pagopa.pn.client.b2b.pa.interop.polling.dto.PnPollingInterop;
-import it.pagopa.pn.client.b2b.pa.interop.polling.dto.PnTracingResponse;
-import it.pagopa.pn.client.b2b.pa.interop.service.impl.PnPollingInteropTracing;
-import it.pagopa.pn.client.b2b.pa.polling.design.PnPollingFactory;
-import it.pagopa.pn.client.b2b.pa.polling.dto.PnPollingParameter;
-import it.pagopa.pn.client.b2b.pa.service.utils.SettableBearerToken;
-import it.pagopa.pn.cucumber.interop.utility.TracingFileUtils;
+import it.pagopa.interop.authorization.service.utils.PollingService;
+import it.pagopa.interop.authorization.service.utils.SettableBearerToken;
+import it.pagopa.interop.client.b2b.generated.openapi.clients.interop.tracing.model.GetTracingErrorsResponse;
+import it.pagopa.interop.client.b2b.generated.openapi.clients.interop.tracing.model.GetTracingErrorsResponseResults;
+import it.pagopa.interop.client.b2b.generated.openapi.clients.interop.tracing.model.GetTracingsResponse;
+import it.pagopa.interop.client.b2b.generated.openapi.clients.interop.tracing.model.GetTracingsResponseResults;
+import it.pagopa.interop.client.b2b.generated.openapi.clients.interop.tracing.model.SubmitTracingResponse;
+import it.pagopa.interop.client.b2b.generated.openapi.clients.interop.tracing.model.TracingState;
+import it.pagopa.interop.tracing.service.IInteropTracingClient;
+import it.pagopa.interop.tracing.service.TracingRetriever;
+import it.pagopa.pn.interop.cucumber.utility.TracingFileUtils;
import org.junit.jupiter.api.Assertions;
import org.opentest4j.AssertionFailedError;
-import org.springframework.core.io.*;
+import org.springframework.core.io.Resource;
import org.springframework.web.client.HttpStatusCodeException;
import java.time.LocalDate;
-import java.util.*;
-
-import static it.pagopa.pn.client.b2b.pa.polling.design.PnPollingStrategy.INTEROP_TRACING;
-import static org.assertj.core.api.Assertions.assertThat;
+import java.util.List;
+import java.util.Objects;
+import java.util.UUID;
public class TracingSteps {
private static final int OFFSET_VALUE = 0;
private static final int LIMIT_VALUE = 50;
- private final PnPollingFactory pnPollingFactory;
private final IInteropTracingClient interopTracingClient;
private final TracingFileUtils tracingFileUtils;
+ private final PollingService pollingService;
+ private final TracingRetriever tracingRetriever;
private SubmitTracingResponse submitTracingResponse;
private GetTracingsResponse getTracingsResponse;
@@ -42,29 +44,34 @@ public class TracingSteps {
* @param pnPollingFactory {@link PnPollingFactory}
* @param interopTracingClient {@link IInteropTracingClient}
* @param tracingFileUtils {@link TracingFileUtils}
+ * @param pollingService {@link PollingService}
*/
- public TracingSteps(PnPollingFactory pnPollingFactory, IInteropTracingClient interopTracingClient, TracingFileUtils tracingFileUtils) {
- this.pnPollingFactory = pnPollingFactory;
+ public TracingSteps(IInteropTracingClient interopTracingClient,
+ TracingFileUtils tracingFileUtils, PollingService pollingService, TracingRetriever tracingRetriever) {
this.interopTracingClient = interopTracingClient;
this.tracingFileUtils = tracingFileUtils;
+ this.pollingService = pollingService;
+ this.tracingRetriever = tracingRetriever;
}
@Given("l'utenza {string} effettua le chiamate")
public void selectOperator(String operator) {
switch (operator.trim().toLowerCase()) {
- case "tenant1" -> interopTracingClient.setBearerToken(SettableBearerToken.BearerTokenType.TENANT_1);
- case "tenant2" -> interopTracingClient.setBearerToken(SettableBearerToken.BearerTokenType.TENANT_2);
+ case "tenant1" -> interopTracingClient.setBearerToken(SettableBearerToken.BearerTokenType.TENANT_1.toString());
+ case "tenant2" -> interopTracingClient.setBearerToken(SettableBearerToken.BearerTokenType.TENANT_2.toString());
default -> throw new IllegalStateException("Unexpected value: " + operator.trim().toLowerCase());
}
}
@Given("viene aggiornato il file CSV con la prima data disponibile")
public void updateCsv() {
- submissionDate = interopTracingClient.getTracings(OFFSET_VALUE, LIMIT_VALUE, null).getResults().stream()
+ GetTracingsResponse tracingsResponse = interopTracingClient.getTracings(OFFSET_VALUE, LIMIT_VALUE, null);
+ submissionDate = tracingsResponse.getResults().stream()
.map(GetTracingsResponseResults::getDate)
.min(LocalDate::compareTo)
- .get().minusDays(1);
- tracingFileUtils.updateCsv(submissionDate.toString());
+ .map(date -> date.minusDays(1))
+ .orElseGet(() -> LocalDate.now().minusDays(1));
+ tracingFileUtils.updateCsv(submissionDate);
}
@When("viene sottomesso il file CSV {string}")
@@ -147,7 +154,7 @@ public void verifyGetTracingErrorResponse() {
createExpectedResponse("INVALID_PURPOSE", "purpose_id: Invalid uuid", "", 2),
createExpectedResponse("INVALID_DATE", String.format("date: Date field (2024-08-25) in csv is different from tracing date (%s).", submissionDate.toString()), "", 2)
);
- assertThat(getTracingErrorsResponse.getResults()).containsAll(expectedResult);
+ org.assertj.core.api.Assertions.assertThat(getTracingErrorsResponse.getResults()).containsAll(expectedResult);
}
@When("gli errori riscontrati vengono corretti passando il csv {string}")
@@ -210,26 +217,25 @@ public void recoverMissingCsvForDate(String fileType) {
Assertions.assertNotNull(getTracingsResponse, "There was an error while retrieving the tracing with MISSING status!");
Assertions.assertFalse(getTracingsResponse.getResults().isEmpty(), "No tracing with MISSING status found!");
GetTracingsResponseResults tracingsResponseResults = getTracingsResponse.getResults().get(0);
- tracingFileUtils.updateCsv(tracingsResponseResults.getDate().toString());
+ tracingFileUtils.updateCsv(tracingsResponseResults.getDate());
submissionDate = tracingsResponseResults.getDate();
uploadCsv(fileType);
}
@And("si attende che il file di tracing caricato passi in stato {string}")
- public void waitForStatus(String status) {
- PnPollingInteropTracing interopTracing = (PnPollingInteropTracing) pnPollingFactory.getPollingService(INTEROP_TRACING);
- PnTracingResponse pnTracingResponse = interopTracing.waitForEvent(null,
- PnPollingParameter.builder()
- .value(INTEROP_TRACING)
- .pollingType(PnPollingParameter.PollingType.RAPID)
- .pnPollingInterop(new PnPollingInterop(submitTracingResponse.getTracingId().toString(), TracingState.fromValue(status)))
- .build());
- Assertions.assertTrue(pnTracingResponse.getResult());
+ public void waitForStatus(String state) {
+ pollingService.makePolling(
+ () -> tracingRetriever.retrieve(0, List.of(TracingState.fromValue(state))),
+ res -> res.getResults().stream()
+ .filter(x -> x.getTracingId().equals(submitTracingResponse.getTracingId().toString()))
+ .map(GetTracingsResponseResults::getState)
+ .anyMatch(tracingState -> tracingState.equals(state)),
+ ""
+ );
}
@Then("viene recuperato il file di tracing appena caricato e si verifica che lo stato sia {string}")
public void retrieveTracingAndVerifyStatus(String status) {
- List results = new ArrayList<>();
GetTracingsResponseResults result;
int attempt = 0;
int totalPages;
diff --git a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/utility/TracingFileUtils.java b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/utility/TracingFileUtils.java
new file mode 100644
index 000000000..fa81437a0
--- /dev/null
+++ b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/utility/TracingFileUtils.java
@@ -0,0 +1,63 @@
+package it.pagopa.pn.interop.cucumber.utility;
+
+import com.opencsv.CSVReader;
+import com.opencsv.CSVWriter;
+import com.opencsv.exceptions.CsvException;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.ResourceLoader;
+import org.springframework.stereotype.Component;
+
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.time.LocalDate;
+import java.util.List;
+
+@Component
+public class TracingFileUtils {
+ @Value("${tracing.success.csv.filepath}")
+ private String tracingOkCsvPath;
+ @Value("${tracing.error.csv.filepath}")
+ private String tracingErrorCsvPath;
+ private final ResourceLoader resourceLoader;
+
+ public TracingFileUtils(ResourceLoader resourceLoader) {
+ this.resourceLoader = resourceLoader;
+ }
+
+ public void updateCsv(LocalDate date) {
+ try {
+ // Read the csv file before overriding it with the correct date.
+ FileReader fileReader = new FileReader(tracingOkCsvPath);
+ CSVReader csvReader = new CSVReader(fileReader);
+ // Read the header (first row) of the CSV file
+ String[] header = csvReader.readNext();
+ // Read all the rows (excluding the header)
+ List allRows = csvReader.readAll();
+ csvReader.close();
+
+ FileWriter fileWriter = new FileWriter(tracingOkCsvPath);
+ CSVWriter csvWriter = new CSVWriter(fileWriter);
+ // Write the header back to the CSV file
+ csvWriter.writeNext(header);
+ // Write all the rows back and update the first column with the provided date
+ for (String[] nextLine : allRows) {
+ nextLine[0] = date.toString();
+ csvWriter.writeNext(nextLine);
+ }
+ csvWriter.close();
+
+ } catch (CsvException | IOException ex) {
+ throw new RuntimeException("There was an error while generating the csv file: " + ex);
+ }
+ }
+
+ public Resource getCsvFile(String file) {
+ return switch (file.trim().toLowerCase()) {
+ case "corretto" -> resourceLoader.getResource("file:" + tracingOkCsvPath);
+ case "errato" -> resourceLoader.getResource("file:" + tracingErrorCsvPath);
+ default -> throw new IllegalStateException("Unexpected value: " + file.trim().toLowerCase());
+ };
+ }
+}
diff --git a/src/test/resources/it/pagopa/pn/cucumber/interop/InteropTracing.feature b/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/tracing/interop-tracing.feature
similarity index 100%
rename from src/test/resources/it/pagopa/pn/cucumber/interop/InteropTracing.feature
rename to interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/tracing/interop-tracing.feature
diff --git a/pom.xml b/pom.xml
index dedda5546..df798b48e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1942,40 +1942,6 @@
-
- generate-external-interop-client
-
- generate
-
- process-resources
-
-
- OffsetDateTime=java.lang.String
-
- https://raw.githubusercontent.com/pagopa/interop-tracing-core/refs/heads/develop/packages/api/open-api/api-external-interop-v1.yaml
- java
- resttemplate
- false
- false
- true
-
- it.pagopa.interop.client.b2b.generated.openapi.clients.interop.api
- it.pagopa.interop.client.b2b.generated.openapi.clients.interop.model
- java8
- none
- source
- false
- true
- false
-
- @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL)
-
-
- it.pagopa.interop.client.b2b.generated.openapi.clients.interop.api
- it.pagopa.interop.client.b2b.generated.openapi.clients.interop.model
-
-
-
generate-external-templates-engine-client
diff --git a/src/main/java/it/pagopa/pn/client/b2b/pa/interop/config/springconfig/InteropConfiguration.java b/src/main/java/it/pagopa/pn/client/b2b/pa/interop/config/springconfig/InteropConfiguration.java
deleted file mode 100644
index c15e594f7..000000000
--- a/src/main/java/it/pagopa/pn/client/b2b/pa/interop/config/springconfig/InteropConfiguration.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package it.pagopa.pn.client.b2b.pa.interop.config.springconfig;
-
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.PropertySource;
-
-@Configuration
-@PropertySource( value = "file:config/interop-tracing-dev.properties", ignoreResourceNotFound = true )
-public class InteropConfiguration {
-}
diff --git a/src/main/java/it/pagopa/pn/client/b2b/pa/interop/polling/dto/PnPollingInterop.java b/src/main/java/it/pagopa/pn/client/b2b/pa/interop/polling/dto/PnPollingInterop.java
deleted file mode 100644
index 3242b9e11..000000000
--- a/src/main/java/it/pagopa/pn/client/b2b/pa/interop/polling/dto/PnPollingInterop.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package it.pagopa.pn.client.b2b.pa.interop.polling.dto;
-
-import it.pagopa.interop.client.b2b.generated.openapi.clients.interop.model.TracingState;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-import lombok.Setter;
-
-@Getter
-@Setter
-@AllArgsConstructor
-public class PnPollingInterop {
- private String tracingId;
- private TracingState status;
-}
diff --git a/src/main/java/it/pagopa/pn/client/b2b/pa/interop/polling/dto/PnTracingResponse.java b/src/main/java/it/pagopa/pn/client/b2b/pa/interop/polling/dto/PnTracingResponse.java
deleted file mode 100644
index 73364e2ac..000000000
--- a/src/main/java/it/pagopa/pn/client/b2b/pa/interop/polling/dto/PnTracingResponse.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package it.pagopa.pn.client.b2b.pa.interop.polling.dto;
-
-import it.pagopa.interop.client.b2b.generated.openapi.clients.interop.model.GetTracingsResponse;
-import it.pagopa.pn.client.b2b.pa.polling.dto.PnPollingResponse;
-import lombok.Getter;
-import lombok.Setter;
-
-@Getter
-@Setter
-public class PnTracingResponse extends PnPollingResponse {
- private GetTracingsResponse getTracingsResponse;
-}
diff --git a/src/main/java/it/pagopa/pn/client/b2b/pa/interop/service/impl/InteropTracingClientImpl.java b/src/main/java/it/pagopa/pn/client/b2b/pa/interop/service/impl/InteropTracingClientImpl.java
deleted file mode 100644
index bf77df715..000000000
--- a/src/main/java/it/pagopa/pn/client/b2b/pa/interop/service/impl/InteropTracingClientImpl.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package it.pagopa.pn.client.b2b.pa.interop.service.impl;
-
-import it.pagopa.interop.client.b2b.generated.openapi.clients.interop.ApiClient;
-import it.pagopa.interop.client.b2b.generated.openapi.clients.interop.api.HealthApi;
-import it.pagopa.interop.client.b2b.generated.openapi.clients.interop.api.TracingsApi;
-import it.pagopa.interop.client.b2b.generated.openapi.clients.interop.model.*;
-import it.pagopa.pn.client.b2b.pa.interop.config.InteropClientConfigs;
-import it.pagopa.pn.client.b2b.pa.interop.IInteropTracingClient;
-import org.springframework.beans.factory.config.ConfigurableBeanFactory;
-import org.springframework.context.annotation.Scope;
-import org.springframework.core.io.Resource;
-import org.springframework.stereotype.Component;
-import org.springframework.web.client.RestClientException;
-import org.springframework.web.client.RestTemplate;
-
-import java.util.List;
-import java.util.UUID;
-
-@Component
-@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
-public class InteropTracingClientImpl implements IInteropTracingClient {
- private final RestTemplate restTemplate;
- private final TracingsApi tracingsApi;
- private final HealthApi healthApi;
- private final InteropClientConfigs interopClientConfigs;
- private BearerTokenType bearerTokenSetted;
-
- public InteropTracingClientImpl(RestTemplate restTemplate, InteropClientConfigs interopClientConfigs) {
- this.restTemplate = restTemplate;
- this.interopClientConfigs = interopClientConfigs;
- this.tracingsApi = new TracingsApi(createApiClient(interopClientConfigs.getBaseUrl(), interopClientConfigs.getBearerToken1()));
- this.healthApi = new HealthApi(createApiClient(interopClientConfigs.getBaseUrl(), interopClientConfigs.getBearerToken1()));
- this.bearerTokenSetted = BearerTokenType.TENANT_1;
- }
-
- private ApiClient createApiClient(String basePath, String bearerToken) {
- ApiClient apiClient = new ApiClient(restTemplate);
- apiClient.setBasePath(basePath);
- apiClient.setBearerToken(bearerToken);
- return apiClient;
- }
-
- @Override
- public GetTracingErrorsResponse getTracingErrors(UUID tracingId, Integer offset, Integer limit) throws RestClientException {
- return tracingsApi.getTracingErrors(tracingId, offset, limit);
- }
-
- @Override
- public GetTracingsResponse getTracings(Integer offset, Integer limit, List states) throws RestClientException {
- return tracingsApi.getTracings(offset, limit, states);
- }
-
- @Override
- public RecoverTracingResponse recoverTracing(UUID tracingId, Resource _file) throws RestClientException {
- return tracingsApi.recoverTracing(tracingId, _file);
- }
-
- @Override
- public ReplaceTracingResponse replaceTracing(UUID tracingId, Resource _file) throws RestClientException {
- return tracingsApi.replaceTracing(tracingId, _file);
- }
-
- @Override
- public SubmitTracingResponse submitTracing(Resource _file, String date) throws RestClientException {
- return tracingsApi.submitTracing(_file, date);
- }
-
- @Override
- public void getHealthStatus() {
- healthApi.getStatus();
- }
-
- @Override
- public boolean setBearerToken(BearerTokenType bearerToken) {
- switch (bearerToken) {
- case TENANT_1 -> {
- this.tracingsApi.setApiClient(createApiClient(interopClientConfigs.getBaseUrl(), interopClientConfigs.getBearerToken1()));
- this.bearerTokenSetted = BearerTokenType.TENANT_1;
- }
- case TENANT_2 -> {
- this.tracingsApi.setApiClient(createApiClient(interopClientConfigs.getBaseUrl(), interopClientConfigs.getBearerToken2()));
- this.bearerTokenSetted = BearerTokenType.TENANT_2;
- }
- default -> throw new IllegalStateException("Unexpected value: " + bearerToken);
- }
- return true;
- }
-
- @Override
- public BearerTokenType getBearerTokenSetted() {
- return this.bearerTokenSetted;
- }
-}
diff --git a/src/main/java/it/pagopa/pn/client/b2b/pa/interop/service/impl/PnPollingInteropTracing.java b/src/main/java/it/pagopa/pn/client/b2b/pa/interop/service/impl/PnPollingInteropTracing.java
deleted file mode 100644
index 3e6df9254..000000000
--- a/src/main/java/it/pagopa/pn/client/b2b/pa/interop/service/impl/PnPollingInteropTracing.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package it.pagopa.pn.client.b2b.pa.interop.service.impl;
-
-import it.pagopa.interop.client.b2b.generated.openapi.clients.interop.model.GetTracingsResponse;
-import it.pagopa.interop.client.b2b.generated.openapi.clients.interop.model.GetTracingsResponseResults;
-import it.pagopa.interop.client.b2b.generated.openapi.clients.interop.model.TracingState;
-import it.pagopa.pn.client.b2b.pa.interop.IInteropTracingClient;
-import it.pagopa.pn.client.b2b.pa.interop.polling.dto.PnTracingResponse;
-import it.pagopa.pn.client.b2b.pa.polling.design.PnPollingStrategy;
-import it.pagopa.pn.client.b2b.pa.polling.design.PnPollingTemplate;
-import it.pagopa.pn.client.b2b.pa.polling.dto.PnPollingParameter;
-import it.pagopa.pn.client.b2b.pa.polling.exception.PnPollingException;
-import it.pagopa.pn.client.b2b.pa.utils.TimingForPolling;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.config.ConfigurableBeanFactory;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-import java.util.concurrent.Callable;
-import java.util.function.Predicate;
-
-@Service(PnPollingStrategy.INTEROP_TRACING)
-@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
-@Slf4j
-public class PnPollingInteropTracing extends PnPollingTemplate {
- private static final int OFFSET_VALUE = 0;
- private static final int LIMIT_VALUE = 50;
- protected final TimingForPolling timingForPolling;
- private final IInteropTracingClient interopTracingClient;
- private GetTracingsResponse pollingResponse;
-
- public PnPollingInteropTracing(TimingForPolling timingForPolling, IInteropTracingClient interopTracingClient) {
- this.timingForPolling = timingForPolling;
- this.interopTracingClient = interopTracingClient;
- }
-
- @Override
- protected Callable getPollingResponse(String id, PnPollingParameter pnPollingParameter) {
- return () -> {
- PnTracingResponse pnTracingResponse = new PnTracingResponse();
- GetTracingsResponse getTracingsResponse;
- try {
- getTracingsResponse = interopTracingClient.getTracings(OFFSET_VALUE, LIMIT_VALUE, List.of(pnPollingParameter.getPnPollingInterop().getStatus()));
- } catch (Exception exception) {
- log.error("There was an error while retrieving all the tracings!");
- throw new PnPollingException(exception.getMessage());
- }
- pnTracingResponse.setGetTracingsResponse(getTracingsResponse);
- this.pollingResponse = getTracingsResponse;
- return pnTracingResponse;
- };
- }
-
- @Override
- protected Predicate checkCondition(String id, PnPollingParameter pnPollingParameter) {
- return pnTracingResponse -> {
- pnTracingResponse.setResult(
- pnTracingResponse.getGetTracingsResponse().getResults().stream()
- .filter(x -> pnPollingParameter.getPnPollingInterop().getTracingId().equals(x.getTracingId()))
- .map(GetTracingsResponseResults::getState)
- .map(TracingState::fromValue)
- .anyMatch(status -> pnPollingParameter.getPnPollingInterop().getStatus().equals(status)));
- return pnTracingResponse.getResult();
- };
- }
-
- @Override
- protected PnTracingResponse getException(Exception exception) {
- PnTracingResponse pnTracingResponse = new PnTracingResponse();
- pnTracingResponse.setGetTracingsResponse(this.pollingResponse);
- pnTracingResponse.setResult(false);
- return pnTracingResponse;
- }
-
- @Override
- protected Integer getPollInterval(String value) {
- TimingForPolling.TimingResult timingResult = timingForPolling.getTimingForElement(value, false, true);
- return timingResult.waiting();
- }
-
- @Override
- protected Integer getAtMost(String value) {
- TimingForPolling.TimingResult timingResult = timingForPolling.getTimingForElement(value, false, true);
- return timingResult.waiting() * timingResult.numCheck();
- }
-
- @Override
- public boolean setApiKeys(ApiKeyType apiKey) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void setApiKey(String apiKey) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public ApiKeyType getApiKeySetted() {
- throw new UnsupportedOperationException();
- }
-}
diff --git a/src/main/java/it/pagopa/pn/client/b2b/pa/polling/dto/PnPollingParameter.java b/src/main/java/it/pagopa/pn/client/b2b/pa/polling/dto/PnPollingParameter.java
index 1da2ca808..3d45c7bca 100644
--- a/src/main/java/it/pagopa/pn/client/b2b/pa/polling/dto/PnPollingParameter.java
+++ b/src/main/java/it/pagopa/pn/client/b2b/pa/polling/dto/PnPollingParameter.java
@@ -1,6 +1,5 @@
package it.pagopa.pn.client.b2b.pa.polling.dto;
-import it.pagopa.pn.client.b2b.pa.interop.polling.dto.PnPollingInterop;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@@ -20,5 +19,4 @@ public class PnPollingParameter {
public enum PollingType {SLOW, RAPID, SHORT}
private PnPollingPredicate pnPollingPredicate;
private PnPollingWebhook pnPollingWebhook;
- private PnPollingInterop pnPollingInterop;
}
\ No newline at end of file
diff --git a/src/main/resources/interop/tracing-ok.csv b/src/main/resources/interop/tracing-ok.csv
deleted file mode 100644
index 19f96bbfa..000000000
--- a/src/main/resources/interop/tracing-ok.csv
+++ /dev/null
@@ -1,2 +0,0 @@
-"date","purpose_id","status","requests_count"
-"2024-08-06","28874634-6ea6-4def-b200-7377182c71be","200","48"
diff --git a/src/test/java/it/pagopa/pn/cucumber/interop/InteropTracingTest.java b/src/test/java/it/pagopa/pn/cucumber/interop/InteropTracingTest.java
deleted file mode 100644
index 28fff31b8..000000000
--- a/src/test/java/it/pagopa/pn/cucumber/interop/InteropTracingTest.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package it.pagopa.pn.cucumber.interop;
-
-import org.junit.platform.suite.api.*;
-
-import static io.cucumber.junit.platform.engine.Constants.*;
-
-@Suite
-@IncludeEngines("cucumber")
-@SelectClasspathResource("it/pagopa/pn/cucumber/interop")
-@ConfigurationParameters({
- @ConfigurationParameter(key = PLUGIN_PROPERTY_NAME, value = "pretty"),
- @ConfigurationParameter(key = PLUGIN_PROPERTY_NAME, value = "json:target/cucumber-report.json," +
- "html:target/cucumber-report.html"),
- @ConfigurationParameter(key = GLUE_PROPERTY_NAME, value = "it.pagopa.pn.cucumber.steps"),
- @ConfigurationParameter(key = EXECUTION_MODE_FEATURE_PROPERTY_NAME, value = "same_thread"),
-})
-@IncludeTags({"interopTracingCsv"})
-@ExcludeTags({"ignore"})
-public class InteropTracingTest {
-}
diff --git a/src/test/java/it/pagopa/pn/cucumber/interop/utility/TracingFileUtils.java b/src/test/java/it/pagopa/pn/cucumber/interop/utility/TracingFileUtils.java
deleted file mode 100644
index 8d68c8cfd..000000000
--- a/src/test/java/it/pagopa/pn/cucumber/interop/utility/TracingFileUtils.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package it.pagopa.pn.cucumber.interop.utility;
-
-import com.opencsv.CSVWriter;
-import org.opentest4j.AssertionFailedError;
-import org.springframework.core.io.Resource;
-import org.springframework.core.io.ResourceLoader;
-import org.springframework.stereotype.Component;
-
-import java.io.*;
-
-@Component
-public class TracingFileUtils {
- private static final String CSV_OK_FILEPATH = "src/main/resources/interop/tracing-ok.csv";
- private static final String CSV_ERROR_FILEPATH = "src/main/resources/interop/tracing-error.csv";
- private final ResourceLoader resourceLoader;
-
- public TracingFileUtils(ResourceLoader resourceLoader) {
- this.resourceLoader = resourceLoader;
- }
-
- public void updateCsv(String date) {
- File file = new File(CSV_OK_FILEPATH);
- try {
- CSVWriter csvWriter = new CSVWriter(new FileWriter(file));
- csvWriter.writeNext(new String[] {"date", "purpose_id", "status", "requests_count"});
- csvWriter.writeNext(new String[] {date, "28874634-6ea6-4def-b200-7377182c71be", "200", "48"});
- csvWriter.close();
- } catch (IOException ex) {
- throw new AssertionFailedError("There was an error while generating the csv file: " + ex);
- }
- }
-
- public Resource getCsvFile(String file) {
- return switch (file.trim().toLowerCase()) {
- case "corretto" -> resourceLoader.getResource("file:" + CSV_OK_FILEPATH);
- case "errato" -> resourceLoader.getResource("file:" + CSV_ERROR_FILEPATH);
- default -> throw new IllegalStateException("Unexpected value: " + file.trim().toLowerCase());
- };
- }
-}
diff --git a/src/test/java/it/pagopa/pn/cucumber/steps/CucumberSpringIntegration.java b/src/test/java/it/pagopa/pn/cucumber/steps/CucumberSpringIntegration.java
index 3c90fde24..34f97719e 100644
--- a/src/test/java/it/pagopa/pn/cucumber/steps/CucumberSpringIntegration.java
+++ b/src/test/java/it/pagopa/pn/cucumber/steps/CucumberSpringIntegration.java
@@ -3,23 +3,107 @@
import io.cucumber.spring.CucumberContextConfiguration;
import it.pagopa.pn.client.b2b.pa.PnPaB2bUtils;
import it.pagopa.pn.client.b2b.pa.config.PnB2bClientTimingConfigs;
-import it.pagopa.pn.client.b2b.pa.config.springconfig.*;
-import it.pagopa.pn.client.b2b.pa.interop.service.impl.PnPollingInteropTracing;
+import it.pagopa.pn.client.b2b.pa.config.springconfig.ApiKeysConfiguration;
+import it.pagopa.pn.client.b2b.pa.config.springconfig.BearerTokenConfiguration;
+import it.pagopa.pn.client.b2b.pa.config.springconfig.LegalFactTokenConfiguration;
+import it.pagopa.pn.client.b2b.pa.config.springconfig.MailSenderConfig;
+import it.pagopa.pn.client.b2b.pa.config.springconfig.RestTemplateConfiguration;
+import it.pagopa.pn.client.b2b.pa.config.springconfig.TimingConfiguration;
import it.pagopa.pn.client.b2b.pa.parsing.config.PnLegalFactTokenProperty;
import it.pagopa.pn.client.b2b.pa.parsing.config.PnLegalFactTokens;
import it.pagopa.pn.client.b2b.pa.parsing.parser.impl.PnParser;
import it.pagopa.pn.client.b2b.pa.parsing.service.impl.PnParserService;
import it.pagopa.pn.client.b2b.pa.polling.design.PnPollingFactory;
-import it.pagopa.pn.client.b2b.pa.polling.impl.*;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceStatusExtraRapidV23;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceStatusExtraRapidV25;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceStatusExtraRapidV26;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceStatusRapidV1;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceStatusRapidV20;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceStatusRapidV21;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceStatusRapidV23;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceStatusRapidV25;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceStatusRapidV26;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceStatusSlowV1;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceStatusSlowV20;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceStatusSlowV21;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceStatusSlowV23;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceStatusSlowV25;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceStatusSlowV26;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceTimelineExtraRapidV23;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceTimelineExtraRapidV25;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceTimelineExtraRapidV26;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceTimelineRapidV1;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceTimelineRapidV20;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceTimelineRapidV21;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceTimelineRapidV23;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceTimelineRapidV25;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceTimelineRapidV26;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceTimelineSlowE2eV23;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceTimelineSlowE2eV25;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceTimelineSlowE2eV26;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceTimelineSlowV1;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceTimelineSlowV20;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceTimelineSlowV21;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceTimelineSlowV23;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceTimelineSlowV25;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceTimelineSlowV26;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceValidationStatusAcceptedExtraRapidV23;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceValidationStatusAcceptedExtraRapidV25;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceValidationStatusAcceptedExtraRapidV26;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceValidationStatusAcceptedShortV23;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceValidationStatusAcceptedShortV25;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceValidationStatusAcceptedShortV26;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceValidationStatusNoAcceptedV23;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceValidationStatusNoAcceptedV25;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceValidationStatusNoAcceptedV26;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceValidationStatusV1;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceValidationStatusV20;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceValidationStatusV21;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceValidationStatusV23;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceValidationStatusV25;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceValidationStatusV26;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceWebhookV20;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceWebhookV23;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceWebhookV24;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceWebhookV25;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceWebhookV26;
import it.pagopa.pn.client.b2b.pa.service.IBffMandateServiceApi;
import it.pagopa.pn.client.b2b.pa.service.IMandateReverseServiceClient;
-import it.pagopa.pn.client.b2b.pa.service.impl.*;
-import it.pagopa.pn.client.b2b.pa.interop.config.InteropClientConfigs;
-import it.pagopa.pn.client.b2b.pa.interop.config.springconfig.InteropConfiguration;
-import it.pagopa.pn.client.b2b.pa.interop.service.impl.InteropTracingClientImpl;
+import it.pagopa.pn.client.b2b.pa.service.impl.B2BDeliveryPushServiceClientImpl;
+import it.pagopa.pn.client.b2b.pa.service.impl.B2BRecipientExternalClientImpl;
+import it.pagopa.pn.client.b2b.pa.service.impl.B2BUserAttributesExternalClientImpl;
+import it.pagopa.pn.client.b2b.pa.service.impl.B2bMandateServiceClientImpl;
+import it.pagopa.pn.client.b2b.pa.service.impl.BffMandateServiceClientImpl;
+import it.pagopa.pn.client.b2b.pa.service.impl.IPnInteropProbingClientImpl;
+import it.pagopa.pn.client.b2b.pa.service.impl.IPnLegalPersonAuthClientImpl;
+import it.pagopa.pn.client.b2b.pa.service.impl.IPnLegalPersonVirtualKeyServiceClientImpl;
+import it.pagopa.pn.client.b2b.pa.service.impl.IPnTosPrivacyClientImpl;
+import it.pagopa.pn.client.b2b.pa.service.impl.MandateReverseServiceClientImpl;
+import it.pagopa.pn.client.b2b.pa.service.impl.PaperCalculatorClientImpl;
+import it.pagopa.pn.client.b2b.pa.service.impl.PnApiKeyManagerExternalClientImpl;
+import it.pagopa.pn.client.b2b.pa.service.impl.PnAppIOB2bExternalClientImpl;
+import it.pagopa.pn.client.b2b.pa.service.impl.PnBFFRecipientNotificationClientImpl;
+import it.pagopa.pn.client.b2b.pa.service.impl.PnDowntimeLogsExternalClientImpl;
+import it.pagopa.pn.client.b2b.pa.service.impl.PnExternalChannelsServiceClientImpl;
+import it.pagopa.pn.client.b2b.pa.service.impl.PnExternalRegistryPrivateUserApiImpl;
+import it.pagopa.pn.client.b2b.pa.service.impl.PnExternalServiceClientImpl;
+import it.pagopa.pn.client.b2b.pa.service.impl.PnGPDClientImpl;
+import it.pagopa.pn.client.b2b.pa.service.impl.PnIoUserAttributerExternaClient;
+import it.pagopa.pn.client.b2b.pa.service.impl.PnPaB2bExternalClientImpl;
+import it.pagopa.pn.client.b2b.pa.service.impl.PnPaymentInfoClientImpl;
+import it.pagopa.pn.client.b2b.pa.service.impl.PnPrivateDeliveryPushExternalClient;
+import it.pagopa.pn.client.b2b.pa.service.impl.PnRaddAlternativeClientImpl;
+import it.pagopa.pn.client.b2b.pa.service.impl.PnRaddFsuClientImpl;
+import it.pagopa.pn.client.b2b.pa.service.impl.PnSafeStoragePrivateClientImpl;
+import it.pagopa.pn.client.b2b.pa.service.impl.PnServiceDeskClientImpl;
+import it.pagopa.pn.client.b2b.pa.service.impl.PnWebMandateExternalClientImpl;
+import it.pagopa.pn.client.b2b.pa.service.impl.PnWebPaClientImpl;
+import it.pagopa.pn.client.b2b.pa.service.impl.PnWebRecipientExternalClientImpl;
+import it.pagopa.pn.client.b2b.pa.service.impl.PnWebUserAttributesExternalClientImpl;
+import it.pagopa.pn.client.b2b.pa.service.impl.PnWebhookB2bExternalClientImpl;
+import it.pagopa.pn.client.b2b.pa.service.impl.TemplateEngineClientImpl;
import it.pagopa.pn.client.b2b.pa.service.utils.InteropTokenSingleton;
import it.pagopa.pn.client.b2b.pa.utils.TimingForPolling;
-import it.pagopa.pn.cucumber.interop.utility.TracingFileUtils;
import it.pagopa.pn.cucumber.steps.templateEngine.TemplateConfiguration;
import it.pagopa.pn.cucumber.steps.templateEngine.context.TemplateEngineContextFactory;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
@@ -130,11 +214,6 @@
IPnLegalPersonAuthClientImpl.class,
IPnLegalPersonVirtualKeyServiceClientImpl.class,
IPnTosPrivacyClientImpl.class,
- InteropConfiguration.class,
- InteropClientConfigs.class,
- InteropTracingClientImpl.class,
- PnPollingInteropTracing.class,
- TracingFileUtils.class,
TemplateEngineClientImpl.class,
TemplateConfiguration.class,
TemplateEngineContextFactory.class
diff --git a/src/test/java/it/pagopa/pn/cucumber/steps/SharedSteps.java b/src/test/java/it/pagopa/pn/cucumber/steps/SharedSteps.java
index 0209a5b56..db69d748f 100644
--- a/src/test/java/it/pagopa/pn/cucumber/steps/SharedSteps.java
+++ b/src/test/java/it/pagopa/pn/cucumber/steps/SharedSteps.java
@@ -6,6 +6,7 @@
import static it.pagopa.pn.cucumber.utils.NotificationValue.PAYMENT_PAGOPA_FORM;
import static it.pagopa.pn.cucumber.utils.NotificationValue.getDefaultValue;
import static it.pagopa.pn.cucumber.utils.NotificationValue.getValue;
+import static java.util.Objects.nonNull;
import static org.awaitility.Awaitility.await;
import com.fasterxml.jackson.core.JsonProcessingException;
@@ -2242,6 +2243,18 @@ public List getTimelineElementsByEventId(String timelineEven
return timelineElementList.stream().filter(elem -> Objects.requireNonNull(elem.getCategory()).getValue().equals(timelineEventCategory)).toList();
}
+ /** Get all timeline elements having attempt index less or equal to the given one
+ * @param attemptIndex the index of the attempt (starting from 0)
+ * @return a list of timeline elements that match the given event category and data from test */
+ public List getTimelineElementsToAttempt(int attemptIndex) {
+ List timelineElementList = notificationResponseComplete.getTimeline();
+ return timelineElementList.stream()
+ .filter(elem -> nonNull(elem.getDetails()))
+ .filter(elem -> nonNull(elem.getDetails().getSentAttemptMade()))
+ .filter(elem -> elem.getDetails().getSentAttemptMade() <= attemptIndex)
+ .toList();
+ }
+
public TimelineElementV26 getTimelineElementByEventId(String timelineEventCategory, DataTest dataFromTest) {
return getTimelineElementsByEventId(timelineEventCategory, dataFromTest).stream()
.findAny()
diff --git a/src/test/java/it/pagopa/pn/cucumber/steps/pa/AvanzamentoNotificheB2bSteps.java b/src/test/java/it/pagopa/pn/cucumber/steps/pa/AvanzamentoNotificheB2bSteps.java
index fbb49439b..244e5065c 100644
--- a/src/test/java/it/pagopa/pn/cucumber/steps/pa/AvanzamentoNotificheB2bSteps.java
+++ b/src/test/java/it/pagopa/pn/cucumber/steps/pa/AvanzamentoNotificheB2bSteps.java
@@ -42,8 +42,23 @@
import it.pagopa.pn.client.b2b.pa.mapper.model.PnTimelineLegalFactV26;
import it.pagopa.pn.client.b2b.pa.polling.design.PnPollingFactory;
import it.pagopa.pn.client.b2b.pa.polling.design.PnPollingStrategy;
-import it.pagopa.pn.client.b2b.pa.polling.dto.*;
-import it.pagopa.pn.client.b2b.pa.polling.impl.*;
+import it.pagopa.pn.client.b2b.pa.polling.dto.PnPollingParameter;
+import it.pagopa.pn.client.b2b.pa.polling.dto.PnPollingPredicate;
+import it.pagopa.pn.client.b2b.pa.polling.dto.PnPollingResponseV1;
+import it.pagopa.pn.client.b2b.pa.polling.dto.PnPollingResponseV20;
+import it.pagopa.pn.client.b2b.pa.polling.dto.PnPollingResponseV21;
+import it.pagopa.pn.client.b2b.pa.polling.dto.PnPollingResponseV23;
+import it.pagopa.pn.client.b2b.pa.polling.dto.PnPollingResponseV26;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceStatusRapidV1;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceStatusRapidV26;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceTimelineExtraRapidV26;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceTimelineRapidV1;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceTimelineRapidV20;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceTimelineRapidV21;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceTimelineRapidV23;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceTimelineRapidV26;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceTimelineSlowV1;
+import it.pagopa.pn.client.b2b.pa.polling.impl.PnPollingServiceTimelineSlowV26;
import it.pagopa.pn.client.b2b.pa.service.IPnPaB2bClient;
import it.pagopa.pn.client.b2b.pa.service.IPnPrivateDeliveryPushExternalClient;
import it.pagopa.pn.client.b2b.pa.service.IPnWebRecipientClient;
@@ -74,6 +89,7 @@
import java.util.function.Predicate;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import java.util.stream.IntStream;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.pdfbox.Loader;
@@ -2629,6 +2645,31 @@ public void vieneVerificatoElementoTimeline(String timelineEventCategory, @Trans
}
}
+ @Then("viene verificato che l'ultimo tentativo effettuato abbia indice {int}")
+ public void vieneVerificatoCheUltimoTentativoEffettuatoAbbiaIndice(Integer index) {
+ try {
+ List actualTimelineElements = sharedSteps.getTimelineElementsToAttempt(
+ index);
+ List actualAttemptsMade = actualTimelineElements.stream()
+ .map(TimelineElementV26::getDetails)
+ .filter(Objects::nonNull)
+ .map(TimelineElementDetailsV26::getSentAttemptMade)
+ .distinct()
+ .toList();
+ List expectedAttemptsMade = IntStream.range(0, index + 1)
+ .boxed()
+ .toList();
+
+ assertThat(actualAttemptsMade)
+ .as("Non รจ stato trovato alcun elemento di timeline corrispondente a un tentativo di indice minore o uguale a '%d'.".formatted(index))
+ .isNotEmpty()
+ .as("I tentativi effettuati non corrispondono a quelli attesi.")
+ .hasSameElementsAs(expectedAttemptsMade);
+ } catch (AssertionError assertionFailedError) {
+ sharedSteps.throwAssertFailerWithIUN(assertionFailedError);
+ }
+ }
+
/** Checks that a certain timeline element has a field with a text value compatible with the specified regular expression.
* @param timelineEventCategory the category of the timeline element, e.g. "SEND_ANALOG_PROGRESS"
* @param eventId the event id of the timeline element, e.g. "CON020"
@@ -2731,6 +2772,20 @@ public void vieneVerificatoCheElementoTimelineNonEsista(String timelineEventCate
}
}
+ /* TODO 12/02/2025 Accorpare con vieneVerificatoCheElementoTimelineNonEsista(String timelineEventCategory, @Transpose DataTest dataFromTest)
+ * parametrizzando il load della timeline.
+ */
+ @And("viene verificato che l'elemento di timeline {string} non esista nella timeline caricata")
+ public void vieneVerificatoCheElementoTimelineNonEsistaNotLoadTimeline(String timelineEventCategory, @Transpose DataTest dataFromTest) {
+ TimelineElementV26 timelineElement = sharedSteps.getTimelineElementByEventId(timelineEventCategory, dataFromTest);
+ try {
+ log.info("TIMELINE_ELEMENT: " + timelineElement);
+ Assertions.assertNull(timelineElement);
+ } catch (AssertionFailedError assertionFailedError) {
+ sharedSteps.throwAssertFailerWithIUN(assertionFailedError);
+ }
+ }
+
@And("viene schedulato il perfezionamento per decorrenza termini per il caso {string}")
public void vieneSchedulatoIlPerfezionamento(String timelineCategory, @Transpose DataTest dataFromTest) {
diff --git a/src/test/resources/it/pagopa/pn/cucumber/workflowNotifica/workflowAnalogico/giacenza/giacenzaAR/AvanzamentoNotifichePFAnalogicoGiacenzaAR.feature b/src/test/resources/it/pagopa/pn/cucumber/workflowNotifica/workflowAnalogico/giacenza/giacenzaAR/AvanzamentoNotifichePFAnalogicoGiacenzaAR.feature
index ee1a6b2cb..42ef78f72 100644
--- a/src/test/resources/it/pagopa/pn/cucumber/workflowNotifica/workflowAnalogico/giacenza/giacenzaAR/AvanzamentoNotifichePFAnalogicoGiacenzaAR.feature
+++ b/src/test/resources/it/pagopa/pn/cucumber/workflowNotifica/workflowAnalogico/giacenza/giacenzaAR/AvanzamentoNotifichePFAnalogicoGiacenzaAR.feature
@@ -75,12 +75,60 @@ Feature: avanzamento notifiche b2b con workflow cartaceo giacenza AR
| digitalDomicile | NULL |
| physicalAddress_address | Via@FAIL-CompiutaGiacenza_AR |
When la notifica viene inviata tramite api b2b dal "Comune_Multi" e si attende che lo stato diventi ACCEPTED
- And vengono letti gli eventi fino all'elemento di timeline della notifica "SEND_ANALOG_PROGRESS" con deliveryDetailCode "RECRN005C"
+ And vengono letti gli eventi fino all'elemento di timeline della notifica "ANALOG_SUCCESS_WORKFLOW"
And viene verificato che l'elemento di timeline "SEND_ANALOG_PROGRESS" esista
| details | NOT_NULL |
| details_deliveryDetailCode | CON080 |
| details_recIndex | 0 |
| details_sentAttemptMade | 0 |
+ And viene verificato che l'elemento di timeline "SEND_ANALOG_PROGRESS" esista
+ | details | NOT_NULL |
+ | details_deliveryDetailCode | CON020 |
+ | details_recIndex | 0 |
+ | details_sentAttemptMade | 0 |
+ And viene verificato che l'elemento di timeline "SEND_ANALOG_PROGRESS" esista
+ | details | NOT_NULL |
+ | details_deliveryDetailCode | RECRN011 |
+ | details_recIndex | 0 |
+ | details_sentAttemptMade | 0 |
+ And viene verificato che l'elemento di timeline "SEND_ANALOG_PROGRESS" esista
+ | details | NOT_NULL |
+ | details_deliveryDetailCode | RECRN005B |
+ | details_recIndex | 0 |
+ | details_sentAttemptMade | 0 |
+ | details_attachments | [{"documentType": "Plico"}] |
+ And viene verificato che l'elemento di timeline "SEND_ANALOG_PROGRESS" esista
+ | details | NOT_NULL |
+ | details_deliveryDetailCode | RECRN005C |
+ | details_recIndex | 0 |
+ | details_sentAttemptMade | 0 |
+ And viene verificato che l'elemento di timeline "SEND_ANALOG_FEEDBACK" esista
+ | details | NOT_NULL |
+ | details_deliveryDetailCode | PNRN012 |
+ | details_recIndex | 0 |
+ | details_sentAttemptMade | 0 |
+ And viene verificato che l'ultimo tentativo effettuato abbia indice 0
+
+ @dev @workflowAnalogico
+ Scenario: [B2B_TIMELINE_ANALOG_GIACENZA_AR_ERR_1] Invio Notifica Mono destinatario workflow cartaceo - Caso FAIL-CompiutaGiacenza_AR_ERR
+ Given viene generata una nuova notifica
+ | subject | notifica analogica con cucumber |
+ | senderDenomination | Comune di palermo |
+ And destinatario Mario Gherkin e:
+ | digitalDomicile | NULL |
+ | physicalAddress_address | Via@FAIL_CompiutaGiacenza_AR_ERR |
+ When la notifica viene inviata tramite api b2b dal "Comune_Multi" e si attende che lo stato diventi ACCEPTED
+ And vengono letti gli eventi fino all'elemento di timeline della notifica "SEND_ANALOG_PROGRESS" con deliveryDetailCode "RECRN005B"
+ And viene verificato che l'elemento di timeline "SEND_ANALOG_PROGRESS" esista
+ | details | NOT_NULL |
+ | details_deliveryDetailCode | CON080 |
+ | details_recIndex | 0 |
+ | details_sentAttemptMade | 0 |
+ And viene verificato che l'elemento di timeline "SEND_ANALOG_PROGRESS" esista
+ | details | NOT_NULL |
+ | details_deliveryDetailCode | CON020 |
+ | details_recIndex | 0 |
+ | details_sentAttemptMade | 0 |
And viene verificato che l'elemento di timeline "SEND_ANALOG_PROGRESS" esista
| details | NOT_NULL |
| details_deliveryDetailCode | RECRN011 |
@@ -92,6 +140,7 @@ Feature: avanzamento notifiche b2b con workflow cartaceo giacenza AR
| details_recIndex | 0 |
| details_sentAttemptMade | 0 |
| details_attachments | [{"documentType": "Plico"}] |
+ And viene verificato che l'ultimo tentativo effettuato abbia indice 0
@dev @workflowAnalogico
Scenario: [B2B_TIMELINE_ANALOG_GIACENZA_AR_4] Invio Notifica Mono destinatario workflow cartaceo - Caso OK-Giacenza-gt10_AR PN-5927