diff --git a/interop-qa-tests/pom.xml b/interop-qa-tests/pom.xml
index e07564dc2..1742c8a0d 100644
--- a/interop-qa-tests/pom.xml
+++ b/interop-qa-tests/pom.xml
@@ -158,10 +158,19 @@
process-resources
+
+ true
+
OffsetDateTime=java.lang.String
- https://raw.githubusercontent.com/pagopa/interop-be-monorepo/refs/heads/develop/packages/api-clients/open-api/bffApi.yml
+
+
+
+
+ https://raw.githubusercontent.com/pagopa/interop-be-monorepo/refs/heads/feature/pin-4901_e-service-template/packages/api-clients/open-api/bffApi.yml
java
resttemplate
false
diff --git a/interop-qa-tests/src/main/java/it/pagopa/interop/authorization/service/impl/AuthorizationClientImpl.java b/interop-qa-tests/src/main/java/it/pagopa/interop/authorization/service/impl/AuthorizationClientImpl.java
index 3d1865d51..66c913ec9 100644
--- a/interop-qa-tests/src/main/java/it/pagopa/interop/authorization/service/impl/AuthorizationClientImpl.java
+++ b/interop-qa-tests/src/main/java/it/pagopa/interop/authorization/service/impl/AuthorizationClientImpl.java
@@ -84,7 +84,11 @@ public PublicKey getClientKeyById(String xCorrelationId, UUID clientId, String k
@Override
public void createKeys(String xCorrelationId, UUID clientId, List keySeed) {
- clientsApi.createKeys(xCorrelationId, clientId, keySeed);
+ keySeed.forEach(ks -> createKey(xCorrelationId, clientId, ks));
+ }
+
+ private void createKey(String xCorrelationId, UUID clientId, KeySeed keySeed) {
+ clientsApi.createKey(xCorrelationId, clientId, keySeed);
}
@Override
diff --git a/interop-qa-tests/src/main/java/it/pagopa/interop/e_service_template/IEServiceTemplateClient.java b/interop-qa-tests/src/main/java/it/pagopa/interop/e_service_template/IEServiceTemplateClient.java
new file mode 100644
index 000000000..e1ad25bc0
--- /dev/null
+++ b/interop-qa-tests/src/main/java/it/pagopa/interop/e_service_template/IEServiceTemplateClient.java
@@ -0,0 +1,12 @@
+package it.pagopa.interop.e_service_template;
+
+import it.pagopa.interop.authorization.service.utils.SettableBearerToken;
+import it.pagopa.interop.generated.openapi.clients.bff.model.CreatedEServiceTemplateVersion;
+import it.pagopa.interop.generated.openapi.clients.bff.model.EServiceTemplateSeed;
+import it.pagopa.interop.generated.openapi.clients.bff.model.EServiceTemplateVersionDetails;
+import java.util.UUID;
+
+public interface IEServiceTemplateClient extends SettableBearerToken {
+ CreatedEServiceTemplateVersion createEServiceTemplate(String xCorrelationId, EServiceTemplateSeed eserviceSeed);
+ EServiceTemplateVersionDetails getEServiceTemplateVersion(String xCorrelationId, UUID eServiceTemplateId, UUID eServiceTemplateVersionId);
+}
diff --git a/interop-qa-tests/src/main/java/it/pagopa/interop/e_service_template/impl/EServiceTemplateApiClientImpl.java b/interop-qa-tests/src/main/java/it/pagopa/interop/e_service_template/impl/EServiceTemplateApiClientImpl.java
new file mode 100644
index 000000000..201dc802a
--- /dev/null
+++ b/interop-qa-tests/src/main/java/it/pagopa/interop/e_service_template/impl/EServiceTemplateApiClientImpl.java
@@ -0,0 +1,53 @@
+package it.pagopa.interop.e_service_template.impl;
+
+import it.pagopa.interop.conf.InteropClientConfigs;
+import it.pagopa.interop.e_service_template.IEServiceTemplateClient;
+import it.pagopa.interop.generated.openapi.clients.bff.ApiClient;
+import it.pagopa.interop.generated.openapi.clients.bff.api.EserviceTemplatesApi;
+import it.pagopa.interop.generated.openapi.clients.bff.model.CreatedEServiceTemplateVersion;
+import it.pagopa.interop.generated.openapi.clients.bff.model.EServiceTemplateSeed;
+import it.pagopa.interop.generated.openapi.clients.bff.model.EServiceTemplateVersionDetails;
+import java.util.UUID;
+import org.springframework.beans.factory.config.ConfigurableBeanFactory;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+@Component
+@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
+public class EServiceTemplateApiClientImpl implements IEServiceTemplateClient {
+ private final EserviceTemplatesApi eserviceTemplatesApi;
+ private final RestTemplate restTemplate;
+ private final String basePath;
+
+ public EServiceTemplateApiClientImpl(RestTemplate restTemplate, InteropClientConfigs interopClientConfigs) {
+ this.restTemplate = restTemplate;
+ this.basePath = interopClientConfigs.getBaseUrl();
+ this.eserviceTemplatesApi = new EserviceTemplatesApi(createApiClient("dummyBearer"));
+ }
+
+ private ApiClient createApiClient(String bearerToken) {
+ ApiClient apiClient = new ApiClient(restTemplate);
+ apiClient.setBasePath(basePath);
+ apiClient.setBearerToken(bearerToken);
+ return apiClient;
+ }
+
+ @Override
+ public CreatedEServiceTemplateVersion createEServiceTemplate(String xCorrelationId,
+ EServiceTemplateSeed eserviceSeed) {
+ return eserviceTemplatesApi.createEServiceTemplate(xCorrelationId, eserviceSeed);
+ }
+
+ @Override
+ public EServiceTemplateVersionDetails getEServiceTemplateVersion(String xCorrelationId,
+ UUID eServiceTemplateId, UUID eServiceTemplateVersionId) {
+ return eserviceTemplatesApi.getEServiceTemplateVersion(xCorrelationId, eServiceTemplateId,
+ eServiceTemplateVersionId);
+ }
+
+ @Override
+ public void setBearerToken(String bearerToken) {
+ this.eserviceTemplatesApi.setApiClient(createApiClient(bearerToken));
+ }
+}
diff --git a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/ClientTokenConfigurator.java b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/ClientTokenConfigurator.java
index 6ec9a2008..d174a5f8a 100644
--- a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/ClientTokenConfigurator.java
+++ b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/ClientTokenConfigurator.java
@@ -9,6 +9,7 @@
import it.pagopa.interop.delegate.service.IConsumerDelegationsApiClient;
import it.pagopa.interop.delegate.service.IDelegationApiClient;
import it.pagopa.interop.delegate.service.IProducerDelegationsApiClient;
+import it.pagopa.interop.e_service_template.IEServiceTemplateClient;
import it.pagopa.interop.purpose.service.IPurposeApiClient;
import it.pagopa.interop.tenant.service.ITenantsApi;
import lombok.AllArgsConstructor;
@@ -25,6 +26,7 @@ public class ClientTokenConfigurator {
private IAttributeApiClient attributeApiClient;
private ITenantsApi tenantsApi;
private IEServiceClient eServiceClient;
+ private IEServiceTemplateClient eServiceTemplateClient;
private IProducerClient producerClient;
private IPurposeApiClient purposeApiClient;
private IProducerDelegationsApiClient producerDelegationsApiClient;
@@ -37,6 +39,7 @@ public void setBearerToken(String token) {
attributeApiClient.setBearerToken(token);
tenantsApi.setBearerToken(token);
eServiceClient.setBearerToken(token);
+ eServiceTemplateClient.setBearerToken(token);
producerClient.setBearerToken(token);
purposeApiClient.setBearerToken(token);
producerDelegationsApiClient.setBearerToken(token);
diff --git a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/DataPreparationService.java b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/DataPreparationService.java
index efd9ef5e6..462deaf44 100644
--- a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/DataPreparationService.java
+++ b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/DataPreparationService.java
@@ -12,6 +12,7 @@
import it.pagopa.interop.authorization.service.IAuthorizationClient;
import it.pagopa.interop.authorization.service.IProducerClient;
import it.pagopa.interop.authorization.service.utils.PollingService;
+import it.pagopa.interop.e_service_template.IEServiceTemplateClient;
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;
@@ -24,12 +25,15 @@
import it.pagopa.interop.generated.openapi.clients.bff.model.ClientSeed;
import it.pagopa.interop.generated.openapi.clients.bff.model.CompactUser;
import it.pagopa.interop.generated.openapi.clients.bff.model.CreatedEServiceDescriptor;
+import it.pagopa.interop.generated.openapi.clients.bff.model.CreatedEServiceTemplateVersion;
import it.pagopa.interop.generated.openapi.clients.bff.model.CreatedResource;
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.EServiceSeed;
import it.pagopa.interop.generated.openapi.clients.bff.model.EServiceTechnology;
+import it.pagopa.interop.generated.openapi.clients.bff.model.EServiceTemplateSeed;
+import it.pagopa.interop.generated.openapi.clients.bff.model.EServiceTemplateVersionDetails;
import it.pagopa.interop.generated.openapi.clients.bff.model.InlineObject3;
import it.pagopa.interop.generated.openapi.clients.bff.model.KeySeed;
import it.pagopa.interop.generated.openapi.clients.bff.model.ProducerEServiceDescriptor;
@@ -83,6 +87,7 @@ public class DataPreparationService {
private final IAttributeApiClient attributeApiClient;
private final ITenantsApi tenantsApi;
private final IEServiceClient eServiceClient;
+ private final IEServiceTemplateClient eServiceTemplateClient;
private final IProducerClient producerClient;
private final IPurposeApiClient purposeApiClient;
private final PollingService pollingService;
@@ -104,6 +109,7 @@ public DataPreparationService(ClientTokenConfigurator clientTokenConfigurator,
this.attributeApiClient = clientTokenConfigurator.getAttributeApiClient();
this.tenantsApi = clientTokenConfigurator.getTenantsApi();
this.eServiceClient = clientTokenConfigurator.getEServiceClient();
+ this.eServiceTemplateClient = clientTokenConfigurator.getEServiceTemplateClient();
this.producerClient = clientTokenConfigurator.getProducerClient();
this.purposeApiClient = clientTokenConfigurator.getPurposeApiClient();
this.sharedStepsContext = sharedStepsContext;
@@ -325,6 +331,20 @@ public void assignCertifiedAttributeToTenant(UUID tenantId, UUID attributeId) {
);
}
+ public EServiceTemplateVersionDetails createEServiceTemplate(EServiceTemplateSeed templateSeed) {
+ httpCallExecutor.performCall(() -> eServiceTemplateClient.createEServiceTemplate(sharedStepsContext.getXCorrelationId(), templateSeed));
+ pollingService.makePolling(
+ () -> httpCallExecutor.performCall(
+ () -> eServiceTemplateClient.getEServiceTemplateVersion(
+ sharedStepsContext.getXCorrelationId(),
+ ((CreatedEServiceTemplateVersion) httpCallExecutor.getResponse()).getId(),
+ ((CreatedEServiceTemplateVersion) httpCallExecutor.getResponse()).getVersionId())),
+ res -> res != HttpStatus.NOT_FOUND,
+ "There was an error while retrieving the e-service template"
+ );
+ return (EServiceTemplateVersionDetails) httpCallExecutor.getResponse();
+ }
+
public EServiceDescriptor createEServiceAndDraftDescriptor(EServiceSeed partialEserviceSeed, UpdateEServiceDescriptorSeed partialDescriptorSeed) {
EServiceSeed DEFAULT_ESERVICE_SEED = new EServiceSeed()
.name(String.format("e-service %d", ThreadLocalRandom.current().nextInt(0, Integer.MAX_VALUE)))
diff --git a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/InteropCucumberSpringIntegration.java b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/InteropCucumberSpringIntegration.java
index 548d27257..1787992c7 100644
--- a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/InteropCucumberSpringIntegration.java
+++ b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/InteropCucumberSpringIntegration.java
@@ -15,10 +15,11 @@
import it.pagopa.interop.authorization.service.utils.PollingService;
import it.pagopa.interop.conf.InteropClientConfigs;
import it.pagopa.interop.config.springconfig.springconfig.InteropRestTemplateConfiguration;
-import it.pagopa.interop.delegate.service.impl.ConsumerDelegationsApiClientImpl;
import it.pagopa.interop.config.springconfig.springconfig.JwtTokenServiceConfiguration;
+import it.pagopa.interop.delegate.service.impl.ConsumerDelegationsApiClientImpl;
import it.pagopa.interop.delegate.service.impl.DelegationApiClientImpl;
import it.pagopa.interop.delegate.service.impl.ProducerDelegationsApiClientImpl;
+import it.pagopa.interop.e_service_template.impl.EServiceTemplateApiClientImpl;
import it.pagopa.interop.purpose.RiskAnalysisDataInitializer;
import it.pagopa.interop.purpose.service.impl.PurposeApiClientImpl;
import it.pagopa.interop.tenant.service.ITenantsApi;
@@ -52,6 +53,7 @@
PurposeApiClientImpl.class,
IEServiceClient.class,
EServiceApiClientImpl.class,
+ EServiceTemplateApiClientImpl.class,
RiskAnalysisDataInitializer.class,
ClientTokenConfigurator.class,
ProducerDelegationsApiClientImpl.class,
diff --git a/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/e_service_template/EServiceTemplateSteps.java b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/e_service_template/EServiceTemplateSteps.java
new file mode 100644
index 000000000..b3312df73
--- /dev/null
+++ b/interop-qa-tests/src/test/java/it/pagopa/pn/interop/cucumber/steps/e_service_template/EServiceTemplateSteps.java
@@ -0,0 +1,53 @@
+package it.pagopa.pn.interop.cucumber.steps.e_service_template;
+
+import io.cucumber.java.en.When;
+import it.pagopa.interop.authorization.service.utils.IdentityService;
+import it.pagopa.interop.authorization.service.utils.PollingService;
+import it.pagopa.interop.e_service_template.IEServiceTemplateClient;
+import it.pagopa.interop.generated.openapi.clients.bff.model.EServiceMode;
+import it.pagopa.interop.generated.openapi.clients.bff.model.EServiceTechnology;
+import it.pagopa.interop.generated.openapi.clients.bff.model.EServiceTemplateSeed;
+import it.pagopa.interop.generated.openapi.clients.bff.model.VersionSeedForEServiceTemplateCreation;
+import it.pagopa.pn.interop.cucumber.steps.ClientTokenConfigurator;
+import it.pagopa.pn.interop.cucumber.steps.DataPreparationService;
+import it.pagopa.pn.interop.cucumber.steps.SharedStepsContext;
+import java.util.concurrent.ThreadLocalRandom;
+import lombok.Data;
+
+@Data
+public class EServiceTemplateSteps {
+ private ClientTokenConfigurator clientTokenConfigurator;
+ private DataPreparationService dataPreparationService;
+ private IdentityService identityService;
+ private SharedStepsContext sharedStepsContext;
+ private IEServiceTemplateClient eServiceTemplateClient;
+ private PollingService pollingService;
+
+ public EServiceTemplateSteps(ClientTokenConfigurator clientTokenConfigurator,
+ DataPreparationService dataPreparationService,
+ SharedStepsContext sharedStepsContext) {
+ this.clientTokenConfigurator = clientTokenConfigurator;
+ this.dataPreparationService = dataPreparationService;
+ this.sharedStepsContext = sharedStepsContext;
+ this.identityService = sharedStepsContext.getIdentityService();
+ this.eServiceTemplateClient = clientTokenConfigurator.getEServiceTemplateClient();
+ this.pollingService = sharedStepsContext.getPollingService();
+ }
+
+ @When("l'utente effettua la creazione di un e-service template")
+ public void createEServiceTemplate() {
+ clientTokenConfigurator.setBearerToken(sharedStepsContext.getUserToken());
+ int randomInt = ThreadLocalRandom.current().nextInt(0, Integer.MAX_VALUE);
+ String templateName = String.format("eservice-template-%d-%d", sharedStepsContext.getTestSeed(), randomInt);
+ VersionSeedForEServiceTemplateCreation version = new VersionSeedForEServiceTemplateCreation()
+ .voucherLifespan(86400);
+ EServiceTemplateSeed templateSeed = new EServiceTemplateSeed()
+ .audienceDescription("Audience description per il template " + templateName)
+ .name(templateName)
+ .eserviceDescription("Descrizione del servizio associato al template " + templateName)
+ .mode(EServiceMode.DELIVER)
+ .version(version)
+ .technology(EServiceTechnology.REST);
+ dataPreparationService.createEServiceTemplate(templateSeed);
+ }
+}
diff --git a/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/e-service-template/e-service-template.feature b/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/e-service-template/e-service-template.feature
new file mode 100644
index 000000000..8f29164fe
--- /dev/null
+++ b/interop-qa-tests/src/test/resources/it/pagopa/pn/cucumber/e-service-template/e-service-template.feature
@@ -0,0 +1,37 @@
+@e-service-template
+Feature: Test API of e-service template
+ #Background:
+ # Given l'ente "PA2" rimuove la disponibilità a ricevere deleghe in fruizione
+ # And l'ente "PA1" rimuove la disponibilità a ricevere deleghe in fruizione
+ # And l'ente "GSP2" rimuove la disponibilità a ricevere deleghe in fruizione
+
+ Scenario Outline: [INCARICATO-EST-001] La creazione di un e-service template NON può essere fatta da parte un ente NON erogatore di e-service
+ Given l'utente è un "" di "PA1"
+ When l'utente effettua la creazione di un e-service template
+ Then si ottiene status code
+ Examples:
+ | ruolo | statusCode |
+ | admin | 403 |
+ | api | 403 |
+ | security | 403 |
+ | api,security| 403 |
+ | support | 403 |
+
+ Scenario Outline: [INCARICATO-EST-002] La creazione di un e-service template può essere fatta da parte un ente erogatore di e-service in veste di ADMIN o API
+ Given l'utente è un "" di "PA1"
+ And "PA1" ha già creato e pubblicato 1 e-service
+ When l'utente effettua la creazione di un e-service template
+ Then si ottiene status code
+ Examples:
+ | ruolo | statusCode |
+ | admin | 200 |
+ | api | 200 |
+ | security | 403 |
+ | api,security| 403 |
+ | support | 403 |
+
+ #TODO: test in cui vengono specificati tutti i campi nella api di creazione
+ #TODO: test dove vengono specificati meno dei campi obbligatori nella api di creazione
+
+ #TODO test in cui vengono specificati tutti i campi nella api di creazione, oggetto Versione
+ #TODO: test dove vengono specificati meno dei campi obbligatori nella api di creazione, oggetto Versione
\ No newline at end of file