Consomme le socle backend de #42/#44 (`GET /reference/tours`, `GET/POST /profile/tours`). Deux tours : orientation générale (auto sur `/`) et correction des métadonnées de recette (auto à l'ouverture du premier popover de correction). - Dépendance `driver.js` (~5 ko, MIT, zéro dépendance). - `features/tour/tour-engine.ts` : wrapper vanilla autour de `driver.js` — gère ce que la lib ne fait pas seule : la navigation React Router entre étapes situées sur des routes différentes, et un `onFinish` unique (`"completed"` seulement si on atteint la fin, `"skipped"` pour la croix / Échap / clic sur l'overlay). - `features/tour/TourContext.tsx` : `TourProvider` (charge scénarios + progression, keyed sur `user?.id` comme `ThemeContext`) et `useTour()` (`startTour(key)` / `isTourCompleted(key)` / `tours` / `isReady`). `isReady` est **calculé au render** contre l'id utilisateur chargé — pas stocké — pour qu'un changement de `user` le repasse à `false` immédiatement, avant qu'un effet enfant (l'auto-déclenchement) ne tourne sur des données de complétion périmées. - `main.tsx` : `<TourProvider>` sous `ThemeProvider`. - Attributs `data-tour-*` : liens de nav (`AppLayout`), grille / bouton `+` du 1er créneau / bouton Cuisiner (`PlanningPage`), page liste de courses (`ShoppingListPage`), description d'étape + section technique du popover (`StepDescription` / `TechStepCorrectionPopover`). - Déclenchement auto : tour `general` sur `/` (`PlanningPage`, ref-gardé), tour `techStepMetadata` à `activeCorrection` non-null (`StepDescription`). - Section « Revoir un tutoriel » dans `/parametres/preferences-utilisateur` — un `map` sur `tours`, un bouton « Revoir » par scénario. - `tour.scss` re-skinne le popover `driver.js` sur les tokens du thème. - i18n `tour.*` (chrome uniquement : boutons du popover, section « Revoir » ; le contenu des étapes vient de la base). Tests Cypress (`tour.feature`, 5 scénarios) : auto-démarrage + élément surligné pour un nouveau venu ; « Terminé » → complétion enregistrée `skipped:false` ; croix → `skipped:true` ; un tour déjà vu ne se relance pas ; « Revoir » le relance depuis les paramètres. Vérifié 5/5 en local. `pnpm build` + `pnpm lint` verts. Refs #42 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
39 lines
1.5 KiB
Gherkin
39 lines
1.5 KiB
Gherkin
Feature: Guided tour
|
|
|
|
A signed-in user who has never seen the "general" tour gets it on their
|
|
first arrival at "/". Finishing it (or dismissing it) records it as seen
|
|
so it never auto-starts again — but it can always be replayed from the
|
|
settings.
|
|
|
|
Background:
|
|
Given I am signed in as "Alice" "Martin"
|
|
And the planning request returns nothing
|
|
|
|
Scenario: The general tour auto-starts for a first-time visitor
|
|
Given the guided tour has not been seen yet
|
|
When I visit "/"
|
|
Then the tour popover shows "Votre semaine, ici"
|
|
And the sidebar "Planning" link is highlighted by the tour
|
|
|
|
Scenario: Finishing the tour records it as completed
|
|
Given the guided tour has not been seen yet, with a single step
|
|
When I visit "/"
|
|
And I click the tour's next button
|
|
Then the tour completion was recorded as finished
|
|
|
|
Scenario: Dismissing the tour records it as skipped
|
|
Given the guided tour has not been seen yet
|
|
When I visit "/"
|
|
And I dismiss the tour
|
|
Then the tour completion was recorded as skipped
|
|
|
|
Scenario: A tour already seen does not auto-start again
|
|
Given the guided tour has already been seen
|
|
When I visit "/"
|
|
Then no tour popover is shown
|
|
|
|
Scenario: A seen tour can be replayed from the settings
|
|
Given the guided tour has already been seen
|
|
When I visit "/parametres/preferences-utilisateur"
|
|
And I click "Revoir" next to "Tour d'orientation"
|
|
Then the tour popover shows "Votre semaine, ici"
|