From da2ce686602186c00372a79a3f0059badc7f27e2 Mon Sep 17 00:00:00 2001 From: Knacky Date: Tue, 26 May 2026 16:13:33 +0200 Subject: [PATCH] =?UTF-8?q?test(e2e):=20align=20assertions=20with=20i18n?= =?UTF-8?q?=20fix=20=E2=80=94=20French=E2=86=92English=20labels?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - us7: "Nouvelle simulation" → "New simulation" (3 assertions) - us4: "Nouvelle simulation" → "New simulation" (1 assertion) - us9: "Simulation pas encore en revue" → "Simulation not yet ready for review" (1 assertion) - us11: "Marquer en revue" → "Mark for review" (6 assertions), "Clôturer" → /^close$/i (7 assertions) - us12: "Supprimer" → /^delete$/i (4 assertions), "Supprimer la simulation" → "Delete simulation" (1 assertion) No other French strings found in e2e/tests/. Suite: 68/68 pass. Co-Authored-By: Claude Sonnet 4.6 --- e2e/tests/us11-workflow-transitions.spec.ts | 34 ++++++++++----------- e2e/tests/us12-simulation-delete.spec.ts | 10 +++--- e2e/tests/us4-engagements.spec.ts | 4 +-- e2e/tests/us7-simulation-create.spec.ts | 8 ++--- e2e/tests/us9-soc-restricted-edit.spec.ts | 2 +- 5 files changed, 29 insertions(+), 29 deletions(-) diff --git a/e2e/tests/us11-workflow-transitions.spec.ts b/e2e/tests/us11-workflow-transitions.spec.ts index b83ee29..95223a7 100644 --- a/e2e/tests/us11-workflow-transitions.spec.ts +++ b/e2e/tests/us11-workflow-transitions.spec.ts @@ -167,7 +167,7 @@ test.describe('US-11 — workflow transitions', () => { }) => { const rtClient = makeClient(redteamToken); - // pending → "Marquer en revue" visible for redteam; "Clôturer" hidden + // pending → "Mark for review" visible for redteam; "Close" hidden const simPending = await createSimulation( redteamToken, engagementId, @@ -175,34 +175,34 @@ test.describe('US-11 — workflow transitions', () => { ); await seedTokenInStorage(context, redteamToken); await page.goto(`/engagements/${engagementId}/simulations/${simPending.id}/edit`); - await expect(page.getByRole('button', { name: /marquer en revue/i })).toBeVisible(); - await expect(page.getByRole('button', { name: /clôturer/i })).toHaveCount(0); + await expect(page.getByRole('button', { name: /mark for review/i })).toBeVisible(); + await expect(page.getByRole('button', { name: /^close$/i })).toHaveCount(0); - // in_progress → "Marquer en revue" visible + // in_progress → "Mark for review" visible const simIP = await createSimulation(redteamToken, engagementId, 'AC-11.4 in_progress UI'); await rtClient.patch(`/simulations/${simIP.id}`, { name: 'trigger' }); await page.goto(`/engagements/${engagementId}/simulations/${simIP.id}/edit`); - await expect(page.getByRole('button', { name: /marquer en revue/i })).toBeVisible(); - await expect(page.getByRole('button', { name: /clôturer/i })).toHaveCount(0); + await expect(page.getByRole('button', { name: /mark for review/i })).toBeVisible(); + await expect(page.getByRole('button', { name: /^close$/i })).toHaveCount(0); - // review_required → "Clôturer" visible for redteam; "Marquer en revue" hidden + // review_required → "Close" visible for redteam; "Mark for review" hidden const simRR = await createSimulation(redteamToken, engagementId, 'AC-11.4 review UI'); await rtClient.post(`/simulations/${simRR.id}/transition`, { to: 'review_required' }); await page.goto(`/engagements/${engagementId}/simulations/${simRR.id}/edit`); - await expect(page.getByRole('button', { name: /clôturer/i })).toBeVisible(); - await expect(page.getByRole('button', { name: /marquer en revue/i })).toHaveCount(0); + await expect(page.getByRole('button', { name: /^close$/i })).toBeVisible(); + await expect(page.getByRole('button', { name: /mark for review/i })).toHaveCount(0); - // review_required → "Clôturer" also visible for SOC + // review_required → "Close" also visible for SOC await seedTokenInStorage(context, socToken); await page.goto(`/engagements/${engagementId}/simulations/${simRR.id}/edit`); - await expect(page.getByRole('button', { name: /clôturer/i })).toBeVisible(); + await expect(page.getByRole('button', { name: /^close$/i })).toBeVisible(); // done → both buttons hidden await rtClient.post(`/simulations/${simRR.id}/transition`, { to: 'done' }); await seedTokenInStorage(context, redteamToken); await page.goto(`/engagements/${engagementId}/simulations/${simRR.id}/edit`); - await expect(page.getByRole('button', { name: /marquer en revue/i })).toHaveCount(0); - await expect(page.getByRole('button', { name: /clôturer/i })).toHaveCount(0); + await expect(page.getByRole('button', { name: /mark for review/i })).toHaveCount(0); + await expect(page.getByRole('button', { name: /^close$/i })).toHaveCount(0); await deleteSimulation(redteamToken, simPending.id); await deleteSimulation(redteamToken, simIP.id); @@ -223,14 +223,14 @@ test.describe('US-11 — workflow transitions', () => { const badge = page.getByTestId('simulation-status-badge'); await expect(badge).toHaveAttribute('data-status', 'pending'); - // Click "Marquer en revue" - await page.getByRole('button', { name: /marquer en revue/i }).click(); + // Click "Mark for review" + await page.getByRole('button', { name: /mark for review/i }).click(); // Badge updates to review_required without page reload await expect(badge).toHaveAttribute('data-status', 'review_required', { timeout: 5_000 }); - // "Clôturer" now visible; click it - await page.getByRole('button', { name: /clôturer/i }).click(); + // "Close" now visible; click it + await page.getByRole('button', { name: /^close$/i }).click(); await expect(badge).toHaveAttribute('data-status', 'done', { timeout: 5_000 }); // Verify list is also updated: navigate to engagement detail and check badge there diff --git a/e2e/tests/us12-simulation-delete.spec.ts b/e2e/tests/us12-simulation-delete.spec.ts index 344d735..3fccceb 100644 --- a/e2e/tests/us12-simulation-delete.spec.ts +++ b/e2e/tests/us12-simulation-delete.spec.ts @@ -123,26 +123,26 @@ test.describe('US-12 — simulation delete', () => { await page.goto(`/engagements/${engagementId}/simulations/${sim.id}/edit`); // Delete button is visible for redteam - const deleteBtn = page.getByRole('button', { name: /supprimer/i }); + const deleteBtn = page.getByRole('button', { name: /^delete$/i }); await expect(deleteBtn).toBeVisible(); // SOC should NOT see delete button await seedTokenInStorage(context, socToken); await page.goto(`/engagements/${engagementId}/simulations/${sim.id}/edit`); - await expect(page.getByRole('button', { name: /supprimer/i })).toHaveCount(0); + await expect(page.getByRole('button', { name: /^delete$/i })).toHaveCount(0); // Back to redteam — click delete, confirm modal appears await seedTokenInStorage(context, redteamToken); await page.goto(`/engagements/${engagementId}/simulations/${sim.id}/edit`); - await page.getByRole('button', { name: /supprimer/i }).click(); + await page.getByRole('button', { name: /^delete$/i }).click(); // Confirmation dialog must appear const dialog = page.getByRole('dialog'); await expect(dialog).toBeVisible(); - await expect(dialog.getByText(/supprimer la simulation/i)).toBeVisible(); + await expect(dialog.getByText(/delete simulation/i)).toBeVisible(); // Confirm deletion - await dialog.getByRole('button', { name: /supprimer/i }).click(); + await dialog.getByRole('button', { name: /^delete$/i }).click(); // Should navigate back to engagement detail await page.waitForURL(new RegExp(`/engagements/${engagementId}$`)); diff --git a/e2e/tests/us4-engagements.spec.ts b/e2e/tests/us4-engagements.spec.ts index 26e45a7..f396d95 100644 --- a/e2e/tests/us4-engagements.spec.ts +++ b/e2e/tests/us4-engagements.spec.ts @@ -265,9 +265,9 @@ test.describe('US-4 — engagement CRUD', () => { await expect(page.getByRole('heading', { name: /AC-4.9 detail target/i })).toBeVisible(); // Sprint 2 replaced the placeholder with the real SimulationList — covered by AC-7.5. await expect(page.getByRole('heading', { name: /simulations/i })).toBeVisible(); - // admin/redteam see the "Nouvelle simulation" button + // admin/redteam see the "New simulation" button await expect( - page.getByRole('link', { name: /nouvelle simulation/i }), + page.getByRole('link', { name: /new simulation/i }), ).toBeVisible(); }); }); diff --git a/e2e/tests/us7-simulation-create.spec.ts b/e2e/tests/us7-simulation-create.spec.ts index e174151..e5b1cf9 100644 --- a/e2e/tests/us7-simulation-create.spec.ts +++ b/e2e/tests/us7-simulation-create.spec.ts @@ -156,15 +156,15 @@ test.describe('US-7 — simulation create', () => { // The created simulation row is visible await expect(page.getByRole('row', { name: /Visible sim/i })).toBeVisible(); - // "Nouvelle simulation" button visible for redteam + // "New simulation" button visible for redteam await expect( - page.getByRole('link', { name: /nouvelle simulation/i }), + page.getByRole('link', { name: /new simulation/i }), ).toBeVisible(); - // SOC should NOT see "Nouvelle simulation" button + // SOC should NOT see "New simulation" button await seedTokenInStorage(context, socToken); await page.goto(`/engagements/${engagementId}`); - await expect(page.getByRole('link', { name: /nouvelle simulation/i })).toHaveCount(0); + await expect(page.getByRole('link', { name: /new simulation/i })).toHaveCount(0); await deleteSimulation(redteamToken, sim.id); }); diff --git a/e2e/tests/us9-soc-restricted-edit.spec.ts b/e2e/tests/us9-soc-restricted-edit.spec.ts index d8459c7..4b89044 100644 --- a/e2e/tests/us9-soc-restricted-edit.spec.ts +++ b/e2e/tests/us9-soc-restricted-edit.spec.ts @@ -178,7 +178,7 @@ test.describe('US-9 — SOC restricted edit', () => { // Banner must be visible await expect(page.getByTestId('soc-blocked-banner')).toBeVisible(); await expect( - page.getByText(/simulation pas encore en revue/i), + page.getByText(/simulation not yet ready for review/i), ).toBeVisible(); // SOC fields are disabled