Skip to content

Commit 6fd8de7

Browse files
committed
fix(e2e): add cleanup after login + enable CI screenshots/videos
- Clean declarations after login (inside it() block) so retry attempts start from clean state — Cypress doesn't run afterEach between retries - Enable video recording and screenshots in CI for debugging failures - Upload Cypress artifacts (screenshots/videos) on failure - Log cleanup endpoint response for debugging
1 parent ad3ad74 commit 6fd8de7

15 files changed

Lines changed: 52 additions & 15 deletions

.github/workflows/e2e.yaml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,20 @@ jobs:
4242
run: |
4343
pnpm test:e2e:app
4444
env:
45+
CI: "true"
4546
working-directory: ./packages/app
4647
config: "pageLoadTimeout=100000,baseUrl=${{ env.SITE_URL }}"
4748
TEST_BASEURL: ${{ env.SITE_URL }}
4849
E2E_USERNAME: ${{ github.ref == 'refs/heads/master' && secrets.E2E_USERNAME || 'test@fia1.fr' }}
4950
E2E_PASSWORD: ${{ github.ref == 'refs/heads/master' && secrets.E2E_PASSWORD || 'test' }}
5051
KEYCLOAK_URL: ${{ env.KEYCLOAK_URL }}
52+
53+
- name: Upload Cypress artifacts
54+
if: failure()
55+
uses: actions/upload-artifact@v4
56+
with:
57+
name: cypress-artifacts
58+
path: |
59+
packages/app/cypress/screenshots
60+
packages/app/cypress/videos
61+
retention-days: 7

packages/app/cypress.config.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ import { defineConfig } from "cypress";
44
export default defineConfig({
55
defaultCommandTimeout: 30000,
66
experimentalStudio: true,
7-
video: false,
8-
screenshotOnRunFailure: false,
7+
video: !!process.env.CI,
8+
screenshotOnRunFailure: true,
99
retries: {
1010
runMode: 2, // Réessayer 2 fois en mode CI
1111
openMode: 0, // Pas de réessai en mode interactif

packages/app/cypress/e2e/declaration_1000_employees_firm.cy.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@ describe("Declaration", () => {
66
cy.clearCookies();
77
});
88
afterEach(() => {
9-
cy.request({ method: "POST", url: "/apiv2/clean-test-user/declaration", failOnStatusCode: false });
9+
cy.request({ method: "POST", url: "/apiv2/clean-test-user/declaration", failOnStatusCode: false }).then((response) => { cy.log(`Clean endpoint: status=${response.status}, body=${JSON.stringify(response.body)}`); });
1010
});
1111

1212
it("Doit compléter le parcours du simulateur jusqu'à la page de récapitulatif", () => {
1313
cy.loginWithKeycloak();
14+
// Clean any leftover declarations (important for retry attempts)
15+
cy.request({ method: "POST", url: "/apiv2/clean-test-user/declaration", failOnStatusCode: false });
1416

1517
// Visiter la page de démarrage du simulateur
1618
cy.visit("/");

packages/app/cypress/e2e/declaration_1000_employees_firm_2.cy.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@ describe("Declaration", () => {
66
cy.clearCookies();
77
});
88
afterEach(() => {
9-
cy.request({ method: "POST", url: "/apiv2/clean-test-user/declaration", failOnStatusCode: false });
9+
cy.request({ method: "POST", url: "/apiv2/clean-test-user/declaration", failOnStatusCode: false }).then((response) => { cy.log(`Clean endpoint: status=${response.status}, body=${JSON.stringify(response.body)}`); });
1010
});
1111

1212
it("Doit compléter le parcours du simulateur jusqu'à la page de récapitulatif", () => {
1313
cy.loginWithKeycloak();
14+
// Clean any leftover declarations (important for retry attempts)
15+
cy.request({ method: "POST", url: "/apiv2/clean-test-user/declaration", failOnStatusCode: false });
1416

1517
// Visiter la page de démarrage du simulateur
1618
cy.visit("/");

packages/app/cypress/e2e/declaration_251-999_employees_firm_1.cy.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@ describe("Declaration", () => {
66
cy.clearCookies();
77
});
88
afterEach(() => {
9-
cy.request({ method: "POST", url: "/apiv2/clean-test-user/declaration", failOnStatusCode: false });
9+
cy.request({ method: "POST", url: "/apiv2/clean-test-user/declaration", failOnStatusCode: false }).then((response) => { cy.log(`Clean endpoint: status=${response.status}, body=${JSON.stringify(response.body)}`); });
1010
});
1111

1212
it("Doit compléter le parcours du simulateur jusqu'à la page de récapitulatif", () => {
1313
cy.loginWithKeycloak();
14+
// Clean any leftover declarations (important for retry attempts)
15+
cy.request({ method: "POST", url: "/apiv2/clean-test-user/declaration", failOnStatusCode: false });
1416

1517
// Visiter la page de démarrage du simulateur
1618
cy.visit("/");

packages/app/cypress/e2e/declaration_251-999_employees_firm_2.cy.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@ describe("Declaration", () => {
66
cy.clearCookies();
77
});
88
afterEach(() => {
9-
cy.request({ method: "POST", url: "/apiv2/clean-test-user/declaration", failOnStatusCode: false });
9+
cy.request({ method: "POST", url: "/apiv2/clean-test-user/declaration", failOnStatusCode: false }).then((response) => { cy.log(`Clean endpoint: status=${response.status}, body=${JSON.stringify(response.body)}`); });
1010
});
1111

1212
it("Doit compléter le parcours du simulateur jusqu'à la page de récapitulatif", () => {
1313
cy.loginWithKeycloak();
14+
// Clean any leftover declarations (important for retry attempts)
15+
cy.request({ method: "POST", url: "/apiv2/clean-test-user/declaration", failOnStatusCode: false });
1416

1517
// Visiter la page de démarrage du simulateur
1618
cy.visit("/");

packages/app/cypress/e2e/declaration_50-250_employees_firm_1.cy.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@ describe("Declaration", () => {
66
cy.clearCookies();
77
});
88
afterEach(() => {
9-
cy.request({ method: "POST", url: "/apiv2/clean-test-user/declaration", failOnStatusCode: false });
9+
cy.request({ method: "POST", url: "/apiv2/clean-test-user/declaration", failOnStatusCode: false }).then((response) => { cy.log(`Clean endpoint: status=${response.status}, body=${JSON.stringify(response.body)}`); });
1010
});
1111

1212
it("Doit compléter le parcours du simulateur jusqu'à la page de récapitulatif", () => {
1313
cy.loginWithKeycloak();
14+
// Clean any leftover declarations (important for retry attempts)
15+
cy.request({ method: "POST", url: "/apiv2/clean-test-user/declaration", failOnStatusCode: false });
1416

1517
// Visiter la page de démarrage du simulateur
1618
cy.visit("/");

packages/app/cypress/e2e/declaration_50-250_employees_firm_2.cy.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@ describe("Declaration", () => {
66
cy.clearCookies();
77
});
88
afterEach(() => {
9-
cy.request({ method: "POST", url: "/apiv2/clean-test-user/declaration", failOnStatusCode: false });
9+
cy.request({ method: "POST", url: "/apiv2/clean-test-user/declaration", failOnStatusCode: false }).then((response) => { cy.log(`Clean endpoint: status=${response.status}, body=${JSON.stringify(response.body)}`); });
1010
});
1111

1212
it("Doit compléter le parcours du simulateur jusqu'à la page de récapitulatif", () => {
1313
cy.loginWithKeycloak();
14+
// Clean any leftover declarations (important for retry attempts)
15+
cy.request({ method: "POST", url: "/apiv2/clean-test-user/declaration", failOnStatusCode: false });
1416

1517
// Visiter la page de démarrage du simulateur
1618
cy.visit("/");

packages/app/cypress/e2e/declaration_50-250_employees_firm_3.cy.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@ describe("Declaration", () => {
66
cy.clearCookies();
77
});
88
afterEach(() => {
9-
cy.request({ method: "POST", url: "/apiv2/clean-test-user/declaration", failOnStatusCode: false });
9+
cy.request({ method: "POST", url: "/apiv2/clean-test-user/declaration", failOnStatusCode: false }).then((response) => { cy.log(`Clean endpoint: status=${response.status}, body=${JSON.stringify(response.body)}`); });
1010
});
1111

1212
it("Doit compléter le parcours du simulateur jusqu'à la page de récapitulatif", () => {
1313
cy.loginWithKeycloak();
14+
// Clean any leftover declarations (important for retry attempts)
15+
cy.request({ method: "POST", url: "/apiv2/clean-test-user/declaration", failOnStatusCode: false });
1416

1517
// Visiter la page de démarrage du simulateur
1618
cy.visit("/");

packages/app/cypress/e2e/declaration_50-250_employees_firm_4.cy.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@ describe("Declaration", () => {
66
cy.clearCookies();
77
});
88
afterEach(() => {
9-
cy.request({ method: "POST", url: "/apiv2/clean-test-user/declaration", failOnStatusCode: false });
9+
cy.request({ method: "POST", url: "/apiv2/clean-test-user/declaration", failOnStatusCode: false }).then((response) => { cy.log(`Clean endpoint: status=${response.status}, body=${JSON.stringify(response.body)}`); });
1010
});
1111

1212
it("Doit compléter le parcours du simulateur jusqu'à la page de récapitulatif", () => {
1313
cy.loginWithKeycloak();
14+
// Clean any leftover declarations (important for retry attempts)
15+
cy.request({ method: "POST", url: "/apiv2/clean-test-user/declaration", failOnStatusCode: false });
1416

1517
// Visiter la page de démarrage du simulateur
1618
cy.visit("/");

0 commit comments

Comments
 (0)