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>
68 lines
2.2 KiB
TypeScript
68 lines
2.2 KiB
TypeScript
import { Given } from "@badeball/cypress-cucumber-preprocessor";
|
|
|
|
// Shared across auth.feature (signup) and onboarding.feature (wizard) — both
|
|
// need the diets/allergies reference lists mocked before reaching a step
|
|
// that reads them, in either their "has options" or "is empty" shape.
|
|
|
|
Given("the diets reference list has options", () => {
|
|
cy.intercept("GET", "**/reference/diets", {
|
|
statusCode: 200,
|
|
body: [
|
|
{ id: 1, key: "omnivore" },
|
|
{ id: 2, key: "vegetarian" },
|
|
],
|
|
});
|
|
});
|
|
|
|
Given("the diets reference list is empty", () => {
|
|
cy.intercept("GET", "**/reference/diets", { statusCode: 200, body: [] });
|
|
});
|
|
|
|
Given("the allergies reference list has options", () => {
|
|
cy.intercept("GET", "**/reference/allergies", {
|
|
statusCode: 200,
|
|
body: [
|
|
{ id: 1, key: "peanuts", kind: "ALLERGY" },
|
|
{ id: 2, key: "gluten", kind: "INTOLERANCE" },
|
|
],
|
|
});
|
|
});
|
|
|
|
Given("the allergies reference list is empty", () => {
|
|
cy.intercept("GET", "**/reference/allergies", { statusCode: 200, body: [] });
|
|
});
|
|
|
|
// Every onboarding scenario that reaches the household step also reaches
|
|
// `/onboarding/sources` right after (when a household got created/joined —
|
|
// see `OnboardingHouseholdPage`'s `goToNextStep`), which reads this before
|
|
// self-skipping to `/onboarding/allergenes` if it comes back empty.
|
|
Given("the sources reference list is empty", () => {
|
|
cy.intercept("GET", "**/reference/sources", { statusCode: 200, body: [] });
|
|
});
|
|
|
|
// Mirrors what's actually seeded (`reference-seed-data.ts`'s
|
|
// `registerAllRecipeSources`/`syncRecipeSources`) — one official API source
|
|
// with an icon, one unofficial scraper without one — so the sources step
|
|
// (onboarding and `/parametres/foyer` alike) has something real to show
|
|
// instead of self-skipping.
|
|
Given("the sources reference list has options", () => {
|
|
cy.intercept("GET", "**/reference/sources", {
|
|
statusCode: 200,
|
|
body: [
|
|
{
|
|
id: 1,
|
|
key: "theMealDb",
|
|
name: "TheMealDB",
|
|
official: true,
|
|
iconUrl: "https://www.themealdb.com/images/logo.svg",
|
|
},
|
|
{
|
|
id: 2,
|
|
key: "jsonLdRecipe",
|
|
name: "Import générique (JSON-LD)",
|
|
official: false,
|
|
iconUrl: null,
|
|
},
|
|
],
|
|
});
|
|
});
|