Convertit les parcours utilisateur (goal-driven, "en tant que X je peux Y") en scénarios Gherkin, en réutilisant l'infra Cucumber déjà validée par le smoke test (PR #24). Retire le smoke test jetable maintenant superflu. 8 fichiers .feature ajoutés, chacun avec son fichier de step definitions au même basename (convention de découverte du préprocesseur — voir login-smoke.ts) : - auth.feature : inscription (succès, erreur validation, email déjà pris), connexion (succès, identifiants invalides), déconnexion - onboarding.feature : les 3 scénarios déjà couverts (wizard complet, étapes sautées, rejoindre un foyer pendant l'onboarding) — dépend de household-settings.ts et preferences.ts pour ses steps de création/rejoint de foyer et de sélection de régime/allergies - household-settings.feature : créer un foyer, rejoindre par code d'invitation, renommer (autosave), retirer un membre, supprimer le foyer, quitter le foyer - account.feature : suppression de compte (mauvais mot de passe, succès, annulation) - recipe-form.feature : les 4 scénarios déjà couverts inchangés (ajout d'ingrédient + création, régression crypto.randomUUID, exclusion/ réinclusion d'ingrédient, préchargement + édition d'une recette existante) - recipes.feature : bascule favori, suppression d'une recette - preferences.feature : autosave du régime, autosave des allergies - user-preferences.feature : changement de thème (autosave) En contrepartie, les anciens .cy.ts perdent uniquement les it() migrés vers Gherkin — les scénarios de layout/affichage pur (catalogue de recettes, tabs, recherche, panneau de détail, sidebar, planning grid, etc.) restent en Cypress classique, conformément au découpage "parcours utilisateur (Cucumber) vs layout (Cypress pur)" déjà en place pour les component tests. auth.cy.ts, onboarding.cy.ts et recipe-form.cy.ts sont supprimés : 100% de leur contenu a migré. Les commentaires "voir auth.cy.ts pour la justification" désormais obsolètes (fichier supprimé) sont remplacés par une explication autonome du mock cy.intercept. Vérifié statiquement : les 246 steps Gherkin des 8 .feature résolvent chacun vers exactement une définition (0 non résolu, 0 ambigu) et `pnpm exec biome check` est propre sur tout cypress/. Reste à confirmer en CI que les scénarios passent réellement (pas seulement qu'ils se résolvent).
63 lines
2.6 KiB
Gherkin
63 lines
2.6 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: 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"
|