batchCooking/apps/web/cypress/e2e/household-settings.feature
Nicolas deec91c5a3 fix(recipes): synchronise les sources en base au démarrage de l'image de prod
Le conteneur de prod ne peuplait jamais la table Source : seed-runtime.ts
(l'entrée seed de l'image Docker, exécutée après `prisma migrate deploy`)
n'appelait que seedReferenceData(), jamais registerAllRecipeSources()/
syncRecipeSources() — contrairement à prisma/seed.ts (dev). server.ts
enregistre bien les adaptateurs dans son propre registre en mémoire, mais
c'est un processus distinct de celui qui lance seed-runtime.js dans la
chaîne CMD du Dockerfile ; sans ce sync, GET /reference/sources renvoyait
toujours [], et HouseholdSettingsPage masquait silencieusement toute la
section sources (sources.length === 0 → return null). C'est ce que
l'utilisateur a remarqué : impossible de paramétrer les sources visibles
du foyer en prod.

Vérifié en local : Source/HouseSource vidées, seed-runtime.js compilé
relancé exactement comme le ferait le conteneur (migrate deploy déjà
appliqué, puis ce script) → les deux sources (TheMealDB, JSON-LD) sont
bien resynchronisées.

Ajoute aussi la couverture Cypress du parcours "sources" qui manquait :
- onboarding.feature : nouveau scénario où le catalogue de sources n'est
  pas vide — l'étape /onboarding/sources s'affiche et se soumet, au lieu
  du seul scénario existant qui la voyait toujours skippée (catalogue
  vide).
- household-settings.feature : nouveaux scénarios pour la section sources
  de /parametres/foyer — affichage + sauvegarde (autosave incluse) quand
  des sources existent, et disparition complète de la section quand le
  catalogue est vide.
- Nouvelles steps partagées (reference-data.steps.ts pour le catalogue,
  household-mutations.steps.ts pour la sélection par foyer).

Non exécutés localement : Chromium/Electron headless plante au lancement
du process GPU dans cet environnement (limitation documentée du README,
reproductible sur main, sans lien avec ce changement) — vérifiés par
relecture attentive contre le code source réel (libellés de traduction,
routes, formes de requête/réponse) et en suivant le même gabarit que les
scénarios existants déjà verts en CI.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-20 13:48:29 +02:00

90 lines
3.7 KiB
Gherkin

Feature: Household settings
As a signed-in user
I want to create, join, manage, or leave a household
So that I can share a batch-cooking plan with the people I cook with
Scenario: Creates a household
Given I am signed in as "Alice" "Martin"
And creating a household will succeed
When I visit "/parametres/foyer"
And I fill in the "houseName" field with "Chez Alice"
And I click the button "Créer"
Then the household creation request should have been made with name "Chez Alice"
And I should see "ABCD2345"
Scenario: Joins a household by invite code
Given I am signed in as "Alice" "Martin"
And joining a household will succeed
When I visit "/parametres/foyer"
And I fill in the "inviteCode" field with "abcd2345"
And I click the button "Rejoindre"
Then the household join request should have been made with invite code "ABCD2345"
And I should see "Bob Dupont"
Scenario: Autosaves the household name
Given I am signed in as "Alice" "Martin"
And my household id is 1
And the household request returns the two-member household
And renaming the household will succeed
When I visit "/parametres/foyer"
And I clear the "houseName" field
And I fill in the "houseName" field with "Chez les Martin"
Then the household rename request should have been made with name "Chez les Martin"
And I should see "Enregistré "
Scenario: Removes a member
Given I am signed in as "Alice" "Martin"
And my household id is 1
And the household request returns the two-member household
And removing Bob from the household will succeed
When I visit "/parametres/foyer"
And I click "Retirer" for the member "Bob Dupont"
Then the member removal request should have been made
And I should not see "Bob Dupont"
Scenario: Deletes the household after confirming
Given I am signed in as "Alice" "Martin"
And my household id is 1
And the household request returns the two-member household
And deleting the household will succeed
When I visit "/parametres/foyer"
And I click the button "Supprimer le foyer"
And I click the button "Confirmer la suppression"
Then the household deletion request should have been made
And I should see "Créer un foyer"
Scenario: Shows and saves the household's enabled recipe sources
Given I am signed in as "Alice" "Martin"
And my household id is 1
And the household request returns the two-member household
And the sources reference list has options
And the household's enabled sources are empty
And saving the source selection will succeed
When I visit "/parametres/foyer"
Then I should see the section "Sources disponibles"
And I should see "TheMealDB"
And I should see "Officielle"
And I should see "Import générique (JSON-LD)"
And I should see "Non officielle"
When I check the checkbox "TheMealDB"
Then the source selection update request should have been made with source id 1
And I should see "Enregistré "
Scenario: Hides the sources section entirely when no source is implemented yet
Given I am signed in as "Alice" "Martin"
And my household id is 1
And the household request returns the two-member household
And the sources reference list is empty
And the household's enabled sources are empty
When I visit "/parametres/foyer"
Then I should not see "Sources de recettes"
Scenario: Leaves the household
Given I am signed in as "Bob" "Dupont"
And my user id is 2
And my household id is 1
And the household request returns the two-member household
And leaving the household will succeed
When I visit "/parametres/foyer"
And I click the button "Quitter le foyer"
Then the household leave request should have been made