Skip to content

Commit aeb2233

Browse files
committed
test(e2e): add raphael alpha test
1 parent af0cbea commit aeb2233

File tree

12 files changed

+143
-69
lines changed

12 files changed

+143
-69
lines changed

e2e/cypress/support/step_definitions/uvv.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,12 @@ Before(() => {
3535
});
3636

3737
// Context management
38+
3839
Given("je vais à l'intérieur du dialogue nommé {string}", (text: string) => {
3940
get_within_context = () => cy.findAllByLabelText(text);
4041
});
4142

42-
Given("je vais à l'intérieur du tableau nommé {string}", (title: string) => {
43+
Given("je vais à l'intérieur de l'élément nommé {string}", (title: string) => {
4344
cy.contains(title)
4445
.invoke("attr", "id")
4546
.then((id) => {
@@ -109,7 +110,7 @@ When("je retire le focus", () => {
109110
// Assertions
110111
Then("je vois {string}", (text: string) => {
111112
get_within_context().within(() => {
112-
cy.contains(text, { timeout: 8000 }).should("be.visible");
113+
cy.contains(text, { timeout: 8_000 }).should("be.visible");
113114
});
114115
});
115116

e2e/features/moderations/manage_external_domain.feature

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@ Fonctionnalité: Gérer un domaine externe lors de la modération
1414
Et je clique sur "🌐 1 domaine connu dans l’organisation"
1515

1616
Scénario: Domaine externe
17-
Quand je vais à l'intérieur du tableau nommé "🌐 1 domaine connu dans l’organisation"
17+
Quand je vais à l'intérieur de l'élément nommé "🌐 1 domaine connu dans l’organisation"
1818
Alors je vois "yopmail.com"
1919
Et je réinitialise le contexte
2020
Quand je clique sur "Menu"
2121
Et je clique sur le bouton "❎ Domaine externe"
22-
Quand je vais à l'intérieur du tableau nommé "🌐 1 domaine connu dans l’organisation"
22+
Quand je vais à l'intérieur de l'élément nommé "🌐 1 domaine connu dans l’organisation"
2323
Alors je vois "❎"

e2e/features/moderations/manage_internal_domain.feature

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ Fonctionnalité: Gérer un domaine interne lors de la modération
2323
Et je clique sur "✅ Domaine autorisé"
2424
Et je réinitialise le contexte
2525
Alors je dois voir un tableau nommé "🌐 1 domaine connu dans l’organisation" et contenant
26-
| Domain | Status |
27-
| yopmail.com | ✅ |
26+
| Domain | Status | Type |
27+
| yopmail.com | ✅ | verified |
2828

2929
Quand je vais à l'intérieur de la rangée nommée "Domaine yopmail.com (verified)"
3030
Quand je clique sur "Menu"
@@ -39,5 +39,5 @@ Fonctionnalité: Gérer un domaine interne lors de la modération
3939
Et je tape "poymail.com{enter}"
4040

4141
Alors je dois voir un tableau nommé "🌐 1 domaine connu dans l’organisation" et contenant
42-
| Domain | Status |
43-
| poymail.com| ✅ |
42+
| Domain | Status | Type |
43+
| poymail.com | ✅ | verified |

e2e/features/users/jean_bon.feature

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,17 @@ Fonctionnalité: Page utilisateur with moderations
66
Quand je navigue sur la page
77
Et je vois "Bonjour Hyyypertool !"
88
Et je clique sur le bouton "ProConnect"
9-
# Et je me connecte en tant que user@yopmail.com sur dev-agentconnect.fr
10-
11-
Scénario:
12-
# Scénario: Fiche de Raphael
139
Quand je clique sur "Utilisateurs"
14-
Alors je suis redirigé sur "/users"
10+
1511
Et je dois voir le titre de page "Liste des utilisateurs"
1612
Et je vois "Liste des utilisateurs"
1713
Quand je vais à l'intérieur de la rangée nommée "Utilisateur Jean Bon (jeanbon@yopmail.com)"
1814
Et je clique sur "➡️"
1915
Et je réinitialise le contexte
16+
17+
Et je dois voir le titre de page "Utilisateur Jean Bon (jeanbon@yopmail.com)"
18+
19+
Scénario:
2020
Alors je vois "👨‍💻 A propos de l'utilisateur"
2121
Et je vois "« Jean Bon »"
2222
Et je vois "email jeanbon@yopmail.com"
@@ -27,7 +27,9 @@ Fonctionnalité: Page utilisateur with moderations
2727
Et je vois "Dernière modification22/06/2023 14:34:34"
2828
Et je vois "Email vérifié envoyé le22/06/2023 14:34:34"
2929

30-
# Scénario: Organisations de Raphael
31-
Alors je vois "Jean est enregistré(e) dans les modérations suivantes :"
32-
Quand je vais à l'intérieur de la rangée nommée "Modération a traiter (ID 1)"
33-
Et je réinitialise le contexte
30+
Alors je dois voir un tableau nommé "Liste des modérations de Jean" et contenant
31+
| Type |
32+
| 🕵️A traiter |
33+
34+
Et je vois "L'utilisateur n'a pas de MFA configurée."
35+
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
#language: fr
2+
Fonctionnalité: Page utilisateur avec MFA
3+
4+
Contexte:
5+
Soit une base de données nourrie au grain
6+
Quand je navigue sur la page
7+
Et je vois "Bonjour Hyyypertool !"
8+
Et je clique sur le bouton "ProConnect"
9+
Quand je clique sur "Utilisateurs"
10+
11+
Et je dois voir le titre de page "Liste des utilisateurs"
12+
Et je vois "Liste des utilisateurs"
13+
Quand je vais à l'intérieur de la rangée nommée "Utilisateur Raphael Dubigny (rdubigny@alpha.gouv.fr)"
14+
Et je clique sur "➡️"
15+
Et je réinitialise le contexte
16+
17+
Et je dois voir le titre de page "Utilisateur Raphael Dubigny (rdubigny@alpha.gouv.fr)"
18+
19+
Scénario: La fiche de Raphael Alpha
20+
Alors je vois "👨‍💻 A propos de l'utilisateur"
21+
Et je vois "« Raphael Dubigny »"
22+
Et je vois "email rdubigny@alpha.gouv.fr"
23+
Et je vois "prénomRaphael"
24+
Et je vois "nomDubigny"
25+
Et je vois "téléphone0123456789"
26+
Et je vois "Création13/07/2018 15:35:15"
27+
Et je vois "Dernière modification22/06/2023 14:34:34"
28+
Et je vois "Email vérifié envoyé le22/06/2023 14:34:34"
29+
30+
Alors je dois voir un tableau nommé "Liste des modérations de Raphael" et contenant
31+
| Type |
32+
| 🔓Non vérifié |
33+
Et je réinitialise le contexte
34+
35+
Sachant que je vais à l'intérieur de l'élément nommé "🔓 MFA"
36+
Alors je vois "TOTP"
37+
Alors je vois "Passkey - 1Password"
38+
Alors je vois "Passkey - NordPass"
39+
40+
Sachant que je vais à l'intérieur de l'élément nommé "TOTP"
41+
Alors je vois "TOTP enrôlé le : 22/06/2023 14:34:34"
42+
Alors je vois "Force la 2FA sur tous les sites : ✅"
43+
Et je réinitialise le contexte
44+
45+
Sachant que je vais à l'intérieur de l'élément nommé "Passkey - 1Password"
46+
Alors je vois "Création : 10/06/2024 12:00:00"
47+
Alors je vois "Dernière utilisation : 15/06/2024 14:00:00"
48+
Alors je vois "Nombre d'utilisation : 5"
49+
Et je réinitialise le contexte
50+
51+
Sachant que je vais à l'intérieur de l'élément nommé "Passkey - NordPass"
52+
Alors je vois "Création : 10/06/2024 12:00:00"
53+
Alors je vois "Dernière utilisation : 15/06/2024 14:00:00"
54+
Alors je vois "Nombre d'utilisation : 87"
55+
Et je réinitialise le contexte
56+
57+
58+
59+

e2e/features/users/raphael.feature renamed to e2e/features/users/raphael_beta.feature

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,17 @@ Fonctionnalité: Page utilisateur
66
Quand je navigue sur la page
77
Et je vois "Bonjour Hyyypertool !"
88
Et je clique sur le bouton "ProConnect"
9-
# Et je me connecte en tant que user@yopmail.com sur dev-agentconnect.fr
10-
11-
Scénario:
12-
# Scénario: Fiche de Raphael
139
Quand je clique sur "Utilisateurs"
14-
Alors je suis redirigé sur "/users"
10+
1511
Et je dois voir le titre de page "Liste des utilisateurs"
1612
Et je vois "Liste des utilisateurs"
1713
Quand je vais à l'intérieur de la rangée nommée "Utilisateur Raphael Dubigny (rdubigny@beta.gouv.fr)"
1814
Et je clique sur "➡️"
1915
Et je réinitialise le contexte
16+
17+
Et je dois voir le titre de page "Utilisateur Raphael Dubigny (rdubigny@beta.gouv.fr)"
18+
19+
Scénario: La fiche de Raphael Beta
2020
Alors je vois "👨‍💻 A propos de l'utilisateur"
2121
Et je vois "« Raphael Dubigny »"
2222
Et je vois "email rdubigny@beta.gouv.fr"
@@ -27,7 +27,6 @@ Fonctionnalité: Page utilisateur
2727
Et je vois "Dernière modification22/06/2023 14:34:34"
2828
Et je vois "Email vérifié envoyé le22/06/2023 14:34:34"
2929

30-
# Scénario: Organisations de Raphael
31-
Alors je vois "Raphael est enregistré(e) dans les organisations suivantes "
32-
Et je vois "DINUM"
33-
Et je vois "13002526500013"
30+
Alors je dois voir un tableau nommé "Liste des organisations de Raphael" et contenant
31+
| Libellé | Siret |
32+
| DINUM | 13002526500013 |

sources/users/api/src/:id/moderations/Table.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,12 @@ import { usePageRequestContext, type ModerationList } from "./context";
1212

1313
export function Table() {
1414
const {
15-
var: { moderations },
15+
var: { describedby, moderations },
1616
} = usePageRequestContext();
17+
1718
return (
1819
<div class="fr-table *:table!">
19-
<table>
20+
<table aria-describedby={describedby}>
2021
<thead>
2122
<tr>
2223
<th>ID</th>
Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,36 @@
11
//
22

3-
import type { Entity_Schema, Pagination_Schema } from "@~/app.core/schema";
4-
import type { App_Context } from "@~/app.middleware/context";
3+
import type { DescribedBy } from "@~/app.core/schema";
54
import type { IdentiteProconnect_PgDatabase } from "@~/identite-proconnect.database";
65
import {
76
GetModerationsByUserId,
87
type GetModerationsByUserIdHandler,
98
} from "@~/moderations.repository/GetModerationsByUserId";
109
import type { Env } from "hono";
1110
import { useRequestContext } from "hono/jsx-renderer";
12-
import type { z } from "zod";
1311

1412
//
1513

1614
export async function loadModerationsPageVariables(
1715
pg: IdentiteProconnect_PgDatabase,
18-
{ user_id }: { user_id: number },
16+
{ describedby, user_id }: { user_id: number } & DescribedBy,
1917
) {
2018
const get_moderations_by_user_id = GetModerationsByUserId({ pg });
2119
const moderations = await get_moderations_by_user_id(user_id);
2220

2321
return {
22+
describedby,
2423
moderations,
2524
};
2625
}
2726

2827
//
2928

3029
export type ModerationList = Awaited<ReturnType<GetModerationsByUserIdHandler>>;
31-
export interface ContextVariablesType extends Env {
30+
interface ContextVariablesType extends Env {
3231
Variables: Awaited<ReturnType<typeof loadModerationsPageVariables>>;
3332
}
34-
export type ContextType = App_Context & ContextVariablesType;
3533

3634
//
3735

38-
type PageInputType = {
39-
out: {
40-
param: z.input<typeof Entity_Schema>;
41-
query: z.input<typeof Pagination_Schema>;
42-
};
43-
};
44-
45-
export const usePageRequestContext = useRequestContext<
46-
ContextType,
47-
any,
48-
PageInputType
49-
>;
36+
export const usePageRequestContext = useRequestContext<ContextVariablesType>;

sources/users/api/src/:id/moderations/index.tsx

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,33 @@
11
//
22

33
import { zValidator } from "@hono/zod-validator";
4-
import { Entity_Schema } from "@~/app.core/schema";
4+
import { DescribedBy_Schema, Entity_Schema } from "@~/app.core/schema";
5+
import type { App_Context } from "@~/app.middleware/context";
56
import { set_variables } from "@~/app.middleware/context/set_variables";
67
import { Hono } from "hono";
78
import { jsxRenderer } from "hono/jsx-renderer";
8-
import { loadModerationsPageVariables, type ContextType } from "./context";
9+
import { loadModerationsPageVariables } from "./context";
910
import { Table } from "./Table";
1011

1112
//
1213

13-
export default new Hono<ContextType>().use("/", jsxRenderer()).get(
14+
export default new Hono<App_Context>().use("/", jsxRenderer()).get(
1415
"/",
1516
zValidator("param", Entity_Schema),
17+
zValidator("query", DescribedBy_Schema),
1618
async function set_variables_middleware(
1719
{ req, set, var: { identite_pg } },
1820
next,
1921
) {
2022
const { id: user_id } = req.valid("param");
21-
const variables = await loadModerationsPageVariables(identite_pg, {
22-
user_id,
23-
});
24-
set_variables(set, variables);
23+
const { describedby } = req.valid("query");
24+
set_variables(
25+
set,
26+
await loadModerationsPageVariables(identite_pg, {
27+
describedby,
28+
user_id,
29+
}),
30+
);
2531
return next();
2632
},
2733
async function GET({ render }) {

0 commit comments

Comments
 (0)