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