Les tests e2e (apps/web/cypress/e2e/) étaient de simples specs Cypress (.cy.ts), sans lien avec Cucumber alors qu'apps/api utilise déjà Gherkin pour ses propres tests BDD. Intègre @badeball/cypress-cucumber-preprocessor pour écrire les scénarios utilisateurs en Gherkin des deux côtés, même vocabulaire. - cypress.config.ts : specPattern sur *.feature, wiring du préprocesseur (esbuild bundler + plugin cucumber) - Les 11 fichiers .cy.ts sont remplacés par des paires .feature/.steps.ts (co-localisées, même nom) — conversion complète, comportement équivalent (mêmes intercepts, mêmes assertions) - cypress/support/step_definitions/common.steps.ts : steps partagés entre features (connexion, navigation, assertions génériques de texte/URL/champ) — globaux à toute la suite, réutilisables tels quels - cypress/support/profile.ts : profil du compte "connecté" courant, assemblé au fil de plusieurs Given avant le premier visit/When - README : nouvelle section "Cucumber (apps/web)" (miroir de la section existante pour apps/api), mise à jour des références aux anciens noms de fichiers .cy.ts (déjà obsolètes avant ce changement) Vérification : impossible d'exécuter Cypress dans cet environnement (crash Electron/GPU au lancement, limitation déjà documentée dans le README — reproductible sur main, indépendante de ce changement). À la place : - les 447 steps Gherkin des 11 .feature ont été vérifiés programmatiquement contre les 165 patterns de step enregistrés : 0 non résolu, 0 ambigu - les 11 .feature parsent correctement avec le parser Gherkin officiel (57 scénarios au total) - tous les .steps.ts passent `biome check` (syntaxe + style) sans erreur - CYPRESS_INSTALL_BINARY déjà géré (voir PR précédente) — le binaire est bien présent localement (`cypress verify` OK), donc le blocage est spécifiquement le sandbox GPU de cet environnement, pas l'installation La vraie exécution reste à vérifier via le job `e2e` de la CI GitHub Actions sur cette PR — c'est le chemin déjà documenté dans le README pour cet environnement précis.
71 lines
2.9 KiB
Gherkin
71 lines
2.9 KiB
Gherkin
Feature: Signup and login
|
|
As a visitor
|
|
I want to create a profile or log into an existing one
|
|
So that I can access my household's batch-cooking planning
|
|
|
|
Background:
|
|
Given I am not signed in
|
|
|
|
Scenario: Signing up creates a profile and starts the onboarding wizard
|
|
Given the signup request will succeed
|
|
And the diets reference list is empty
|
|
When I sign up with:
|
|
| firstName | Alice |
|
|
| lastName | Martin |
|
|
| email | alice@example.com |
|
|
| password | correct-horse-battery-staple |
|
|
Then the signup request should have been made
|
|
And the URL should include "/onboarding/regime"
|
|
And I should see "Étape 1 sur 3"
|
|
|
|
Scenario: Signing up shows a client-side validation error without calling the API
|
|
Given the signup request is being watched
|
|
When I sign up with:
|
|
| firstName | A |
|
|
| lastName | B |
|
|
| email | a@example.com |
|
|
| password | short |
|
|
Then I should see "8 caractères minimum"
|
|
And the signup request should not have been made
|
|
|
|
Scenario: Signing up shows the API's error when the email is already taken
|
|
Given the signup request will fail because the email is already used
|
|
When I sign up with:
|
|
| firstName | Alice |
|
|
| lastName | Martin |
|
|
| email | alice@example.com |
|
|
| password | correct-horse-battery-staple |
|
|
Then the signup request should have been made
|
|
And I should see "Cet email est déjà utilisé"
|
|
|
|
Scenario: Logging in lands on the home page
|
|
Given the login request will succeed
|
|
And the planning request returns nothing
|
|
When I log in with email "alice@example.com" and password "correct-horse-battery-staple"
|
|
Then the login request should have been made
|
|
And I should see "Bonjour Alice"
|
|
|
|
Scenario: Logging in shows an error on invalid credentials
|
|
Given the login request will fail because the credentials are invalid
|
|
When I log in with email "alice@example.com" and password "wrong-password"
|
|
Then the login request should have been made
|
|
And I should see "Email ou mot de passe incorrect"
|
|
|
|
Scenario: An already signed-in visitor is redirected away from the login page
|
|
Given I am signed in as "Alice" "Martin"
|
|
And my household id is 1
|
|
And the planning request returns nothing
|
|
When I visit "/login"
|
|
Then the URL should not include "/login"
|
|
And I should see "Bonjour Alice"
|
|
|
|
Scenario: Logging out returns to the login page
|
|
Given I am signed in as "Alice" "Martin"
|
|
And my household id is 1
|
|
And the planning request returns nothing
|
|
And the logout request will succeed
|
|
When I visit "/"
|
|
And I open the account menu
|
|
And I click the button "Se déconnecter"
|
|
Then the logout request should have been made
|
|
And the URL should include "/login"
|