diff --git a/interop-qa-tests/src/main/java/it/pagopa/interop/purpose/service/impl/PurposeTemplateClientImpl.java b/interop-qa-tests/src/main/java/it/pagopa/interop/purpose/service/impl/PurposeTemplateClientImpl.java index 748438d79c..d452e87507 100644 --- a/interop-qa-tests/src/main/java/it/pagopa/interop/purpose/service/impl/PurposeTemplateClientImpl.java +++ b/interop-qa-tests/src/main/java/it/pagopa/interop/purpose/service/impl/PurposeTemplateClientImpl.java @@ -1,37 +1,12 @@ package it.pagopa.interop.purpose.service.impl; -import static it.pagopa.interop.utils.BlobFileCreationUtils.createTempFile; -import static java.util.Objects.isNull; - import it.pagopa.interop.common.client.AbstractClient; import it.pagopa.interop.conf.InteropClientConfigs; import it.pagopa.interop.generated.openapi.clients.bff.ApiClient; import it.pagopa.interop.generated.openapi.clients.bff.api.PurposeTemplatesApi; -import it.pagopa.interop.generated.openapi.clients.bff.model.CatalogPurposeTemplates; -import it.pagopa.interop.generated.openapi.clients.bff.model.CreatedResource; -import it.pagopa.interop.generated.openapi.clients.bff.model.CreatorPurposeTemplates; -import it.pagopa.interop.generated.openapi.clients.bff.model.EServiceDescriptorPurposeTemplate; -import it.pagopa.interop.generated.openapi.clients.bff.model.EServiceDescriptorsPurposeTemplate; -import it.pagopa.interop.generated.openapi.clients.bff.model.LinkEServiceToPurposeTemplateRequest; -import it.pagopa.interop.generated.openapi.clients.bff.model.PurposeTemplate; -import it.pagopa.interop.generated.openapi.clients.bff.model.PurposeTemplateSeed; -import it.pagopa.interop.generated.openapi.clients.bff.model.PurposeTemplateState; -import it.pagopa.interop.generated.openapi.clients.bff.model.PurposeTemplateWithCompactCreator; -import it.pagopa.interop.generated.openapi.clients.bff.model.RiskAnalysisTemplateAnswerAnnotation; -import it.pagopa.interop.generated.openapi.clients.bff.model.RiskAnalysisTemplateAnswerAnnotationDocument; -import it.pagopa.interop.generated.openapi.clients.bff.model.RiskAnalysisTemplateAnswerAnnotationSeed; -import it.pagopa.interop.generated.openapi.clients.bff.model.RiskAnalysisTemplateAnswerRequest; -import it.pagopa.interop.generated.openapi.clients.bff.model.RiskAnalysisTemplateAnswerResponse; -import it.pagopa.interop.generated.openapi.clients.bff.model.TargetTenantKind; -import it.pagopa.interop.generated.openapi.clients.bff.model.TenantKind; +import it.pagopa.interop.generated.openapi.clients.bff.model.*; import it.pagopa.interop.generated.openapi.clients.m2mGateway.model.PurposeTemplates; import it.pagopa.interop.purpose.service.IPurposeTemplateClient; -import java.io.File; -import java.io.IOException; -import java.io.UncheckedIOException; -import java.util.List; -import java.util.UUID; -import javax.annotation.Nullable; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Scope; import org.springframework.core.io.Resource; @@ -40,6 +15,16 @@ import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestTemplate; +import javax.annotation.Nullable; +import java.io.File; +import java.io.IOException; +import java.io.UncheckedIOException; +import java.util.List; +import java.util.UUID; + +import static it.pagopa.interop.utils.BlobFileCreationUtils.createTempFile; +import static java.util.Objects.isNull; + @Component @Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) public class PurposeTemplateClientImpl extends AbstractClient implements IPurposeTemplateClient { @@ -48,10 +33,12 @@ public class PurposeTemplateClientImpl extends AbstractClient implements IPurpos private final it.pagopa.interop.generated.openapi.clients.m2mGateway.api.PurposeTemplatesApi m2mPurposeTemplatesApi; private final RestTemplate restTemplate; private final String basePath; + private final String m2mBasePath; public PurposeTemplateClientImpl(RestTemplate restTemplate, InteropClientConfigs interopClientConfigs) { this.restTemplate = restTemplate; this.basePath = interopClientConfigs.getBaseUrl(); + this.m2mBasePath = interopClientConfigs.getM2mBaseUrl(); this.purposesTemplateApi = new PurposeTemplatesApi(createApiClient("dummyBearer")); this.m2mPurposeTemplatesApi = new it.pagopa.interop.generated.openapi.clients.m2mGateway.api.PurposeTemplatesApi(createM2MApiClient("dummyBearer")); } @@ -65,7 +52,7 @@ private ApiClient createApiClient(String bearerToken) { private it.pagopa.interop.generated.openapi.clients.m2mGateway.ApiClient createM2MApiClient(String bearerToken) { it.pagopa.interop.generated.openapi.clients.m2mGateway.ApiClient apiClient = new it.pagopa.interop.generated.openapi.clients.m2mGateway.ApiClient(restTemplate); - apiClient.setBasePath(basePath); + apiClient.setBasePath(m2mBasePath); apiClient.setBearerToken(bearerToken); return apiClient; } @@ -73,6 +60,7 @@ private it.pagopa.interop.generated.openapi.clients.m2mGateway.ApiClient createM @Override public void setBearerToken(String bearerToken) { this.purposesTemplateApi.setApiClient(createApiClient(bearerToken)); + this.m2mPurposeTemplatesApi.setApiClient(createM2MApiClient(bearerToken)); } @Override @@ -189,10 +177,6 @@ public PurposeTemplate updatePurposeTemplate(UUID purposeTemplateId, PurposeTemp @Override public PurposeTemplates getPurposeTemplates(Integer offset, Integer limit, String purposeTitle, List creatorIds, List eserviceIds, List states, it.pagopa.interop.generated.openapi.clients.m2mGateway.model.TargetTenantKind targetTenantKind, Boolean handlesPersonalData) { - return performOperation( - () -> m2mPurposeTemplatesApi.getPurposeTemplatesWithHttpInfo(offset, limit, purposeTitle, creatorIds, eserviceIds, states, targetTenantKind, handlesPersonalData)) - .orElseThrow(() -> new RuntimeException( - "Errore nel recupero purpose templates (response non 2xx o body nullo)" - )); + return m2mPurposeTemplatesApi.getPurposeTemplates(offset, limit, purposeTitle, creatorIds, eserviceIds, states, targetTenantKind, handlesPersonalData); } } \ No newline at end of file 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 2bd590732b..7721588aeb 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 @@ -14,6 +14,7 @@ import it.pagopa.interop.generated.openapi.clients.bff.model.UpdateVerifiedTenantAttributeSeed; import it.pagopa.interop.generated.openapi.clients.bff.model.VerifiedAttributesResponse; import it.pagopa.interop.generated.openapi.clients.bff.model.VerifiedTenantAttributeSeed; +import org.springframework.http.ResponseEntity; import java.util.List; import java.util.UUID; @@ -53,5 +54,6 @@ public interface ITenantsApi extends SettableBearerToken { void addTenantMail(UUID tenantId, MailSeed mailSeed); + ResponseEntity addTenantMailWithHttpInfo(UUID tenantId, MailSeed mailSeed); } 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 e9872c4bdf..9c400d64f3 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 @@ -3,32 +3,20 @@ 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; -import it.pagopa.interop.generated.openapi.clients.bff.model.CertifiedTenantAttributeSeed; -import it.pagopa.interop.generated.openapi.clients.bff.model.CompactOrganizations; -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.MailSeed; -import it.pagopa.interop.generated.openapi.clients.bff.model.RequesterCertifiedAttributes; -import it.pagopa.interop.generated.openapi.clients.bff.model.RevokeVerifiedAttributeRequest; -import it.pagopa.interop.generated.openapi.clients.bff.model.Tenant; -import it.pagopa.interop.generated.openapi.clients.bff.model.TenantDelegatedFeaturesFlagsUpdateSeed; -import it.pagopa.interop.generated.openapi.clients.bff.model.TenantFeatureType; -import it.pagopa.interop.generated.openapi.clients.bff.model.Tenants; -import it.pagopa.interop.generated.openapi.clients.bff.model.UpdateVerifiedTenantAttributeSeed; -import it.pagopa.interop.generated.openapi.clients.bff.model.VerifiedAttributesResponse; -import it.pagopa.interop.generated.openapi.clients.bff.model.VerifiedTenantAttributeSeed; +import it.pagopa.interop.generated.openapi.clients.bff.model.*; import it.pagopa.interop.tenant.service.ITenantsApi; -import java.util.List; -import java.util.UUID; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Scope; +import org.springframework.http.ResponseEntity; import org.springframework.retry.annotation.Backoff; import org.springframework.retry.annotation.Retryable; import org.springframework.stereotype.Component; import org.springframework.web.client.HttpServerErrorException; import org.springframework.web.client.RestTemplate; +import java.util.List; +import java.util.UUID; + @Component @Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) @Retryable( @@ -137,6 +125,11 @@ public void addTenantMail(UUID tenantId, MailSeed mailSeed) { tenantsApi.addTenantMail(tenantId, mailSeed); } + @Override + public ResponseEntity addTenantMailWithHttpInfo(UUID tenantId, MailSeed mailSeed) { + return tenantsApi.addTenantMailWithHttpInfo(tenantId, mailSeed); + } + @Override public RequesterCertifiedAttributes getRequesterCertifiedAttributes(Integer offset, Integer limit) { return tenantsApi.getRequesterCertifiedAttributes(offset, limit); diff --git a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/AbstractNrtTest.java b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/AbstractNrtTest.java new file mode 100644 index 0000000000..5f049db47c --- /dev/null +++ b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/AbstractNrtTest.java @@ -0,0 +1,32 @@ +package it.pagopa.pn.interop.cucumber; + +import org.junit.platform.suite.api.*; + +import static io.cucumber.junit.platform.engine.Constants.*; + +@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"), +}) +@ExcludeTags({"wait_for_fix", "nrtC-waitForFix"}) +@IncludeTags({ + // BFF + "agreement", "attribute", "descriptor", "document", "eservice", "purpose", "daily_calls_update_request", + "purpose_latest_risk_analysis", "purpose_risk_analysis", "incaricato", "capofila", "selfcare", + "app-edit-ff-on", "llgg", "e-service-template", "e-service-template-receive-bff", "purposeTemplate", + "client_admin", "client", "catalog", "producer", "DPoPSuite", "tenant", "voucher", + + // M2M + "m2m-agreements", "m2m-purposes", "m2m-attributes", "m2m-eservices", "m2m-agreements-parte2-luglio", + "m2m-parte2-agosto-rilascio1", "m2m-parte2-agosto-rilascio2", "m2m-parte2-settembre", + "m2m-parte2-ottobre", "m2mEservices", "e-service-template-receive-m2m", "m2m-purpose-client", "m2m-incaricato", + "e-service-template-m2m-version-get", "m2m-events", "purposeTemplateGet-filtered" + +}) +public class AbstractNrtTest { +} diff --git a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/M2MV3Test.java b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/M2MV3Test.java index 2f8e864af0..7c60947622 100644 --- a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/M2MV3Test.java +++ b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/M2MV3Test.java @@ -19,7 +19,8 @@ "api.set=M2M" ), @ConfigurationParameter(key = GLUE_PROPERTY_NAME, value = "it.pagopa.pn.interop.cucumber.steps"), - @ConfigurationParameter(key = EXECUTION_MODE_FEATURE_PROPERTY_NAME, value = "same_thread"), + @ConfigurationParameter(key = PARALLEL_CONFIG_FIXED_PARALLELISM_PROPERTY_NAME, value = "60"), + @ConfigurationParameter(key = EXECUTION_MODE_FEATURE_PROPERTY_NAME, value = "concurrent"), }) @ExcludeTags({"wait_for_fix"}) @IncludeTags({// M2M diff --git a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/NrtComplementareTest.java b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/NrtComplementareTest.java new file mode 100644 index 0000000000..dc683286eb --- /dev/null +++ b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/NrtComplementareTest.java @@ -0,0 +1,24 @@ +package it.pagopa.pn.interop.cucumber; + +import org.junit.platform.suite.api.*; + +import static io.cucumber.junit.platform.engine.Constants.*; + +@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"), +}) +@ExcludeTags({"wait_for_fix"}) + +/* Esclusa la feature archiviazione documentale, notifiche, probing, tracing */ +@IncludeTags({"client_admin", "client", "catalog", "producer", "DPoPSuite", "e-service-template-instances-suffix", + "m2m-purpose-client", "m2m-incaricato", "e-service-template-m2m-version-get", "m2m-events", + "purposeTemplateGet-filtered", "tenant", "voucher"}) +public class NrtComplementareTest { +} diff --git a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/NrtConcurrentTest.java b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/NrtConcurrentTest.java new file mode 100644 index 0000000000..33644a7ca3 --- /dev/null +++ b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/NrtConcurrentTest.java @@ -0,0 +1,10 @@ +package it.pagopa.pn.interop.cucumber; + +import org.junit.platform.suite.api.*; + +import static io.cucumber.junit.platform.engine.Constants.*; + +@ConfigurationParameter(key = EXECUTION_MODE_FEATURE_PROPERTY_NAME, value = "concurrent") +@ConfigurationParameter(key = PARALLEL_CONFIG_FIXED_PARALLELISM_PROPERTY_NAME, value = "100") +public class NrtConcurrentTest extends AbstractNrtTest { +} diff --git a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/NrtTest.java b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/NrtTest.java index 5a9eb98551..d23ac4e27f 100644 --- a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/NrtTest.java +++ b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/NrtTest.java @@ -4,28 +4,7 @@ import static io.cucumber.junit.platform.engine.Constants.*; -@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"), -}) -@ExcludeTags({"wait_for_fix"}) -@IncludeTags({ - // BFF - "agreement", "attribute", "descriptor", "document", "eservice", "purpose", "daily_calls_update_request", - "purpose_latest_risk_analysis", "purpose_risk_analysis", "incaricato", "capofila", "selfcare", - "app-edit-ff-on", "llgg", "e-service-template", "e-service-template-receive-bff", "purposeTemplate", - - // M2M - "m2m-agreements", "m2m-purposes", "m2m-attributes", "m2m-eservices", "m2m-agreements-parte2-luglio", - "m2m-parte2-agosto-rilascio1", "m2m-parte2-agosto-rilascio2", "m2m-parte2-settembre", - "m2m-parte2-ottobre", "m2mEservices", "e-service-template-receive-m2m" - -}) -public class NrtTest { +@ConfigurationParameter(key = EXECUTION_MODE_FEATURE_PROPERTY_NAME, value = "same_thread") +@ConfigurationParameter(key = PARALLEL_CONFIG_FIXED_PARALLELISM_PROPERTY_NAME, value = "4") +public class NrtTest extends AbstractNrtTest { } diff --git a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/ParameterTypes.java b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/ParameterTypes.java index 68cfe48640..f943785bb2 100644 --- a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/ParameterTypes.java +++ b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/ParameterTypes.java @@ -2,6 +2,7 @@ import io.cucumber.java.ParameterType; import it.pagopa.interop.config.springconfig.springconfig.ApiProfile; +import it.pagopa.pn.interop.cucumber.steps.datapreparationservice.EServiceState; import java.util.*; import java.util.regex.Matcher; @@ -34,6 +35,11 @@ public static List bffRoles(String roles) { return out; } + @ParameterType("DRAFT|PUBLISHED|DEPRECATED|SUSPENDED|ARCHIVED|WAITING_FOR_APPROVAL") + public static EServiceState eServiceState(String value) { + return EServiceState.fromValue(value); + } + // 1. Definiamo i componenti base come stringhe letterali private static final String STATUS_REGEX = "(\\d+)"; private static final String SET_REGEX = "(BFF|M2M)"; diff --git a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/authorization/ClientKeyUploadSteps.java b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/authorization/ClientKeyUploadSteps.java index 7d173228c1..7408f94ed4 100644 --- a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/authorization/ClientKeyUploadSteps.java +++ b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/authorization/ClientKeyUploadSteps.java @@ -2,11 +2,10 @@ import com.nimbusds.jose.jwk.KeyType; import io.cucumber.java.en.When; -import it.pagopa.interop.common.IHttpExecutor; -import it.pagopa.pn.interop.cucumber.steps.ClientTokenConfigurator; import it.pagopa.interop.authorization.service.IAuthorizationClient; import it.pagopa.interop.authorization.service.utils.KeyPairGeneratorUtil; -import it.pagopa.interop.utils.HttpCallExecutor; +import it.pagopa.interop.common.IHttpExecutor; +import it.pagopa.pn.interop.cucumber.steps.ClientTokenConfigurator; import it.pagopa.pn.interop.cucumber.steps.SharedStepsContext; public class ClientKeyUploadSteps { @@ -33,9 +32,10 @@ public void userLoadsPublicKeyWithType(String keyType) { @When("l'utente richiede il caricamento di una chiave pubblica di tipo {string} di lunghezza {int}") public void userLoadsPublicKeyWithTypeAndSize(String keyType, int keyLength) { + String finalKeyType = "NON-RSA".equals(keyType) ? "EC" : keyType; httpCallExecutor.performCall(() -> authorizationClient.createKeys(sharedStepsContext.getClientCommonContext().getFirstClient(), KeyPairGeneratorUtil.createKeySeed( - KeyPairGeneratorUtil.createBase64PublicKey(keyType, keyLength), KeyType.parse(keyType)))); + KeyPairGeneratorUtil.createBase64PublicKey(finalKeyType, keyLength), KeyType.parse(finalKeyType)))); } @When("l'utente richiede il caricamento di una chiave pubblica di tipo {string} di lunghezza {int} senza i delimitatori di inizio e fine") diff --git a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/authorization/dpop/DPoPSteps.java b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/authorization/dpop/DPoPSteps.java index 0694aa940d..f938990eb9 100644 --- a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/authorization/dpop/DPoPSteps.java +++ b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/authorization/dpop/DPoPSteps.java @@ -70,8 +70,8 @@ public void getDpopExpired(String tenantType, String keyAlgorithm) { this.dpopProofJwt = generateDpopProofWith(keyAlgorithm, DEFAULT_TYP, DEFAULT_HTTP_METHOD, DEFAULT_OAUTH_SERVER_URL); try { - log.info("Attesa di 61 secondi per far scadere il campo 'iat' della DPoP proof..."); - Thread.sleep(61000); + log.info("Attesa di 63 secondi per far scadere il campo 'iat' della DPoP proof..."); + Thread.sleep(63000); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } diff --git a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/catalog/CatalogCommonSteps.java b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/catalog/CatalogCommonSteps.java index bb67aa1dc9..1be33a9aeb 100644 --- a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/catalog/CatalogCommonSteps.java +++ b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/catalog/CatalogCommonSteps.java @@ -5,15 +5,13 @@ import it.pagopa.interop.agreement.domain.EServiceDescriptor; import it.pagopa.interop.authorization.service.identity.IdentityService; import it.pagopa.interop.common.IHttpExecutor; -import it.pagopa.interop.generated.openapi.clients.bff.model.CompactEServicesLight; -import it.pagopa.interop.generated.openapi.clients.bff.model.EServiceDescriptorState; -import it.pagopa.interop.generated.openapi.clients.bff.model.EServiceSeed; -import it.pagopa.interop.generated.openapi.clients.bff.model.UpdateEServiceDescriptorSeed; +import it.pagopa.interop.generated.openapi.clients.bff.model.*; import it.pagopa.pn.interop.cucumber.steps.ClientTokenConfigurator; import it.pagopa.pn.interop.cucumber.steps.SharedStepsContext; import it.pagopa.pn.interop.cucumber.steps.common.EServicesCommonContext; import it.pagopa.pn.interop.cucumber.steps.datapreparationservice.BFFDataPreparationService; import it.pagopa.pn.interop.cucumber.steps.datapreparationservice.BFFDataPreparationService.MutateDescriptorResult; +import it.pagopa.pn.interop.cucumber.steps.datapreparationservice.EServiceState; import org.junit.jupiter.api.Assertions; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -35,13 +33,20 @@ public CatalogCommonSteps(ClientTokenConfigurator clientTokenConfigurator, this.dataPreparationService = dataPreparationService; } + @Then("si ottiene status code {int} e la lista di {int} e-service(s) dal catalogo") + public void verifyReceivedCatalogResponse(int statusCode, int eServiceNumber) { + IHttpExecutor httpCallExecutor = sharedStepsContext.getHttpCallExecutor(); + Assertions.assertEquals(HttpStatus.valueOf(statusCode), httpCallExecutor.getResponseStatus()); + Assertions.assertEquals(eServiceNumber, + ((CatalogEServices) httpCallExecutor.getResponse()).getResults().size()); + } + @Then("si ottiene status code {int} e la lista di {int} e-service(s)") public void verifyReceivedResponse(int statusCode, int eServiceNumber) { IHttpExecutor httpCallExecutor = sharedStepsContext.getHttpCallExecutor(); Assertions.assertEquals(HttpStatus.valueOf(statusCode), httpCallExecutor.getResponseStatus()); Assertions.assertEquals(eServiceNumber, ((ResponseEntity) httpCallExecutor.getResponse()).getBody().getResults().size()); - } @Given("{string} ha già creato un e-service con un descrittore in stato {string}") @@ -49,16 +54,12 @@ public void createEserviceWithDescriptor(String tenantType, String descriptorSta createEServiceWithDescriptorInState(tenantType, descriptorState); } - @Given("{string} ha già creato un e-service in stato {string}") - public void createEservice(String tenantType, String descriptorState) { - if(descriptorState.equals(EServiceDescriptorState.ARCHIVED.getValue())) { - /* NOTE 09/03/2026: il passaggio dell'e-service (non di un suo descriptor, dell'intero e-service) - * in stato ARCHIVED non è al momento supportato (rif. https://pagopaspa.slack.com/archives/C06D24MANNN/p1772816415479329). - * Quando sarà supportato, si prevede di sostituire il lancio dell'eccezione con l'implementazione effettiva. */ - throw new UnsupportedOperationException("L'archiviazione di un e-service nella sua interezza non è al momento supportata dalla piattaforma Interop"); - } else { - createEServiceWithDescriptorInState(tenantType, descriptorState); - } + @Given("{string} ha già creato un e-service in stato {eServiceState}") + public void createEservice(String tenantType, EServiceState eServiceState) { + clientTokenConfigurator.setBearerToken(identityService.getToken(tenantType, null)); + EServiceDescriptor eServiceDescriptor = this.dataPreparationService.createEServiceInState(new EServiceSeed(), new UpdateEServiceDescriptorSeed(), eServiceState); + sharedStepsContext.getEServicesCommonContext().setEserviceId(eServiceDescriptor.getEServiceId()); + sharedStepsContext.getEServicesCommonContext().setDescriptorId(eServiceDescriptor.getDescriptorId()); } private void createEServiceWithDescriptorInState(String tenantType, String descriptorState) { diff --git a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/catalog/EServiceCatalogListingSteps.java b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/catalog/EServiceCatalogListingSteps.java index a390174c25..ce850d1a83 100644 --- a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/catalog/EServiceCatalogListingSteps.java +++ b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/catalog/EServiceCatalogListingSteps.java @@ -1,7 +1,5 @@ package it.pagopa.pn.interop.cucumber.steps.catalog; -import static org.assertj.core.api.Assertions.assertThat; - import io.cucumber.java.en.Given; import io.cucumber.java.en.Then; import io.cucumber.java.en.When; @@ -10,20 +8,20 @@ import it.pagopa.interop.authorization.service.identity.IdentityService; import it.pagopa.interop.authorization.service.utils.PollingService; import it.pagopa.interop.common.IHttpExecutor; -import it.pagopa.interop.generated.openapi.clients.bff.model.AgreementState; -import it.pagopa.interop.generated.openapi.clients.bff.model.EServiceDescriptorState; -import it.pagopa.interop.generated.openapi.clients.bff.model.EServiceSeed; -import it.pagopa.interop.generated.openapi.clients.bff.model.ProducerEServiceDescriptor; -import it.pagopa.interop.generated.openapi.clients.bff.model.UpdateEServiceDescriptorSeed; +import it.pagopa.interop.generated.openapi.clients.bff.model.*; import it.pagopa.pn.interop.cucumber.steps.ClientTokenConfigurator; import it.pagopa.pn.interop.cucumber.steps.SharedStepsContext; import it.pagopa.pn.interop.cucumber.steps.common.EServicesCommonContext; import it.pagopa.pn.interop.cucumber.steps.datapreparationservice.BFFDataPreparationService; +import it.pagopa.pn.interop.cucumber.steps.datapreparationservice.EServiceState; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; + import java.util.ArrayList; import java.util.List; import java.util.UUID; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; + +import static org.assertj.core.api.Assertions.assertThat; public class EServiceCatalogListingSteps { private final BFFDataPreparationService dataPreparationService; @@ -53,34 +51,26 @@ public void tenantHasAlreadyCreatedEservicesWithSpecificState(String tenantType, clientTokenConfigurator.setBearerToken(identityService.getToken(tenantType, null)); int suspendedEServices = countEServices / 2; int publishedEServices = countEServices - suspendedEServices; - int draftEServices = countDraftEServices; - int totalEServices = countEServices + draftEServices; + List publishedEServicesDes = createAndStoreEServices(publishedEServices, EServiceState.PUBLISHED); + List suspendedEServicesDes = createAndStoreEServices(suspendedEServices, EServiceState.SUSPENDED); + List draftEServicesDes = createAndStoreEServices(countDraftEServices, EServiceState.DRAFT); + + eServicesCommonContext.setPublishedEservicesIds(publishedEServicesDes); + eServicesCommonContext.setSuspendedEservicesIds(suspendedEServicesDes); + eServicesCommonContext.setDraftEServicesIds(draftEServicesDes); + } + + private List createAndStoreEServices(int totalEServices, EServiceState state) { List eServiceDescriptors = new ArrayList<>(); - // 1. Create the draft e-services with draft descriptors - for (int i=0; i idsToPublishAndSuspend = eServiceDescriptors.subList(0, suspendedEServices + publishedEServices); - - // 3. For each draft descriptor, in order to publish it, add the document interface - idsToPublishAndSuspend.forEach(e -> dataPreparationService.addInterfaceToDescriptor(e.getEServiceId(), e.getDescriptorId())); - - // 4. Publish the descriptors - idsToPublishAndSuspend.forEach(e -> dataPreparationService.publishDescriptor(e.getEServiceId(), e.getDescriptorId())); - - // 5. Suspend the desired number of descriptors - List idsToSuspend = idsToPublishAndSuspend.subList(0, suspendedEServices); - idsToSuspend.forEach(e -> dataPreparationService.suspendDescriptor(e.getEServiceId(), e.getDescriptorId())); - - eServicesCommonContext.setPublishedEservicesIds(idsToPublishAndSuspend.subList(0, suspendedEServices)); - eServicesCommonContext.setSuspendedEservicesIds(idsToSuspend); - eServicesCommonContext.setDraftEServicesIds(eServiceDescriptors.subList(0, suspendedEServices + publishedEServices)); + return eServiceDescriptors; } @Given("{string} ha già creato {int} e-services in catalogo in stato PUBLISHED o SUSPENDED e {int} in stato DRAFT impostando il flagPersonalData a {string}") diff --git a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/common/ClientCommonContext.java b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/common/ClientCommonContext.java index 5193609b7f..6f71d3d961 100644 --- a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/common/ClientCommonContext.java +++ b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/common/ClientCommonContext.java @@ -1,11 +1,5 @@ package it.pagopa.pn.interop.cucumber.steps.common; -import java.security.PrivateKey; -import java.security.PublicKey; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; - import it.pagopa.interop.authorization.service.DPoPTokenService; import lombok.Getter; import lombok.Setter; @@ -14,6 +8,12 @@ import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; +import java.security.PrivateKey; +import java.security.PublicKey; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + @Getter @Setter @Component @@ -79,7 +79,9 @@ public void addClient(UUID clientId) { public void addClient(DPoPTokenService.PreparedClient client){ preparedClients.add(client); - addClient(client.clientId()); + if (!this.clients.contains(client.clientId())) { + addClient(client.clientId()); + } } } \ No newline at end of file diff --git a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/datapreparationservice/BFFDataPreparationService.java b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/datapreparationservice/BFFDataPreparationService.java index df9e852922..ccbd572ba0 100644 --- a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/datapreparationservice/BFFDataPreparationService.java +++ b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/datapreparationservice/BFFDataPreparationService.java @@ -1,13 +1,5 @@ package it.pagopa.pn.interop.cucumber.steps.datapreparationservice; -import static it.pagopa.interop.generated.openapi.clients.bff.model.EServiceDescriptorState.PUBLISHED; -import static it.pagopa.interop.generated.openapi.clients.bff.model.EServiceMode.RECEIVE; -import static java.util.Objects.isNull; -import static java.util.Objects.requireNonNullElse; -import static org.apache.commons.collections4.IterableUtils.size; -import static org.apache.commons.lang3.BooleanUtils.isNotTrue; -import static org.apache.commons.lang3.BooleanUtils.isTrue; - import it.pagopa.interop.agreement.domain.ClientType; import it.pagopa.interop.agreement.domain.EServiceDescriptor; import it.pagopa.interop.agreement.service.IAgreementClient; @@ -18,51 +10,7 @@ import it.pagopa.interop.authorization.service.IProducerClient; import it.pagopa.interop.authorization.service.utils.PollingService; import it.pagopa.interop.common.IHttpExecutor; -import it.pagopa.interop.generated.openapi.clients.bff.model.Agreement; -import it.pagopa.interop.generated.openapi.clients.bff.model.AgreementApprovalPolicy; -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.AgreementState; -import it.pagopa.interop.generated.openapi.clients.bff.model.AgreementSubmissionPayload; -import it.pagopa.interop.generated.openapi.clients.bff.model.Attribute; -import it.pagopa.interop.generated.openapi.clients.bff.model.AttributeKind; -import it.pagopa.interop.generated.openapi.clients.bff.model.AttributeSeed; -import it.pagopa.interop.generated.openapi.clients.bff.model.CertifiedAttributeSeed; -import it.pagopa.interop.generated.openapi.clients.bff.model.CertifiedTenantAttributeSeed; -import it.pagopa.interop.generated.openapi.clients.bff.model.ClientSeed; -import it.pagopa.interop.generated.openapi.clients.bff.model.CreatedEServiceDescriptor; -import it.pagopa.interop.generated.openapi.clients.bff.model.CreatedResource; -import it.pagopa.interop.generated.openapi.clients.bff.model.DeclaredTenantAttributeSeed; -import it.pagopa.interop.generated.openapi.clients.bff.model.DelegationRef; -import it.pagopa.interop.generated.openapi.clients.bff.model.DescriptorAttributeSeed; -import it.pagopa.interop.generated.openapi.clients.bff.model.DescriptorAttributesSeed; -import it.pagopa.interop.generated.openapi.clients.bff.model.EServiceDescriptorState; -import it.pagopa.interop.generated.openapi.clients.bff.model.EServiceMode; -import it.pagopa.interop.generated.openapi.clients.bff.model.EServiceRiskAnalysis; -import it.pagopa.interop.generated.openapi.clients.bff.model.EServiceRiskAnalysisSeed; -import it.pagopa.interop.generated.openapi.clients.bff.model.EServiceSeed; -import it.pagopa.interop.generated.openapi.clients.bff.model.EServiceTechnology; -import it.pagopa.interop.generated.openapi.clients.bff.model.KeySeed; -import it.pagopa.interop.generated.openapi.clients.bff.model.MailKind; -import it.pagopa.interop.generated.openapi.clients.bff.model.MailSeed; -import it.pagopa.interop.generated.openapi.clients.bff.model.ProducerEServiceDescriptor; -import it.pagopa.interop.generated.openapi.clients.bff.model.ProducerEServiceDetails; -import it.pagopa.interop.generated.openapi.clients.bff.model.PublicKey; -import it.pagopa.interop.generated.openapi.clients.bff.model.PublicKeys; -import it.pagopa.interop.generated.openapi.clients.bff.model.Purpose; -import it.pagopa.interop.generated.openapi.clients.bff.model.PurposeAdditionDetailsSeed; -import it.pagopa.interop.generated.openapi.clients.bff.model.PurposeEServiceSeed; -import it.pagopa.interop.generated.openapi.clients.bff.model.PurposeSeed; -import it.pagopa.interop.generated.openapi.clients.bff.model.PurposeVersion; -import it.pagopa.interop.generated.openapi.clients.bff.model.PurposeVersionSeed; -import it.pagopa.interop.generated.openapi.clients.bff.model.PurposeVersionState; -import it.pagopa.interop.generated.openapi.clients.bff.model.RejectPurposeVersionPayload; -import it.pagopa.interop.generated.openapi.clients.bff.model.RiskAnalysisFormConfig; -import it.pagopa.interop.generated.openapi.clients.bff.model.RiskAnalysisFormSeed; -import it.pagopa.interop.generated.openapi.clients.bff.model.TemplateInstanceInterfaceRESTSeed; -import it.pagopa.interop.generated.openapi.clients.bff.model.UpdateEServiceDescriptorSeed; -import it.pagopa.interop.generated.openapi.clients.bff.model.UpdateEServiceDescriptorTemplateInstanceSeed; -import it.pagopa.interop.generated.openapi.clients.bff.model.VerifiedTenantAttributeSeed; +import it.pagopa.interop.generated.openapi.clients.bff.model.*; import it.pagopa.interop.purpose.RiskAnalysisDataInitializer; import it.pagopa.interop.purpose.domain.CreatedEserviceVersion; import it.pagopa.interop.purpose.domain.RiskAnalysis; @@ -74,35 +22,10 @@ import it.pagopa.pn.interop.cucumber.steps.Document; import it.pagopa.pn.interop.cucumber.steps.DocumentMetadata; import it.pagopa.pn.interop.cucumber.steps.SharedStepsContext; -import it.pagopa.pn.interop.cucumber.steps.datapreparationservice.template.AddConsumerDocumentOperation; -import it.pagopa.pn.interop.cucumber.steps.datapreparationservice.template.ArchiveAgreementOperation; -import it.pagopa.pn.interop.cucumber.steps.datapreparationservice.template.CreateAgreementOperation; -import it.pagopa.pn.interop.cucumber.steps.datapreparationservice.template.CreateAgreementWithStateOperation; -import it.pagopa.pn.interop.cucumber.steps.datapreparationservice.template.CreateAndCheckAgreementOperation; -import it.pagopa.pn.interop.cucumber.steps.datapreparationservice.template.DataPreparationServiceTemplate; -import it.pagopa.pn.interop.cucumber.steps.datapreparationservice.template.SubmitAgreementOperation; -import it.pagopa.pn.interop.cucumber.steps.datapreparationservice.template.SuspendAgreementOperation; -import it.pagopa.pn.interop.cucumber.steps.datapreparationservice.template.UpperAgreement; -import it.pagopa.pn.interop.cucumber.steps.datapreparationservice.template.UpperAgreementState; +import it.pagopa.pn.interop.cucumber.steps.datapreparationservice.template.*; import it.pagopa.pn.interop.cucumber.utility.BlobFileCreator; import it.pagopa.pn.interop.cucumber.utility.CommonUtils; import it.pagopa.pn.interop.cucumber.utility.delay_service.DelayService; -import java.io.File; -import java.io.IOException; -import java.net.URI; -import java.time.OffsetDateTime; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.Random; -import java.util.UUID; -import java.util.concurrent.ThreadLocalRandom; -import java.util.concurrent.atomic.AtomicReference; -import java.util.function.BiFunction; -import javax.annotation.Nullable; import lombok.Builder; import lombok.Data; import lombok.extern.slf4j.Slf4j; @@ -112,6 +35,26 @@ import org.springframework.core.io.FileSystemResource; import org.springframework.core.io.Resource; import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.io.File; +import java.io.IOException; +import java.net.URI; +import java.time.OffsetDateTime; +import java.util.*; +import java.util.concurrent.ThreadLocalRandom; +import java.util.concurrent.atomic.AtomicReference; +import java.util.function.BiFunction; + +import static it.pagopa.interop.generated.openapi.clients.bff.model.EServiceDescriptorState.PUBLISHED; +import static it.pagopa.interop.generated.openapi.clients.bff.model.EServiceMode.RECEIVE; +import static java.util.Objects.isNull; +import static java.util.Objects.requireNonNullElse; +import static org.apache.commons.collections4.IterableUtils.size; +import static org.apache.commons.lang3.BooleanUtils.isNotTrue; +import static org.apache.commons.lang3.BooleanUtils.isTrue; @Slf4j @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) @@ -466,6 +409,21 @@ public void assignVerifiedAttributeToTenant(UUID tenantId, UUID verifierId, UUID ); } + public EServiceDescriptor createEServiceInState(EServiceSeed partialEserviceSeed, UpdateEServiceDescriptorSeed partialDescriptorSeed, @Nonnull EServiceState eServiceState) { + if(EServiceState.ARCHIVED.equals(eServiceState)) { + /* NOTE 09/03/2026: il passaggio dell'e-service (non di un suo descriptor, dell'intero e-service) + * in stato ARCHIVED non è al momento supportato (rif. https://pagopaspa.slack.com/archives/C06D24MANNN/p1772816415479329). + * Quando sarà supportato, si prevede di sostituire il lancio dell'eccezione con l'implementazione effettiva. */ + throw new UnsupportedOperationException("L'archiviazione di un e-service nella sua interezza non è al momento supportata dalla piattaforma Interop"); + } else { + EServiceDescriptor eServiceDescriptor = this.createEServiceAndDraftDescriptor(partialEserviceSeed, partialDescriptorSeed); + this.bringDescriptorToGivenState(eServiceDescriptor.getEServiceId(), + eServiceDescriptor.getDescriptorId(), EServiceDescriptorState.valueOf( + eServiceState.toString()), false); + return eServiceDescriptor; + } + } + public EServiceDescriptor createEServiceAndDraftDescriptor(EServiceSeed partialEserviceSeed, UpdateEServiceDescriptorSeed partialDescriptorSeed) { EServiceSeed defaultEserviceSeed = new EServiceSeed() .name(String.format("e-service %d", ThreadLocalRandom.current().nextInt(0, Integer.MAX_VALUE))) @@ -1196,7 +1154,9 @@ public UUID addRiskAnalysisToEService(UUID eServiceId, EServiceRiskAnalysisSeed } public void addEmailToTenant(UUID tenantId, MailSeed mailSeed) { - httpCallExecutor.performCall(() -> tenantsApi.addTenantMail(tenantId, mailSeed.kind(MailKind.CONTACT_EMAIL))); + httpCallExecutor.performCall( + () -> tenantsApi.addTenantMailWithHttpInfo(tenantId, mailSeed.kind(MailKind.CONTACT_EMAIL)), + ResponseEntity::getStatusCode); assertValidResponse(); pollingService.makePolling( diff --git a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/datapreparationservice/EServiceState.java b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/datapreparationservice/EServiceState.java new file mode 100644 index 0000000000..ab2f97488a --- /dev/null +++ b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/datapreparationservice/EServiceState.java @@ -0,0 +1,47 @@ +package it.pagopa.pn.interop.cucumber.steps.datapreparationservice; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; + +// DEV. NOTE 19/03/2026 al momento non c'è una classe che modella lo stato dell'e-service in sé, ma solo del suo +// ultimo descriptor +public enum EServiceState { + DRAFT("DRAFT"), + + PUBLISHED("PUBLISHED"), + + DEPRECATED("DEPRECATED"), + + SUSPENDED("SUSPENDED"), + + ARCHIVED("ARCHIVED"), + + WAITING_FOR_APPROVAL("WAITING_FOR_APPROVAL"); + + private String value; + + EServiceState(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + @JsonCreator + public static EServiceState fromValue(String value) { + for (EServiceState b : EServiceState.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } +} + diff --git a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/m2m/eservice_template/EserviceTemplateSteps.java b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/m2m/eservice_template/EserviceTemplateSteps.java index 6dfd06224e..6a56a527f9 100644 --- a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/m2m/eservice_template/EserviceTemplateSteps.java +++ b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/m2m/eservice_template/EserviceTemplateSteps.java @@ -349,6 +349,27 @@ public void getEServiceTemplateVersions(EServiceTemplateVersionsSnapshotType typ } } + @And("l'utente tenta di recuperare le versioni dell'e-service template") + public void getEServiceTemplateVersions() { + UUID templateId = sharedStepsContext.getEServiceTemplateStepContext().getLastTemplateManaged().getId(); + getEServiceTemplateVersion(templateId); + } + + @And("l'utente tenta di recuperare le versioni dell'e-service template indicando un template id inesistente") + public void getNonExistentEServiceTemplateVersions() { + UUID templateId = UUID.randomUUID(); + getEServiceTemplateVersion(templateId); + } + + private void getEServiceTemplateVersion(UUID templateId) { + delayService.delay(); + httpCallExecutor.performCall(() -> m2mEServiceTemplateClient.getEserviceTemplateVersions( + templateId)); + if (httpCallExecutor.getResponseStatus().is2xxSuccessful()) { + this.newVersionsSnapshot = (EServiceTemplateVersions) httpCallExecutor.getResponse(); + } + } + @When("l'utente m2m tenta la creazione di una ulteriore versione nell'e-service template") public void createEServiceTemplateVersion() { EServiceTemplateVersionCreationRequest request = buildVersionCreationRequest(); diff --git a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/purposetemplate/PurposeTemplateSteps.java b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/purposetemplate/PurposeTemplateSteps.java index e8ffa01d37..086b3d03b8 100644 --- a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/purposetemplate/PurposeTemplateSteps.java +++ b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/purposetemplate/PurposeTemplateSteps.java @@ -33,6 +33,7 @@ import java.util.*; import java.util.stream.Stream; +import static java.util.Objects.isNull; import static java.util.Objects.nonNull; import static org.apache.commons.collections4.IterableUtils.isEmpty; import static org.assertj.core.api.Assertions.assertThat; @@ -187,22 +188,6 @@ private PurposeTemplateSeed prepareCreationRequest(Boolean handlePersonalDataVal return purposeTemplateCreationRequest; } - private PurposeTemplateSeed buildMandatoryPurposeTemplateSeed() { - PurposeTemplateSeed seed = new PurposeTemplateSeed(); - - seed.setTargetDescription("target-description-" + UUID.randomUUID()); - seed.setTargetTenantKind(it.pagopa.interop.generated.openapi.clients.bff.model.TargetTenantKind.PA); - - seed.setPurposeTitle("purpose-title-" + UUID.randomUUID()); - seed.setPurposeDescription("purpose-description-" + UUID.randomUUID()); - - seed.setPurposeIsFreeOfCharge(Boolean.TRUE); - seed.setHandlesPersonalData(Boolean.FALSE); - - return seed; - } - - private void invokeCreatePurposeTemplate() { httpCallExecutor.performCall(() -> purposeTemplateClient.createPurposeTemplate(purposeTemplateCreationRequest)); if (httpCallExecutor.getResponseStatus().is2xxSuccessful()) { @@ -521,14 +506,20 @@ public void changePurposeTemplateStateGradually(PurposeTemplateState ptState) { } private void waitUntilStateIn(@Nonnull PurposeTemplateState ptState) { - UUID purposeTemplateId = sharedStepsContext.getPurposeTemplateContext().getPurposeTemplateId(); + waitUntilStateIn(null, ptState); + } + + private void waitUntilStateIn(UUID purposeTemplateId, @Nonnull PurposeTemplateState ptState) { + UUID templateId = isNull(purposeTemplateId) + ? sharedStepsContext.getPurposeTemplateContext().getPurposeTemplateId() + : purposeTemplateId; pollingService.makePolling( - () -> purposeTemplateClient.getPurposeTemplateWithHttpInfo(purposeTemplateId), - response -> - response.getStatusCode().is2xxSuccessful() - && nonNull(response.getBody()) - && ptState.equals(response.getBody().getState()), - "Non è stato possibile reperire il purpose template '%s' nello stato desiderato '%s'".formatted(purposeTemplateId, ptState) + () -> purposeTemplateClient.getPurposeTemplateWithHttpInfo(templateId), + response -> + response.getStatusCode().is2xxSuccessful() + && nonNull(response.getBody()) + && ptState.equals(response.getBody().getState()), + "Non è stato possibile reperire il purpose template '%s' nello stato desiderato '%s'".formatted(templateId, ptState) ); } @@ -976,7 +967,7 @@ public void preparePurposeTemplate( Boolean handlesPersonalDataValue = resolver.resolveHandlesPersonalData(handlesPersonalData); // 2) Seed con soli campi obbligatori popolati (valori validi di default) - PurposeTemplateSeed seed = buildMandatoryPurposeTemplateSeed(); + PurposeTemplateSeed seed = prepareCreationRequest(handlesPersonalDataValue); // 3) Override SEMPRE dei campi parametrizzati (anche a null) seed.setPurposeTitle(purposeTitleValue); @@ -997,6 +988,8 @@ public void preparePurposeTemplate( UUID purposeTemplateId = created.getId(); + waitUntilStateIn(purposeTemplateId, PurposeTemplateState.DRAFT); + // 5) Recupero template completo (così ho creatorId/state reali) PurposeTemplateWithCompactCreator pt = purposeTemplateClient.getPurposeTemplate(purposeTemplateId); Assertions.assertThat(pt).as("PurposeTemplate recuperato non deve essere null").isNotNull(); @@ -1037,19 +1030,28 @@ private void changePurposeTemplateStateGradually( // Non vedo metodi "backToDraft" nel client: quindi non posso forzare DRAFT. // Se ti serve davvero, serve un endpoint o ricreare un template nuovo. } - case PUBLISHED -> purposeTemplateClient.publishPurposeTemplate(purposeTemplateId); + case PUBLISHED -> { + purposeTemplateClient.publishPurposeTemplate(purposeTemplateId); + waitUntilStateIn(purposeTemplateId, PurposeTemplateState.PUBLISHED); + } case SUSPENDED -> { // tipicamente devi pubblicare prima di sospendere purposeTemplateClient.publishPurposeTemplate(purposeTemplateId); + waitUntilStateIn(purposeTemplateId, PurposeTemplateState.PUBLISHED); + purposeTemplateClient.suspendPurposeTemplate(purposeTemplateId); + waitUntilStateIn(purposeTemplateId, PurposeTemplateState.SUSPENDED); } case ARCHIVED -> { // spesso si può archiviare da PUBLISHED (o anche da altri stati). // Per sicurezza pubblica prima, poi archivia. purposeTemplateClient.publishPurposeTemplate(purposeTemplateId); + waitUntilStateIn(purposeTemplateId, PurposeTemplateState.PUBLISHED); + purposeTemplateClient.archivePurposeTemplate(purposeTemplateId); + waitUntilStateIn(purposeTemplateId, PurposeTemplateState.ARCHIVED); } default -> throw new IllegalArgumentException("Stato non gestito: " + desired); @@ -1136,7 +1138,7 @@ public void getPurposeTemplates( Boolean handlesPersonalDataValue = resolver.resolveHandlesPersonalData(handlesPersonalData); - PurposeTemplates response = purposeTemplateClient.getPurposeTemplates( + httpCallExecutor.performCall(() -> purposeTemplateClient.getPurposeTemplates( offsetValue, limitValue, purposeTitleValue, @@ -1145,66 +1147,67 @@ public void getPurposeTemplates( statesValue, targetTenantKindValue, handlesPersonalDataValue - ); + )); - Assertions.assertThat(response) + if (httpCallExecutor.getResponseStatus().is2xxSuccessful()) { + PurposeTemplates response = (PurposeTemplates) httpCallExecutor.getResponse(); + + Assertions.assertThat(response) .as("La response contenente i purpose templates non deve essere null") .isNotNull(); - // === SOSTITUISCI getResults() col getter reale della lista === - List results = - response.getResults(); + // === SOSTITUISCI getResults() col getter reale della lista === + List results = + response.getResults(); - Assertions.assertThat(results) - .as("La lista dei purpose templates non deve essere null") - .isNotNull(); + Assertions.assertThat(results) + .as("La lista dei purpose templates non deve essere null") + .isNotNull(); - for (var pt : results) { - // purposeTitle (match esatto) - if (purposeTitleValue != null) { - Assertions.assertThat(pt.getPurposeTitle()) - .as("purposeTitle deve rispettare il filtro") - .isEqualTo(purposeTitleValue); - } + for (var pt : results) { + // purposeTitle (match esatto) + if (purposeTitleValue != null) { + Assertions.assertThat(pt.getPurposeTitle()) + .as("purposeTitle deve rispettare il filtro") + .isEqualTo(purposeTitleValue); + } - // creatorIds (IN) - if (creatorIdsValue != null && !creatorIdsValue.isEmpty()) { - Assertions.assertThat(pt.getCreatorId()) - .as("creatorId deve essere contenuto in creatorIds filter") - .isIn(creatorIdsValue); - } + // creatorIds (IN) + if (creatorIdsValue != null && !creatorIdsValue.isEmpty()) { + Assertions.assertThat(pt.getCreatorId()) + .as("creatorId deve essere contenuto in creatorIds filter") + .isIn(creatorIdsValue); + } - // states (IN) - if (statesValue != null && !statesValue.isEmpty()) { - Assertions.assertThat(pt.getState()) - .as("state deve essere contenuto in states filter") - .isIn(statesValue); - } + // states (IN) + if (statesValue != null && !statesValue.isEmpty()) { + Assertions.assertThat(pt.getState()) + .as("state deve essere contenuto in states filter") + .isIn(statesValue); + } - // targetTenantKind (match esatto) - if (targetTenantKindValue != null) { - Assertions.assertThat(pt.getTargetTenantKind()) - .as("targetTenantKind deve rispettare il filtro") - .isEqualTo(targetTenantKindValue); - } + // targetTenantKind (match esatto) + if (targetTenantKindValue != null) { + Assertions.assertThat(pt.getTargetTenantKind()) + .as("targetTenantKind deve rispettare il filtro") + .isEqualTo(targetTenantKindValue); + } - // handlesPersonalData (match esatto) - if (handlesPersonalDataValue != null) { - Assertions.assertThat(pt.getHandlesPersonalData()) - .as("handlesPersonalData deve rispettare il filtro") - .isEqualTo(handlesPersonalDataValue); - } + // handlesPersonalData (match esatto) + if (handlesPersonalDataValue != null) { + Assertions.assertThat(pt.getHandlesPersonalData()) + .as("handlesPersonalData deve rispettare il filtro") + .isEqualTo(handlesPersonalDataValue); + } - // eserviceIds: al momento nella response non trovo informazioni esplicite sugli ids - if (eserviceIdsValue != null && !eserviceIdsValue.isEmpty()) { + // eserviceIds: al momento nella response non trovo informazioni esplicite sugli ids + if (eserviceIdsValue != null && !eserviceIdsValue.isEmpty()) { + } } } } - - - @When("l'utente tenta di effettuare la modifica parziale del purpose template") public void patchPurposeTemplate() { sharedStepsContext.getPurposeTemplateContext().setUpdatedAt(OffsetDateTime.now()); diff --git a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/purposetemplate/utils/PurposeTemplateResolver.java b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/purposetemplate/utils/PurposeTemplateResolver.java index 338a7d4b3c..2af531aebb 100644 --- a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/purposetemplate/utils/PurposeTemplateResolver.java +++ b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/purposetemplate/utils/PurposeTemplateResolver.java @@ -10,6 +10,7 @@ import java.util.Collections; import java.util.List; import java.util.UUID; +import java.util.function.Supplier; public class PurposeTemplateResolver extends AbstractResolver { @@ -79,11 +80,14 @@ public Boolean resolveHandlesPersonalData(String raw) { } public TargetTenantKind resolveTargetTenantKind(String raw) { + Supplier tks = () -> sharedStepsContext.getTenantType().equalsIgnoreCase("Privato") + ? TargetTenantKind.PRIVATE + : TargetTenantKind.PA; return resolveOrParse( raw, TargetTenantKind::valueOf, - () -> TargetTenantKind.valueOf(sharedStepsContext.getTenantType()), - () -> TargetTenantKind.valueOf(sharedStepsContext.getTenantType()), + tks, + tks, PurposeTemplateResolver::randomTargetTenantKind, null ); diff --git a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/tenant/TenantAssignVerifiedAttributeSteps.java b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/tenant/TenantAssignVerifiedAttributeSteps.java index 4cd54d686d..f5a50a9712 100644 --- a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/tenant/TenantAssignVerifiedAttributeSteps.java +++ b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/tenant/TenantAssignVerifiedAttributeSteps.java @@ -7,6 +7,7 @@ import it.pagopa.pn.interop.cucumber.steps.SharedStepsContext; import java.time.LocalDate; +import java.time.OffsetDateTime; import java.util.UUID; public class TenantAssignVerifiedAttributeSteps { @@ -45,7 +46,7 @@ public void assignVerifiedAttributeWithFutureExpireDate(String tenantType) { new VerifiedTenantAttributeSeed() .id(sharedStepsContext.getAttributeCommonContext().getAttributeId()) .agreementId(sharedStepsContext.getAgreementId()) - .expirationDate(LocalDate.now().plusDays(7).toString()) + .expirationDate(OffsetDateTime.now().plusDays(7).toString()) ) ); } diff --git a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/tenant/TenantEServiceConsumerListingSteps.java b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/tenant/TenantEServiceConsumerListingSteps.java index 96c91ae0dd..bccef88112 100644 --- a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/tenant/TenantEServiceConsumerListingSteps.java +++ b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/tenant/TenantEServiceConsumerListingSteps.java @@ -71,15 +71,11 @@ public void requireListingOperationWithOffset(int offset) { @Then("si ottiene status code 200 e il giusto numero di fruitori in base all'offset richiesto") public void verifyStatusCodeAndConsumerNumberBasedOnOffset() { - sharedStepsContext.getHttpCallExecutor().performCall( - () -> clientTokenConfigurator.getTenantsApi().getConsumers(0, 20, null) - ); - commonUtils.assertValidResponse(); CompactOrganizations compactOrganizations = (CompactOrganizations) sharedStepsContext.getHttpCallExecutor().getResponse(); int totalCount = compactOrganizations.getPagination().getTotalCount(); Assertions.assertEquals(200, sharedStepsContext.getHttpCallExecutor().getResponseStatus().value()); - Assertions.assertEquals(totalCount - offset, compactOrganizations.getResults().size()); + Assertions.assertEquals(totalCount - this.offset, compactOrganizations.getResults().size()); } @When("l'utente richiede una operazione di listing dei fruitori filtrando per nome aderente {string}") diff --git a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/tenant/TenantEServiceProducerListingSteps.java b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/tenant/TenantEServiceProducerListingSteps.java index 01b8aa6e51..ccf2516f03 100644 --- a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/tenant/TenantEServiceProducerListingSteps.java +++ b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/tenant/TenantEServiceProducerListingSteps.java @@ -57,10 +57,6 @@ public void requireConsumerOperationListingByKeyword(String producerName) { @Then("si ottiene status code 200 e il giusto numero di erogatori in base all'offset richiesto") public void verifyStatusCodeAndConsumerNumberBasedOnOffset() { - sharedStepsContext.getHttpCallExecutor().performCall( - () -> clientTokenConfigurator.getTenantsApi().getProducers(0, 20, null) - ); - commonUtils.assertValidResponse(); CompactOrganizations compactOrganizations = (CompactOrganizations) sharedStepsContext.getHttpCallExecutor().getResponse(); int totalCount = compactOrganizations.getPagination().getTotalCount(); diff --git a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/tenant/TenantMailUpsertSteps.java b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/tenant/TenantMailUpsertSteps.java index 29b6d22b4e..0a826b5f79 100644 --- a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/tenant/TenantMailUpsertSteps.java +++ b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/tenant/TenantMailUpsertSteps.java @@ -8,10 +8,9 @@ import it.pagopa.interop.generated.openapi.clients.bff.model.Mail; import it.pagopa.interop.generated.openapi.clients.bff.model.MailKind; import it.pagopa.interop.generated.openapi.clients.bff.model.MailSeed; -import it.pagopa.interop.utils.HttpCallExecutor; import it.pagopa.pn.interop.cucumber.steps.ClientTokenConfigurator; -import it.pagopa.pn.interop.cucumber.steps.datapreparationservice.BFFDataPreparationService; import it.pagopa.pn.interop.cucumber.steps.SharedStepsContext; +import it.pagopa.pn.interop.cucumber.steps.datapreparationservice.BFFDataPreparationService; import org.junit.jupiter.api.Assertions; import java.util.Optional; @@ -61,9 +60,7 @@ public void addContactEmailWithoutDescription() { clientTokenConfigurator.setBearerToken(sharedStepsContext.getUserToken()); email = String.format("%d%d@pagopa.it", sharedStepsContext.getTestSeed(), new Random().nextInt()); UUID tenantId = identityService.getOrganizationId(sharedStepsContext.getTenantType()); - httpCallExecutor.performCall( - () -> dataPreparationService.addEmailToTenant(tenantId, new MailSeed().kind(MailKind.CONTACT_EMAIL).address(email)) - ); + dataPreparationService.addEmailToTenant(tenantId, new MailSeed().kind(MailKind.CONTACT_EMAIL).address(email)); } @When("l'utente richiede una operazione di aggiornamento della mail di contatto senza description") diff --git a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/tenant/TenantUpdateVerifiedExpirationDateSteps.java b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/tenant/TenantUpdateVerifiedExpirationDateSteps.java index 857871ba48..d57043837b 100644 --- a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/tenant/TenantUpdateVerifiedExpirationDateSteps.java +++ b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/tenant/TenantUpdateVerifiedExpirationDateSteps.java @@ -5,12 +5,12 @@ import it.pagopa.interop.authorization.service.identity.IdentityService; import it.pagopa.interop.common.IHttpExecutor; import it.pagopa.interop.generated.openapi.clients.bff.model.UpdateVerifiedTenantAttributeSeed; -import it.pagopa.interop.utils.HttpCallExecutor; import it.pagopa.pn.interop.cucumber.steps.ClientTokenConfigurator; -import it.pagopa.pn.interop.cucumber.steps.datapreparationservice.BFFDataPreparationService; import it.pagopa.pn.interop.cucumber.steps.SharedStepsContext; +import it.pagopa.pn.interop.cucumber.steps.datapreparationservice.BFFDataPreparationService; import java.time.LocalDate; +import java.time.OffsetDateTime; import java.util.UUID; public class TenantUpdateVerifiedExpirationDateSteps { @@ -32,18 +32,20 @@ public TenantUpdateVerifiedExpirationDateSteps(ClientTokenConfigurator clientTok @Given("{string} ha già verificato l'attributo verificato a {string} con una data di scadenza nel futuro") public void verifiedTheVerifyAttributeWithFutureExpirationDate(String verifierTenantType, String targetTenantType) { - LocalDate date = LocalDate.now().plusDays(7); + clientTokenConfigurator.setBearerToken(identityService.getToken(verifierTenantType, null)); + OffsetDateTime date = OffsetDateTime.now().plusDays(7); UUID verifierId = identityService.getOrganizationId(verifierTenantType); UUID tenantId = identityService.getOrganizationId(targetTenantType); dataPreparationService.assignVerifiedAttributeToTenant(tenantId, verifierId, sharedStepsContext.getAttributeCommonContext().getAttributeId(), sharedStepsContext.getAgreementId(), date.toString()); + clientTokenConfigurator.setBearerToken(sharedStepsContext.getUserToken()); } @When("l'utente richiede l'aggiornamento di quell'attributo di {string} con una data di scadenza nel futuro") public void updateAttributeWithFutureExpirationDate(String tenantType) { clientTokenConfigurator.setBearerToken(sharedStepsContext.getUserToken()); - LocalDate date = LocalDate.now().plusDays(7); + OffsetDateTime date = OffsetDateTime.now().plusDays(7); UUID tenantId = identityService.getOrganizationId(tenantType); httpCallExecutor.performCall( diff --git a/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/archiviazione-documentale/archiviazione-documentale.feature b/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/archiviazione-documentale/archiviazione-documentale.feature index fad020078b..214275d31f 100644 --- a/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/archiviazione-documentale/archiviazione-documentale.feature +++ b/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/archiviazione-documentale/archiviazione-documentale.feature @@ -1,3 +1,4 @@ +@archiviazione-documentale Feature: Archiviazione documentale e verifica firma/marca temporale Scenario: [TRIGGER] diff --git a/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/authorization/client-key-content-read.feature b/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/authorization/client-key-content-read.feature index b8b0ff72aa..68794da66d 100644 --- a/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/authorization/client-key-content-read.feature +++ b/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/authorization/client-key-content-read.feature @@ -54,9 +54,10 @@ Feature: Lettura di una chiave pubblica contenuta in un client @happy-path @nrt-minimal Scenario: [CLIENT_KEY_READ_04] Un utente con permessi security; appartenente all'ente che ha creato il client; il quale utente è membro del client; nel quale client c'è una chiave pubblica; la quale chiave non è stata caricata dall’utente stesso; richiede la lettura del contenuto della chiave. L'operazione va a buon fine - Given l'utente è un "security" di "PA1" - Given "PA1" ha già creato 1 client "CONSUMER" - Given "PA1" ha già inserito l'utente con ruolo "admin" come membro di quel client - Given un "admin" di "PA1" ha caricato una chiave pubblica in quel client - When l'utente richiede la lettura del contenuto della chiave pubblica + When "PA1" ha già creato 1 client "CONSUMER" + And "PA1" ha già inserito l'utente con ruolo "security" come membro di quel client + And "PA1" ha già inserito l'utente con ruolo "admin" come membro di quel client + And un "admin" di "PA1" ha caricato una chiave pubblica in quel client + When l'utente è un "security" di "PA1" + And l'utente richiede la lettura del contenuto della chiave pubblica Then si ottiene status code 200 diff --git a/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/authorization/client-key-read.feature b/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/authorization/client-key-read.feature index 1d5e7020a4..0a4c0c2d70 100644 --- a/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/authorization/client-key-read.feature +++ b/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/authorization/client-key-read.feature @@ -2,6 +2,7 @@ Feature: Lettura di una chiave pubblica contenuta in un client Tutti gli utenti autenticati possono recuperare le informazioni di una chiave pubblica contenuta in un client + @nrtC-waitForFix @nrt-minimal Scenario Outline: [CLIENT_KEY_READ_05] Un utente, il quale è appartenente all’ente al quale è associato un client; il quale utente NON è membro del client; per il quale client c'è una chiave, caricata da un altro utente; richiede la lettura delle informazioni della chiave pubblica. L'operazione va a buon fine solo per admin, support, security Given l'utente è un "" di "" @@ -16,10 +17,12 @@ Feature: Lettura di una chiave pubblica contenuta in un client | ente | ruolo | statusCode | | GSP | admin | 200 | | GSP | support | 200 | + | GSP | security | 200 | | GSP | api,security | 200 | | PA1 | admin | 200 | | PA1 | support | 200 | | PA1 | api,security | 200 | + | PA1 | security | 200 | @sad-path Examples: @@ -27,6 +30,7 @@ Feature: Lettura di una chiave pubblica contenuta in un client | GSP | api | 403 | | PA1 | api | 403 | + @nrtC-waitForFix @nrt-minimal Scenario Outline: [CLIENT_KEY_READ_06] Un utente con permessi di security; il quale è appartenente all'ente al quale è associato un client; il quale utente è membro del client; per il quale client c'è una chiave, caricata da un altro utente; richiede la lettura delle informazioni della chiave pubblica. L'operazione va a buon fine. Given l'utente è un "" di "" diff --git a/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/authorization/client-read.feature b/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/authorization/client-read.feature index 3030912964..e201417542 100644 --- a/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/authorization/client-read.feature +++ b/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/authorization/client-read.feature @@ -5,7 +5,7 @@ Feature: Lettura client singolo @nrt-minimal Scenario Outline: [CLIENT_READ_1] Tutti gli utenti possono leggere un client appartenente al proprio ente. La richiesta va a buon fine Given l'utente è un "" di "" - Given "PA1" ha già creato 1 client "CONSUMER" + Given "" ha già creato 1 client "CONSUMER" When l'utente richiede una operazione di lettura di quel client Then si ottiene status code @@ -73,6 +73,7 @@ Feature: Lettura client singolo When l'utente richiede una operazione di lettura di quel client Then si ottiene status code 403 + @nrtC-waitForFix @happy-path @nrt-minimal Scenario: [CLIENT_READ_7] A fronte di una richiesta di lettura da parte di un ente, di un client creato da un altro ente, la richiesta va a buon fine diff --git a/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/catalog/e-service-catalog-listing.feature b/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/catalog/e-service-catalog-listing.feature index 1079df6166..136f98f92b 100644 --- a/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/catalog/e-service-catalog-listing.feature +++ b/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/catalog/e-service-catalog-listing.feature @@ -9,7 +9,7 @@ Feature: Listing catalogo e-services Given l'utente è un "" di "" Given "PA1" ha già creato 5 e-services in catalogo in stato PUBLISHED o SUSPENDED e 1 in stato DRAFT When l'utente richiede una operazione di listing sul catalogo - Then si ottiene status code 200 e la lista di 5 e-services + Then si ottiene status code 200 e la lista di 5 e-services dal catalogo Examples: | ente | ruolo | @@ -36,7 +36,7 @@ Feature: Listing catalogo e-services Given l'utente è un "admin" di "PA1" Given "PA1" ha già creato 4 e-services in catalogo in stato PUBLISHED o SUSPENDED e 1 in stato DRAFT When l'utente richiede una operazione di listing sul catalogo limitata ai primi 3 e-services - Then si ottiene status code 200 e la lista di 3 e-services + Then si ottiene status code 200 e la lista di 3 e-services dal catalogo @happy-path @nrt-minimal @@ -45,7 +45,7 @@ Feature: Listing catalogo e-services Given l'utente è un "admin" di "PA1" Given "PA1" ha già creato 5 e-services in catalogo in stato PUBLISHED o SUSPENDED e 1 in stato DRAFT When l'utente richiede una operazione di listing sul catalogo con offset 2 - Then si ottiene status code 200 e la lista di 3 e-services + Then si ottiene status code 200 e la lista di 3 e-services dal catalogo @happy-path @nrt-minimal @@ -55,7 +55,7 @@ Feature: Listing catalogo e-services Given "PA2" ha già creato 2 e-services in catalogo in stato PUBLISHED o SUSPENDED e 1 in stato DRAFT Given "GSP" ha già creato 2 e-services in catalogo in stato PUBLISHED o SUSPENDED e 1 in stato DRAFT When l'utente richiede una operazione di listing degli e-services dell'erogatore "PA2" - Then si ottiene status code 200 e la lista di 2 e-services + Then si ottiene status code 200 e la lista di 2 e-services dal catalogo @happy-path @nrt-minimal @@ -65,7 +65,7 @@ Feature: Listing catalogo e-services Given "PA2" ha già creato 3 e-services in catalogo in stato PUBLISHED o SUSPENDED e 1 in stato DRAFT And "PA1" ha un agreement attivo con un e-service di "PA2" When l'utente richiede la lista di e-services per i quali ha almeno un agreement attivo - Then si ottiene status code 200 e la lista di 1 e-service + Then si ottiene status code 200 e la lista di 1 e-service dal catalogo @happy-path @nrt-minimal @@ -76,7 +76,7 @@ Feature: Listing catalogo e-services Given "PA1" ha già creato 2 e-services in catalogo in stato PUBLISHED o SUSPENDED e 1 in stato DRAFT Given "PA1" ha già creato e pubblicato un e-service contenente la keyword "test" When l'utente richiede una operazione di listing sul catalogo filtrando per la keyword "test" - Then si ottiene status code 200 e la lista di 1 e-service + Then si ottiene status code 200 e la lista di 1 e-service dal catalogo @happy-path @nrt-minimal @@ -85,4 +85,4 @@ Feature: Listing catalogo e-services Given l'utente è un "admin" di "PA1" Given "PA2" ha già creato 10 e-services in catalogo in stato PUBLISHED o SUSPENDED e 1 in stato DRAFT When l'utente richiede una operazione di listing sul catalogo filtrando per la keyword "unknown" - Then si ottiene status code 200 e la lista di 0 e-services + Then si ottiene status code 200 e la lista di 0 e-services dal catalogo diff --git a/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/e-service-template/e-service-template-suffix.feature b/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/e-service-template/e-service-template-suffix.feature index 3d9537747d..7304f76ff3 100644 --- a/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/e-service-template/e-service-template-suffix.feature +++ b/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/e-service-template/e-service-template-suffix.feature @@ -1,4 +1,4 @@ -# @e-service-template +@e-service-template @e-service-template-instances-suffix Feature: Test API of e-service template suffix diff --git a/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/m2mgateway/clients.feature b/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/m2mgateway/clients.feature index 000b976837..78cea3966f 100644 --- a/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/m2mgateway/clients.feature +++ b/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/m2mgateway/clients.feature @@ -132,6 +132,7 @@ Feature: Gestione dei clients attraverso APIs M2M V2 | %actual | 10 | 0 | %blank | %null | 200 | | %actual | 10 | 0 | %null | %blank | 200 | + @m2m-purpose-client Scenario: [M2M_CLIENTS_PURPOSES_CATALOG_3] Consultazione finalità associate a un client (multi-filtro) con token invalido Given l'utente è un "admin" di "PA1" And "PA1" ha già creato e pubblicato 1 e-service diff --git a/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/m2mgateway/delegations.feature b/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/m2mgateway/delegations.feature index 84ecda5262..685e3d771b 100644 --- a/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/m2mgateway/delegations.feature +++ b/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/m2mgateway/delegations.feature @@ -6,6 +6,7 @@ Feature: Gestione delle deleghe attraverso APIs M2M V2 And l'ente "GSP2" rimuove la disponibilità a ricevere deleghe in fruizione @happy-path @deleghe2 + @m2m-incaricato Scenario: [M2M_DELEGATIONS_CONSUMER_1] Una delega in fruizione può essere creata da un utente con ruolo M2M-ADMIN (Scenario 37) Given "GSP" ha già creato e pubblicato 1 e-services delegabile in fruizione And l'ente delegante "PA1" diff --git a/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/m2mgateway/e-service-templates.feature b/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/m2mgateway/e-service-templates.feature index bc9a380b6a..cc42d02df8 100644 --- a/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/m2mgateway/e-service-templates.feature +++ b/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/m2mgateway/e-service-templates.feature @@ -645,4 +645,39 @@ Feature: Test API M2M of e-service template Given l'utente è un "admin" di "PA1" con ruolo M2M m2m-admin And viene impostato per l'utente un token m2m non valido When l'utente m2m tenta la creazione di una ulteriore versione di un e-service template inesistente - Then si ottiene response status code 401 \ No newline at end of file + Then si ottiene response status code 401 + + @happy-path + @e-service-template-m2m-version-get + Scenario Outline: [M2MG_ESERVICETEMPLATES_1] Recupero corretto delle versioni di un template e-service con utente autorizzato (Scenario 17) + Given l'utente è un "admin" di "PA1" + And l'utente effettua la creazione di un e-service template in modalità erogazione in stato di PUBLISHED + And l'utente effettua la creazione di una ulteriore versione nell'e-service template con successo + When l'utente è un "admin" di "PA1" con ruolo M2M + And l'utente tenta di recuperare le versioni dell'e-service template + Then si ottiene lo status code 200 + And le versioni dell'e-service template sono un totale di 2 + Examples: + | role | + | m2m | + | m2m-admin | + + @sad-path + @e-service-template-m2m-version-get + Scenario: [M2MG_ESERVICETEMPLATES_4] Errore nel recupero delle versioni di un template e-service con templateId inesistente (Scenario 179) + Given l'utente è un "admin" di "PA1" + And l'utente effettua la creazione di un e-service template in modalità erogazione in stato di PUBLISHED + And l'utente effettua la creazione di una ulteriore versione nell'e-service template con successo + When l'utente è un "admin" di "PA1" con ruolo M2M m2m-admin + When l'utente tenta di recuperare le versioni dell'e-service template indicando un template id inesistente + Then si ottiene lo status code 404 + + @sad-path + @e-service-template-m2m-version-get + Scenario: [M2MG_ESERVICETEMPLATES_5] Accesso negato al recupero delle versioni di un template e-service con token non valido (Scenario 180) + Given l'utente è un "admin" di "PA1" + And l'utente effettua la creazione di un e-service template in modalità erogazione in stato di PUBLISHED + And l'utente effettua la creazione di una ulteriore versione nell'e-service template con successo + When viene impostato per l'utente un token m2m non valido + When l'utente tenta di recuperare le versioni dell'e-service template indicando un template id inesistente + Then si ottiene lo status code 401 \ No newline at end of file diff --git a/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/m2mgateway/eservice-template.feature b/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/m2mgateway/eservice-template.feature deleted file mode 100644 index b4d15bef93..0000000000 --- a/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/m2mgateway/eservice-template.feature +++ /dev/null @@ -1,51 +0,0 @@ -Feature: Gestione degli eServices template attraverso APIs M2M V2 - - @happy-path - Scenario Outline: [M2MG_ESERVICETEMPLATES_1] Recupero corretto delle versioni di un template e-service con utente autorizzato (Scenario 17) - Given "PA1" ha già creato e pubblicato 1 e-services - And l'utente è un "admin" di "PA1" con ruolo M2M - And viene effettuata la creazione dei template e-service: - | templateId | name | - | template-test-1 | Template Sanitario | - When l'utente tenta di recuperare le versioni del template e-service "template-test-1" - Then si ottiene lo status code 200 - And viene restituita la lista delle versioni del template e-service - Examples: - | role | - | m2m | - | m2m-admin | - - @sad-path - Scenario: [M2MG_ESERVICETEMPLATES_3] Errore nel recupero delle versioni di un template e-service con templateId nullo (Scenario 178) - Given "PA1" ha già creato e pubblicato 1 e-services - And l'utente è un "admin" di "PA1" con ruolo M2M m2m - And viene effettuata la creazione dei template e-service: - | templateId | name | - | template-test-1 | Template Sanitario | - When l'utente tenta di recuperare le versioni del template e-service "null" - Then si ottiene lo status code 400 - And la lista delle versioni del template e-service non viene restituita - - @sad-path - Scenario: [M2MG_ESERVICETEMPLATES_4] Errore nel recupero delle versioni di un template e-service con templateId inesistente (Scenario 179) - Given "PA1" ha già creato e pubblicato 1 e-services - And l'utente è un "admin" di "PA1" con ruolo M2M m2m - And viene effettuata la creazione dei template e-service: - | templateId | name | - | template-test-1 | Template Sanitario | - When l'utente tenta di recuperare le versioni del template e-service "template-999" - Then si ottiene lo status code 404 - And la lista delle versioni del template e-service non viene restituita - - @sad-path - Scenario: [M2MG_ESERVICETEMPLATES_5] Accesso negato al recupero delle versioni di un template e-service con token non valido (Scenario 180) - Given "PA1" ha già creato e pubblicato 1 e-services - And l'utente è un "admin" di "PA1" con ruolo M2M m2m - And l'utente possiede un token non valido - And viene effettuata la creazione dei template e-service: - | templateId | name | - | template-test-1 | Template Sanitario | - When l'utente tenta di recuperare le versioni del template e-service "template-test-1" - Then si ottiene lo status code 401 - And la lista delle versioni del template e-service non viene restituita - diff --git a/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/m2mgateway/eservices.feature b/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/m2mgateway/eservices.feature index b727d29caf..560e03db16 100644 --- a/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/m2mgateway/eservices.feature +++ b/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/m2mgateway/eservices.feature @@ -434,7 +434,7 @@ Feature: Gestione degli eServices attraverso APIs M2M V2 # 09/03/2026 ticket https://pagopa.atlassian.net/browse/QA-10948: al momento non è possibile archiviare un e-service @m2m-patch Scenario Outline: [M2MG_ESERVICES_41_A] Un utente con ruolo M2M-ADMIN NON può effettuare una modifica parziale della delega di un e-service in uno stato DRAFT o ARCHIVED - Given "PA1" ha già creato un e-service in stato "" + Given "PA1" ha già creato un e-service in stato And l'utente è un "admin" di "PA1" con ruolo M2M m2m-admin When l'utente tenta di effettuare la modifica parziale della delega dell'e-service Then si ottiene lo status code 409 @@ -545,7 +545,7 @@ Feature: Gestione degli eServices attraverso APIs M2M V2 # 09/03/2026 ticket https://pagopa.atlassian.net/browse/QA-10948: al momento non è possibile archiviare un e-service @m2m-patch Scenario Outline: [M2MG_ESERVICES_47_A] Un utente con ruolo M2M-ADMIN NON può effettuare una modifica parziale del nome di un e-service in stato DRAFT o ARCHIVED - Given "PA1" ha già creato un e-service in stato "" + Given "PA1" ha già creato un e-service in stato And l'utente è un "admin" di "PA1" con ruolo M2M m2m-admin When l'utente tenta di effettuare la modifica parziale del nome dell'e-service Then si ottiene lo status code 409 @@ -645,7 +645,7 @@ Feature: Gestione degli eServices attraverso APIs M2M V2 # 09/03/2026 ticket https://pagopa.atlassian.net/browse/QA-10948: al momento non è possibile archiviare un e-service @m2m-patch Scenario Outline: [M2MG_ESERVICES_48_A] Un utente con ruolo M2M-ADMIN NON può effettuare una modifica parziale della descrizione di un e-service in stato DRAFT o ARCHIVED - Given "PA1" ha già creato un e-service in stato "" + Given "PA1" ha già creato un e-service in stato And l'utente è un "admin" di "PA1" con ruolo M2M m2m-admin When l'utente tenta di effettuare la modifica parziale della descrizione dell'e-service Then si ottiene lo status code 409 diff --git a/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/purpose-template/purpose-template-get-and-create.feature b/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/purpose-template/purpose-template-get-and-create.feature index 94003e74d9..73038f3148 100644 --- a/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/purpose-template/purpose-template-get-and-create.feature +++ b/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/purpose-template/purpose-template-get-and-create.feature @@ -125,9 +125,11 @@ Feature: finalità agevolata, purpose template GET | support | | security | + @purposeTemplate @purposeTemplateGet-filtered Scenario Outline: [M2M_GET_PURPOSE_TEMPLATES] - Recupera i purpose templates con filtri opzionali Given l'utente è un "admin" di "PA1" And esistono purpose templates di test creati tramite data preparation + And l'utente è un "admin" di "PA1" con ruolo M2M m2m-admin When vengono recuperati i purpose templates con offset "", limit "", purposeTitle "", creatorIds "", eserviceIds "", states "", targetTenantKind "", handlesPersonalData "" Then si ottiene lo status code @@ -159,16 +161,20 @@ Feature: finalità agevolata, purpose template GET # Combinazione completa | 0 | 10 | %actual | %actual | %actual | %actual | %actual | true | 200 | - # offset invalid - | %null | 10 | %actual | %actual | %actual | %actual | %actual | true | 400 | + # offset invalid - disattivato perché al momento non abbiamo modo di specificarlo NULL senza che l'oggetto client blocchi la chiamata + # | %null | 10 | %actual | %actual | %actual | %actual | %actual | true | 400 | | -1 | 10 | %actual | %actual | %actual | %actual | %actual | true | 400 | # limit invalid | 0 | %null | %actual | %actual | %actual | %actual | %actual | true | 400 | | 0 | -1 | %actual | %actual | %actual | %actual | %actual | true | 400 | + @nrtC-waitForFix + Examples: + | offset | limit | purposeTitle | creatorIds | eserviceIds | states | targetTenantKind | handlesPersonalData | statusCode | + # purposeTitle invalid - | 0 | 10 | %null | %actual | %actual | %actual | %actual | true | 400 | + | 0 | 10 | %blank | %actual | %actual | %actual | %actual | true | 400 | # handlesPersonalData invalid - | 0 | 10 | %actual | %actual | %actual | %actual | %actual | %null | 400 | + | 0 | 10 | %actual | %actual | %actual | %actual | %actual | %blank | 400 | diff --git a/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/tenant/tenant-mail-upsert.feature b/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/tenant/tenant-mail-upsert.feature index d44a39186c..84f9cc751e 100644 --- a/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/tenant/tenant-mail-upsert.feature +++ b/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/tenant/tenant-mail-upsert.feature @@ -33,7 +33,7 @@ Feature: Aggiunta o aggiornamento di una mail di contatto Scenario: [TENANT_MAIL_UPSERT_02] Per un utente con sufficienti permessi (admin), alla richiesta di aggiunta di una mail di contatto compilando i parametri kind e address ma non description, va a buon fine Given l'utente è un "admin" di "PA1" When l'utente richiede una operazione di aggiunta di una mail di contatto senza description - Then si ottiene status code 204 + Then si ottiene response status code 204 And aspetta che si aggiorni il readmodel @nrt-minimal diff --git a/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/voucher/voucher-generation-client-and-keys.feature b/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/voucher/voucher-generation-client-and-keys.feature index 18721e5f18..7851ca296a 100644 --- a/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/voucher/voucher-generation-client-and-keys.feature +++ b/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/voucher/voucher-generation-client-and-keys.feature @@ -2,7 +2,7 @@ Feature: Generazione del voucher sulla creazione del client e sul caricamento della chiave @voucher_generation_client_and_keys1 -Scenario: La generazione del Voucher va a buon fine quando viene aggiunta una nuova chiave al client +Scenario: [VOUCHER_GENERATION_CLIENT_AND_KEYS_1] La generazione del Voucher va a buon fine quando viene aggiunta una nuova chiave al client Given l'utente è un "admin" di "PA1" Given "GSP" ha già creato e pubblicato 1 e-service Given "PA1" ha una richiesta di fruizione in stato "ACTIVE" per quell'e-service @@ -16,7 +16,7 @@ Scenario: La generazione del Voucher va a buon fine quando viene aggiunta una nu Then si ottiene la corretta generazione del voucher @voucher_generation_client_and_keys2 -Scenario: La generazione del Voucher va a buon fine quando viene rimossa una chiave dal client +Scenario: [VOUCHER_GENERATION_CLIENT_AND_KEYS_2] La generazione del Voucher va a buon fine quando viene rimossa una chiave dal client Given l'utente è un "admin" di "PA1" Given "GSP" ha già creato e pubblicato 1 e-service Given "PA1" ha una richiesta di fruizione in stato "ACTIVE" per quell'e-service @@ -31,7 +31,7 @@ Scenario: La generazione del Voucher va a buon fine quando viene rimossa una chi Then si ottiene la corretta generazione del voucher @voucher_generation_client_and_keys3 -Scenario: La generazione del Voucher va a buon fine quando viene aggiunta una nuova finalità al client +Scenario: [VOUCHER_GENERATION_CLIENT_AND_KEYS_3] La generazione del Voucher va a buon fine quando viene aggiunta una nuova finalità al client Given l'utente è un "admin" di "PA1" Given "GSP" ha già creato e pubblicato 1 e-service Given "PA1" ha una richiesta di fruizione in stato "ACTIVE" per quell'e-service @@ -46,7 +46,7 @@ Scenario: La generazione del Voucher va a buon fine quando viene aggiunta una nu Then si ottiene la corretta generazione del voucher @voucher_generation_client_and_keys4 @no-parallel -Scenario: La generazione del Voucher va a buon fine quando viene rimossa una finalità dal client +Scenario: [VOUCHER_GENERATION_CLIENT_AND_KEYS_4] La generazione del Voucher va a buon fine quando viene rimossa una finalità dal client Given l'utente è un "admin" di "PA1" Given "GSP" ha già creato e pubblicato 1 e-service Given "PA1" ha una richiesta di fruizione in stato "ACTIVE" per quell'e-service @@ -62,7 +62,7 @@ Scenario: La generazione del Voucher va a buon fine quando viene rimossa una fin Then si ottiene la corretta generazione del voucher @voucher_generation_client_and_keys5 -Scenario: La generazione del Voucher va a buon fine quando la finalità viene aggiunta dopo la chiave +Scenario: [VOUCHER_GENERATION_CLIENT_AND_KEYS_5] La generazione del Voucher va a buon fine quando la finalità viene aggiunta dopo la chiave Given l'utente è un "admin" di "PA1" Given "GSP" ha già creato e pubblicato 1 e-service Given "PA1" ha una richiesta di fruizione in stato "ACTIVE" per quell'e-service @@ -75,7 +75,7 @@ Scenario: La generazione del Voucher va a buon fine quando la finalità viene ag Then si ottiene la corretta generazione del voucher @voucher_generation_client_and_keys6 -Scenario: La generazione del Voucher va a buon fine quando la finalità viene aggiunta prima della chiave +Scenario: [VOUCHER_GENERATION_CLIENT_AND_KEYS_6] La generazione del Voucher va a buon fine quando la finalità viene aggiunta prima della chiave Given l'utente è un "admin" di "PA1" Given "GSP" ha già creato e pubblicato 1 e-service Given "PA1" ha una richiesta di fruizione in stato "ACTIVE" per quell'e-service @@ -88,7 +88,7 @@ Scenario: La generazione del Voucher va a buon fine quando la finalità viene ag Then si ottiene la corretta generazione del voucher @voucher_generation_client_and_keys7 -Scenario: La generazione del Voucher va a buon fine quando l’unica finalità viene rimossa e una nuova finalità viene aggiunta +Scenario: [VOUCHER_GENERATION_CLIENT_AND_KEYS_7] La generazione del Voucher va a buon fine quando l’unica finalità viene rimossa e una nuova finalità viene aggiunta Given l'utente è un "admin" di "PA1" Given "GSP" ha già creato e pubblicato 1 e-service Given "PA1" ha una richiesta di fruizione in stato "ACTIVE" per quell'e-service @@ -104,7 +104,7 @@ Scenario: La generazione del Voucher va a buon fine quando l’unica finalità v Then si ottiene la corretta generazione del voucher @voucher_generation_client_and_keys8 -Scenario: La generazione del Voucher fallisce quando l’unica chiave presente viene rimossa dal client +Scenario: [VOUCHER_GENERATION_CLIENT_AND_KEYS_8] La generazione del Voucher fallisce quando l’unica chiave presente viene rimossa dal client Given l'utente è un "admin" di "PA1" Given "GSP" ha già creato e pubblicato 1 e-service Given "PA1" ha una richiesta di fruizione in stato "ACTIVE" per quell'e-service @@ -118,7 +118,7 @@ Scenario: La generazione del Voucher fallisce quando l’unica chiave presente v Then la richiesta di generazione del Voucher non va a buon fine @voucher_generation_client_and_keys9 -Scenario: La generazione del Voucher fallisce quando la chiave viene rimossa dal client +Scenario: [VOUCHER_GENERATION_CLIENT_AND_KEYS_9] La generazione del Voucher fallisce quando la chiave viene rimossa dal client Given l'utente è un "admin" di "PA1" Given "GSP" ha già creato e pubblicato 1 e-service Given "PA1" ha una richiesta di fruizione in stato "ACTIVE" per quell'e-service @@ -133,7 +133,7 @@ Scenario: La generazione del Voucher fallisce quando la chiave viene rimossa dal Then la richiesta di generazione del Voucher non va a buon fine @voucher_generation_client_and_keys10 -Scenario: La generazione del Voucher fallisce quando l’unica finalità presente viene rimossa dal client +Scenario: [VOUCHER_GENERATION_CLIENT_AND_KEYS_10] La generazione del Voucher fallisce quando l’unica finalità presente viene rimossa dal client Given l'utente è un "admin" di "PA1" Given "GSP" ha già creato e pubblicato 1 e-service Given "PA1" ha una richiesta di fruizione in stato "ACTIVE" per quell'e-service @@ -147,7 +147,7 @@ Scenario: La generazione del Voucher fallisce quando l’unica finalità present Then la richiesta di generazione del Voucher non va a buon fine @voucher_generation_client_and_keys11 -Scenario: La generazione del Voucher fallisce quando la finalità viene rimossa dal client +Scenario: [VOUCHER_GENERATION_CLIENT_AND_KEYS_11] La generazione del Voucher fallisce quando la finalità viene rimossa dal client Given l'utente è un "admin" di "PA1" Given "GSP" ha già creato e pubblicato 1 e-service Given "PA1" ha una richiesta di fruizione in stato "ACTIVE" per quell'e-service @@ -163,7 +163,7 @@ Scenario: La generazione del Voucher fallisce quando la finalità viene rimossa Then la richiesta di generazione del Voucher non va a buon fine @voucher_generation_client_and_keys12 -Scenario: La generazione del Voucher fallisce quando la chiave non è associata a un client +Scenario: [VOUCHER_GENERATION_CLIENT_AND_KEYS_12] La generazione del Voucher fallisce quando la chiave non è associata a un client Given l'utente è un "admin" di "PA1" Given "GSP" ha già creato e pubblicato 1 e-service Given "PA1" ha una richiesta di fruizione in stato "ACTIVE" per quell'e-service @@ -177,7 +177,7 @@ Scenario: La generazione del Voucher fallisce quando la chiave non è associata Then la richiesta di generazione del Voucher non va a buon fine @voucher_generation_client_and_keys13 -Scenario: La generazione del Voucher fallisce quando la chiave non è associata al client richiesto +Scenario: [VOUCHER_GENERATION_CLIENT_AND_KEYS_13] La generazione del Voucher fallisce quando la chiave non è associata al client richiesto Given l'utente è un "admin" di "PA1" Given "GSP" ha già creato e pubblicato 1 e-service Given "PA1" ha una richiesta di fruizione in stato "ACTIVE" per quell'e-service @@ -194,7 +194,7 @@ Scenario: La generazione del Voucher fallisce quando la chiave non è associata Then la richiesta di generazione del Voucher non va a buon fine @voucher_generation_client_and_keys14 -Scenario: La generazione del Voucher fallisce quando il client viene cancellato +Scenario: [VOUCHER_GENERATION_CLIENT_AND_KEYS_14] La generazione del Voucher fallisce quando il client viene cancellato Given l'utente è un "admin" di "PA1" Given "GSP" ha già creato e pubblicato 1 e-service Given "PA1" ha una richiesta di fruizione in stato "ACTIVE" per quell'e-service diff --git a/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/voucher/voucher-generation-m2m.feature b/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/voucher/voucher-generation-m2m.feature index e66f386e60..51f02a4fae 100644 --- a/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/voucher/voucher-generation-m2m.feature +++ b/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/voucher/voucher-generation-m2m.feature @@ -2,7 +2,7 @@ Feature: Generazione del voucher m2m richiesta da un Ente @voucher_generation_m2m1 - Scenario: La generazione del JWT va a buon fine quando i parametri sono validi + Scenario: [VOUCHER_GENERATION_M2M_1] La generazione del JWT va a buon fine quando i parametri sono validi Given l'utente è un "admin" di "PA1" Given "PA1" ha già creato 1 client "API" Given "PA1" ha già inserito l'utente con ruolo "admin" come membro di quel client @@ -26,7 +26,7 @@ Feature: Generazione del voucher m2m richiesta da un Ente Then si ottiene la corretta generazione del voucher m2m admin @voucher_generation_m2m2 - Scenario: La generazione del JWT va a buon fine quando viene aggiunta una nuova chiave al client + Scenario: [VOUCHER_GENERATION_M2M_2] La generazione del JWT va a buon fine quando viene aggiunta una nuova chiave al client Given l'utente è un "admin" di "PA1" Given "PA1" ha già creato 1 client "API" Given "PA1" ha già inserito l'utente con ruolo "admin" come membro di quel client @@ -36,7 +36,7 @@ Feature: Generazione del voucher m2m richiesta da un Ente Then si ottiene la corretta generazione del voucher @voucher_generation_m2m3 - Scenario: La generazione del JWT va a buon fine quando viene rimossa una chiave dal client + Scenario: [VOUCHER_GENERATION_M2M_3] La generazione del JWT va a buon fine quando viene rimossa una chiave dal client Given l'utente è un "admin" di "PA1" Given "PA1" ha già creato 1 client "API" Given "PA1" ha già inserito l'utente con ruolo "admin" come membro di quel client @@ -47,7 +47,7 @@ Feature: Generazione del voucher m2m richiesta da un Ente Then si ottiene la corretta generazione del voucher @voucher_generation_m2m4 - Scenario: La generazione del JWT fallisce quando l’unica chiave presente viene rimossa dal client + Scenario: [VOUCHER_GENERATION_M2M_4] La generazione del JWT fallisce quando l’unica chiave presente viene rimossa dal client Given l'utente è un "admin" di "PA1" Given "PA1" ha già creato 1 client "API" Given "PA1" ha già inserito l'utente con ruolo "admin" come membro di quel client @@ -57,7 +57,7 @@ Feature: Generazione del voucher m2m richiesta da un Ente Then la richiesta di generazione del Voucher non va a buon fine @voucher_generation_m2m5 -Scenario: La generazione del JWT fallisce quando una delle chiavi nel client viene rimossa +Scenario: [VOUCHER_GENERATION_M2M_5] La generazione del JWT fallisce quando una delle chiavi nel client viene rimossa Given l'utente è un "admin" di "PA1" Given "PA1" ha già creato 1 client "API" Given "PA1" ha già inserito l'utente con ruolo "admin" come membro di quel client @@ -68,7 +68,7 @@ Scenario: La generazione del JWT fallisce quando una delle chiavi nel client vie Then la richiesta di generazione del Voucher non va a buon fine @voucher_generation_m2m6 -Scenario: La generazione del JWT fallisce quando la chiave non è associata a un client +Scenario: [VOUCHER_GENERATION_M2M_6] La generazione del JWT fallisce quando la chiave non è associata a un client Given l'utente è un "admin" di "PA1" Given "PA1" ha già creato 1 client "API" Given "PA1" ha già inserito l'utente con ruolo "admin" come membro di quel client @@ -77,7 +77,7 @@ Scenario: La generazione del JWT fallisce quando la chiave non è associata a un Then la richiesta di generazione del Voucher non va a buon fine @voucher_generation_m2m7 -Scenario: La generazione del JWT fallisce quando la chiave non è associata al client richiesto +Scenario: [VOUCHER_GENERATION_M2M_7] La generazione del JWT fallisce quando la chiave non è associata al client richiesto Given l'utente è un "admin" di "PA1" Given "PA1" ha già creato 1 client "API" Given "PA1" ha già creato 1 nuovo client "API" @@ -89,7 +89,7 @@ Scenario: La generazione del JWT fallisce quando la chiave non è associata al c Then la richiesta di generazione del Voucher non va a buon fine @voucher_generation_m2m8 -Scenario: La generazione del JWT fallisce quando il client viene cancellato +Scenario: [VOUCHER_GENERATION_M2M_8] La generazione del JWT fallisce quando il client viene cancellato Given l'utente è un "admin" di "PA1" Given "PA1" ha già creato 1 client "API" Given "PA1" ha già inserito l'utente con ruolo "admin" come membro di quel client diff --git a/interop-qa-tests/src/test/resources/junit-platform.properties b/interop-qa-tests/src/test/resources/junit-platform.properties index 5e2da9a105..91175ea75c 100644 --- a/interop-qa-tests/src/test/resources/junit-platform.properties +++ b/interop-qa-tests/src/test/resources/junit-platform.properties @@ -1,3 +1,12 @@ cucumber.execution.parallel.enabled=true cucumber.execution.parallel.config.strategy=fixed -cucumber.execution.parallel.config.fixed.parallelism=4 +#One for each feature file +#cucumber.execution.parallel.config.fixed.parallelism=39 +cucumber.execution.parallel.config.fixed.parallelism=100 +cucumber.execution.execution-mode.feature=concurrent + +cucumber.execution.exclusive-resources.noparallel.read-write=it.pagopa.interop.resources.NoParallelResources +cucumber.execution.exclusive-resources.certifiedAttribute.read-write=it.pagopa.interop.resources.CertifiedAttributeResources +cucumber.execution.exclusive-resources.deleghe1.read-write=it.pagopa.interop.resources.Deleghe1Resources +cucumber.execution.exclusive-resources.deleghe2.read-write=it.pagopa.interop.resources.Deleghe2Resources +cucumber.execution.exclusive-resources.reversePurpose.read-write=it.pagopa.interop.resources.ReversePurpose \ No newline at end of file