Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PIQA-120 - voucher generation eservice #162

Open
wants to merge 4 commits into
base: piqa-119_voucher-generation
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions features/agreement/step_definitions/agreement-creation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -135,9 +135,11 @@ Given(
async function (tenantType: TenantType) {
assertContextSchema(this, {
eserviceId: z.string(),
descriptorId: z.string().optional(),
});
const token = await getToken(tenantType);

this.oldDescriptorId = this.descriptorId;
this.descriptorId = await dataPreparationService.createNextDraftDescriptor(
token,
this.eserviceId
Expand Down
109 changes: 109 additions & 0 deletions features/voucher/step_definitions/voucher-generation-eservice.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
import { Given, Then } from "@cucumber/cucumber";
import { z } from "zod";
import {
assertContextSchema,
getToken,
TenantType,
} from "../../../utils/commons";
import { dataPreparationService } from "../../../services/data-preparation.service";

Given(
"{string} ha già una nuova versione in stato DRAFT per quell'e-service",
async function (tenantType: TenantType) {
assertContextSchema(this, {
eserviceId: z.string(),
});
const token = await getToken(tenantType);

const descriptorId = await dataPreparationService.createNextDraftDescriptor(
token,
this.eserviceId
);
this.descriptorId = descriptorId;

await dataPreparationService.bringDescriptorToGivenState({
token,
eserviceId: this.eserviceId,
descriptorId,
descriptorState: "DRAFT",
});
}
);

Given(
"{string} ha già attivato nuovamente quell'e-service",
async function (tenantType: TenantType) {
assertContextSchema(this, {
eserviceId: z.string(),
descriptorId: z.string(),
});

const token = await getToken(tenantType);

await dataPreparationService.activateDescriptor(
token,
this.eserviceId,
this.descriptorId
);
}
);

Given(
"{string} ha già sospeso la vecchia versione di quell'e-service",
async function (tenant: TenantType) {
assertContextSchema(this, {
eserviceId: z.string(),
oldDescriptorId: z.string(),
});
const token = await getToken(tenant);
this.response = await dataPreparationService.suspendDescriptor(
token,
this.eserviceId,
this.oldDescriptorId
);
}
);

Given(
"{string} ha già attivato nuovamente la vecchia versione quell'e-service",
async function (tenantType: TenantType) {
assertContextSchema(this, {
eserviceId: z.string(),
oldDescriptorId: z.string(),
});

const token = await getToken(tenantType);

await dataPreparationService.activateDescriptor(
token,
this.eserviceId,
this.oldDescriptorId
);
}
);

Then(
"la richiesta di generazione del Voucher non va a buon fine",
async function () {
assertContextSchema(this, {
response: z.object({
data: z.object({
correlationId: z.string().uuid(),
errors: z.tuple([
z.object({
code: z.literal("015-0008"),
detail: z.literal(
"Unable to generate a token for the given request"
),
}),
]),
status: z.literal(400),
title: z.literal(
"The request contains bad syntax or cannot be fulfilled."
),
type: z.literal("about:blank"),
}),
}),
});
}
);
15 changes: 8 additions & 7 deletions features/voucher/step_definitions/voucher-generation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,20 +25,21 @@ When("l'utente richiede la generazione del voucher", async function () {
privateKey,
});

const result = await requestVoucher({
this.response = await requestVoucher({
clientId,
clientAssertion,
});

this.result = result;
});

Then("si ottiene la corretta generazione del voucher", async function () {
assertContextSchema(this, {
result: z.object({
access_token: z.string(),
expires_in: z.number(),
token_type: z.literal("Bearer"),
response: z.object({
data: z.object({
access_token: z.string(),
expires_in: z.number(),
token_type: z.literal("Bearer"),
}),
status: z.literal(200),
}),
});
});
185 changes: 185 additions & 0 deletions features/voucher/voucher-generation-eservice.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,185 @@
@voucher_generation_eservice
Feature: Generazione del voucher richiesta da un Ente

@voucher_generation_eservice1
Scenario Outline: La generazione del Voucher va a buon fine per una Versione deprecata dell'EService
Given l'utente è un "admin" di "PA1"
Given "PA2" ha già creato e pubblicato 1 e-service
Given "PA1" ha una richiesta di fruizione in stato "ACTIVE" per quell'e-service
Given "PA1" ha già creato 1 finalità in stato "ACTIVE" per quell'eservice
Given "PA1" ha già creato 1 client "CONSUMER"
Given "PA1" ha già inserito l'utente con ruolo "admin" come membro di quel client
Given "PA1" ha già associato la finalità a quel client
Given un "admin" di "PA1" ha caricato una chiave pubblica nel client
Given "PA2" ha già pubblicato una nuova versione per quell'e-service
When l'utente richiede la generazione del voucher
Then si ottiene la corretta generazione del voucher

@voucher_generation_eservice2
Scenario Outline: La generazione del Voucher va a buon fine per una Versione pubblicata dell'EService, quando esiste una versione precedente deprecata
Given l'utente è un "admin" di "PA1"
Given "PA2" ha già creato e pubblicato 1 e-service
Given "GSP" ha una richiesta di fruizione in stato "ACTIVE" per quell'e-service
Given "PA2" ha già pubblicato una nuova versione per quell'e-service
Given "PA1" ha una richiesta di fruizione in stato "ACTIVE" per quell'e-service
Given "PA1" ha già creato 1 finalità in stato "ACTIVE" per quell'eservice
Given "PA1" ha già creato 1 client "CONSUMER"
Given "PA1" ha già inserito l'utente con ruolo "admin" come membro di quel client
Given "PA1" ha già associato la finalità a quel client
Given un "admin" di "PA1" ha caricato una chiave pubblica nel client
When l'utente richiede la generazione del voucher
Then si ottiene la corretta generazione del voucher

@voucher_generation_eservice3
Scenario Outline: La generazione del Voucher va a buon fine per una Versione pubblicata dell'EService, quando la precedente è stata archiviata in seguito alla pubblicazione
Given l'utente è un "admin" di "PA1"
Given "PA2" ha già creato e pubblicato 1 e-service
Given "PA2" ha già pubblicato una nuova versione per quell'e-service
Given "PA1" ha una richiesta di fruizione in stato "ACTIVE" per quell'e-service
Given "PA1" ha già creato 1 finalità in stato "ACTIVE" per quell'eservice
Given "PA1" ha già creato 1 client "CONSUMER"
Given "PA1" ha già inserito l'utente con ruolo "admin" come membro di quel client
Given "PA1" ha già associato la finalità a quel client
Given un "admin" di "PA1" ha caricato una chiave pubblica nel client
When l'utente richiede la generazione del voucher
Then si ottiene la corretta generazione del voucher

@voucher_generation_eservice4
Scenario Outline: La generazione del Voucher va a buon fine per una Versione pubblicata dell'EService, quando esiste una Versione precedente sospesa
Given l'utente è un "admin" di "PA1"
Given "PA2" ha già creato e pubblicato 1 e-service
Given "GSP" ha una richiesta di fruizione in stato "ACTIVE" per quell'e-service
Given "PA2" ha già sospeso quell'e-service
Given "PA2" ha già pubblicato una nuova versione per quell'e-service
Given "PA1" ha una richiesta di fruizione in stato "ACTIVE" per quell'e-service
Given "PA1" ha già creato 1 finalità in stato "ACTIVE" per quell'eservice
Given "PA1" ha già creato 1 client "CONSUMER"
Given "PA1" ha già inserito l'utente con ruolo "admin" come membro di quel client
Given "PA1" ha già associato la finalità a quel client
Given un "admin" di "PA1" ha caricato una chiave pubblica nel client
When l'utente richiede la generazione del voucher
Then si ottiene la corretta generazione del voucher

@voucher_generation_eservice5
Scenario Outline: La generazione del Voucher va a buon fine per una Versione deprecata dell'EService quando la Versione più recente è sospesa
Given l'utente è un "admin" di "PA1"
Given "PA2" ha già creato e pubblicato 1 e-service
Given "PA1" ha una richiesta di fruizione in stato "ACTIVE" per quell'e-service
Given "PA1" ha già creato 1 finalità in stato "ACTIVE" per quell'eservice
Given "PA1" ha già creato 1 client "CONSUMER"
Given "PA1" ha già inserito l'utente con ruolo "admin" come membro di quel client
Given "PA1" ha già associato la finalità a quel client
Given un "admin" di "PA1" ha caricato una chiave pubblica nel client
Given "PA2" ha già pubblicato una nuova versione per quell'e-service
Given "PA2" ha già sospeso quell'e-service
When l'utente richiede la generazione del voucher
Then si ottiene la corretta generazione del voucher

@voucher_generation_eservice6
Scenario Outline: La generazione del Voucher va a buon fine per una Versione pubblicata dell'EService quando esiste una Versione più recente in bozza
Given l'utente è un "admin" di "PA1"
Given "PA2" ha già creato e pubblicato 1 e-service
Given "PA1" ha una richiesta di fruizione in stato "ACTIVE" per quell'e-service
Given "PA1" ha già creato 1 finalità in stato "ACTIVE" per quell'eservice
Given "PA1" ha già creato 1 client "CONSUMER"
Given "PA1" ha già inserito l'utente con ruolo "admin" come membro di quel client
Given "PA1" ha già associato la finalità a quel client
Given un "admin" di "PA1" ha caricato una chiave pubblica nel client
Given "PA2" ha già una nuova versione in stato DRAFT per quell'e-service
When l'utente richiede la generazione del voucher
Then si ottiene la corretta generazione del voucher

@voucher_generation_eservice7
Scenario Outline: La generazione del Voucher va a buon fine per una Versione sospesa e poi riattivata dell'EService
Given l'utente è un "admin" di "PA1"
Given "PA2" ha già creato e pubblicato 1 e-service
Given "PA1" ha una richiesta di fruizione in stato "ACTIVE" per quell'e-service
Given "PA1" ha già creato 1 finalità in stato "ACTIVE" per quell'eservice
Given "PA1" ha già creato 1 client "CONSUMER"
Given "PA1" ha già inserito l'utente con ruolo "admin" come membro di quel client
Given "PA1" ha già associato la finalità a quel client
Given un "admin" di "PA1" ha caricato una chiave pubblica nel client
Given "PA2" ha già sospeso quell'e-service
Given "PA2" ha già attivato nuovamente quell'e-service
When l'utente richiede la generazione del voucher
Then si ottiene la corretta generazione del voucher

@voucher_generation_eservice8
Scenario Outline: La generazione del Voucher va a buon fine per una Versione deprecata dell'EService che viene sospesa e poi riattivata
Given l'utente è un "admin" di "PA1"
Given "PA2" ha già creato e pubblicato 1 e-service
Given "PA1" ha una richiesta di fruizione in stato "ACTIVE" per quell'e-service
Given "PA1" ha già creato 1 finalità in stato "ACTIVE" per quell'eservice
Given "PA1" ha già creato 1 client "CONSUMER"
Given "PA1" ha già inserito l'utente con ruolo "admin" come membro di quel client
Given "PA1" ha già associato la finalità a quel client
Given un "admin" di "PA1" ha caricato una chiave pubblica nel client
Given "PA2" ha già pubblicato una nuova versione per quell'e-service
Given "PA2" ha già sospeso la vecchia versione di quell'e-service
Given "PA2" ha già attivato nuovamente la vecchia versione quell'e-service
When l'utente richiede la generazione del voucher
Then si ottiene la corretta generazione del voucher

@voucher_generation_eservice9
Scenario Outline: La generazione del Voucher fallisce per una Versione sospesa dell'EService quando esiste una Versione più recente in bozza
Given l'utente è un "admin" di "PA1"
Given "PA2" ha già creato e pubblicato 1 e-service
Given "PA1" ha una richiesta di fruizione in stato "ACTIVE" per quell'e-service
Given "PA1" ha già creato 1 finalità in stato "ACTIVE" per quell'eservice
Given "PA1" ha già creato 1 client "CONSUMER"
Given "PA1" ha già inserito l'utente con ruolo "admin" come membro di quel client
Given "PA1" ha già associato la finalità a quel client
Given un "admin" di "PA1" ha caricato una chiave pubblica nel client
Given "PA2" ha già sospeso quell'e-service
Given "PA2" ha già una nuova versione in stato DRAFT per quell'e-service
When l'utente richiede la generazione del voucher
Then la richiesta di generazione del Voucher non va a buon fine

@voucher_generation_eservice10
Scenario Outline: La generazione del Voucher fallisce per una Versione sospesa dell'EService quando esiste una Versione precedente deprecata
Given l'utente è un "admin" di "PA1"
Given "PA2" ha già creato e pubblicato 1 e-service
Given "GSP" ha una richiesta di fruizione in stato "ACTIVE" per quell'e-service
Given "PA2" ha già pubblicato una nuova versione per quell'e-service
Given "PA1" ha una richiesta di fruizione in stato "ACTIVE" per quell'e-service
Given "PA1" ha già creato 1 finalità in stato "ACTIVE" per quell'eservice
Given "PA1" ha già creato 1 client "CONSUMER"
Given "PA1" ha già inserito l'utente con ruolo "admin" come membro di quel client
Given "PA1" ha già associato la finalità a quel client
Given un "admin" di "PA1" ha caricato una chiave pubblica nel client
Given "PA2" ha già sospeso quell'e-service
When l'utente richiede la generazione del voucher
Then la richiesta di generazione del Voucher non va a buon fine

@voucher_generation_eservice11
Scenario Outline: La generazione del Voucher fallisce per una Versione sospesa dell'EService quando esiste una Versione più recente pubblicata
Given l'utente è un "admin" di "PA1"
Given "PA2" ha già creato e pubblicato 1 e-service
Given "PA1" ha una richiesta di fruizione in stato "ACTIVE" per quell'e-service
Given "PA2" ha già pubblicato una nuova versione per quell'e-service
Given "PA1" ha già creato 1 finalità in stato "ACTIVE" per quell'eservice
Given "PA1" ha già creato 1 client "CONSUMER"
Given "PA1" ha già inserito l'utente con ruolo "admin" come membro di quel client
Given "PA1" ha già associato la finalità a quel client
Given un "admin" di "PA1" ha caricato una chiave pubblica nel client
Given "PA2" ha già sospeso la vecchia versione di quell'e-service
When l'utente richiede la generazione del voucher
Then la richiesta di generazione del Voucher non va a buon fine

# Waiting for the descriptor archivation to be implemented in the bff and fe
@voucher_generation_eservice12 @wait_for_fix @PIN-3371
Scenario Outline: La generazione del Voucher fallisce per una Versione dell'EService manualmente archiviata
Given l'utente è un "admin" di "PA1"
Given "PA2" ha già creato e pubblicato 1 e-service
Given "PA1" ha una richiesta di fruizione in stato "ACTIVE" per quell'e-service
Given "PA1" ha già creato 1 finalità in stato "ACTIVE" per quell'eservice
Given "PA1" ha già creato 1 client "CONSUMER"
Given "PA1" ha già inserito l'utente con ruolo "admin" come membro di quel client
Given "PA1" ha già associato la finalità a quel client
Given un "admin" di "PA1" ha caricato una chiave pubblica nel client
#TODO! ADD STEP HERE!!
When l'utente richiede la generazione del voucher
Then si ottiene la corretta generazione del voucher

# Dynamo DB degli stati (token-generation-read-model) non è più sync, bisogna aggiungere sleep
# Wait for fix sopra
24 changes: 24 additions & 0 deletions services/data-preparation.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -317,6 +317,30 @@ export const dataPreparationService = {
);
},

async activateDescriptor(
token: string,
eserviceId: string,
descriptorId: string
) {
const response = await apiClient.eservices.activateDescriptor(
eserviceId,
descriptorId,
getAuthorizationHeader(token)
);

assertValidResponse(response);

await makePolling(
() =>
apiClient.producers.getProducerEServiceDescriptor(
eserviceId,
descriptorId,
getAuthorizationHeader(token)
),
(res) => res.data.state === "PUBLISHED" || res.data.state === "DEPRECATED"
);
},

async createAgreement(
token: string,
eserviceId: string,
Expand Down
5 changes: 2 additions & 3 deletions utils/commons.ts
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,7 @@ export async function requestVoucher({
clientId: string;
clientAssertion: string;
}) {
const response = await axios.post(
return await axios.post(
env.AUTHORIZATION_SERVER_TOKEN_CREATION_URL,
new URLSearchParams({
client_id: clientId,
Expand All @@ -265,8 +265,7 @@ export async function requestVoucher({
headers: {
"Content-Type": "application/x-www-form-urlencoded",
},
validateStatus: () => true,
}
);

return response.data;
}