All checks were successful
Avant : chaque onglet de source rendait son propre champ recherche, avec
son propre state, et `RecipeSourcesPanel` est remonté (`key={sourceKey}`)
à chaque changement de source — la requête tapée était donc perdue en
passant d'une source à une autre.
Maintenant : un seul champ, dans l'en-tête de `RecipesPage`. `search` /
`debouncedSearch` (déjà présents pour les onglets réels) sont rendus en
permanence et `debouncedSearch` est passé en prop à `RecipeSourcesPanel`,
qui n'a plus ni `useState` de recherche, ni `<input>`, ni effet de
debounce internes — son effet de `browse` dépend de la prop. La requête
survit donc au changement de source (le `key` remonte toujours la liste +
le préchargement, mais le terme vit au-dessus), et elle est commune aux
onglets réels comme aux sources.
`RecipePickerDialog` : même chose — le champ recherche sort du bloc de
filtres `activeSourceKey === null` (les filtres ingrédients/régimes/foyer
y restent, ils ne concernent que les onglets en base) et `debouncedSearch`
est passé au panneau.
- SCSS : `.recipes-page__header--sources` supprimé (le panneau n'a plus
d'en-tête). Clé i18n morte `recipes.sources.searchPlaceholder` retirée.
- `specs/frontend-architecture.md` : recherche au niveau page.
Tests : `recipe-sources.feature` — nouveau scénario « la requête est
conservée en changeant d'onglet de source » (tape « poulet » sur TheMealDB,
bascule sur Marmiton, le champ garde « poulet » et Marmiton est interrogé
avec `query=poulet`). `pnpm lint` / `pnpm build` verts ; Cypress local :
recipe-sources 8/8, recipes 5/5, recipes.cy 12/12, planning 3/3.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
105 lines
4.7 KiB
Gherkin
105 lines
4.7 KiB
Gherkin
Feature: Browsing external recipe sources
|
|
As a signed-in user
|
|
I want to browse the recipes available from my household's enabled sources
|
|
So that I can find new recipes to import, or jump straight to ones I already have
|
|
|
|
Background:
|
|
Given I am signed in as "Alice" "Martin"
|
|
And my household id is 1
|
|
And the disliked ingredients list is empty
|
|
And the planning request returns nothing
|
|
|
|
Scenario: Shows no source tab when the household hasn't enabled any
|
|
Given the recipe catalog contains nothing
|
|
And the sources reference list has options
|
|
And the household's enabled sources are empty
|
|
When I visit "/recettes"
|
|
Then I should not see "TheMealDB"
|
|
|
|
Scenario: Browses an enabled source, distinguishing already-imported items from new ones
|
|
Given the recipe catalog contains nothing
|
|
And the sources reference list has options
|
|
And the household has enabled TheMealDB
|
|
And browsing TheMealDB returns some items
|
|
And recipe 2's detail is available
|
|
When I visit "/recettes"
|
|
And I click the button "TheMealDB"
|
|
Then I should see the source item "Chicken Handi"
|
|
And I should see the source item "Fish Pie"
|
|
And the source item "Chicken Handi" should be marked as already imported
|
|
|
|
When I click the source item "Chicken Handi"
|
|
Then the URL should include "/recettes/2"
|
|
And the recipe detail panel heading should be "Omelette"
|
|
|
|
Scenario: Previews a not-yet-imported item, highlighting its detected techniques
|
|
Given the recipe catalog contains nothing
|
|
And the sources reference list has options
|
|
And the household has enabled TheMealDB
|
|
And browsing TheMealDB returns some items
|
|
And previewing TheMealDB item "9999" is available
|
|
When I visit "/recettes"
|
|
And I click the button "TheMealDB"
|
|
And I click the source item "Fish Pie"
|
|
Then the URL should include "/recettes/sources/theMealDb/9999"
|
|
And the recipe detail panel heading should be "Fish Pie"
|
|
And I should see the highlighted technique "Cuire"
|
|
|
|
Scenario: Loads further pages automatically, with no "load more" button
|
|
Given the recipe catalog contains nothing
|
|
And the sources reference list has options
|
|
And the household has enabled TheMealDB
|
|
And browsing TheMealDB returns two pages of items
|
|
When I visit "/recettes"
|
|
And I click the button "TheMealDB"
|
|
Then I should see the source item "Chicken Handi"
|
|
And I should see the source item "Beef Wellington"
|
|
And I should not see "Voir plus"
|
|
|
|
Scenario: Walks several pages with distinct cursors, then stops, without re-requesting a page
|
|
Given the recipe catalog contains nothing
|
|
And the sources reference list has options
|
|
And the household has enabled TheMealDB
|
|
And browsing TheMealDB returns three pages, each addressed by its own cursor
|
|
When I visit "/recettes"
|
|
And I click the button "TheMealDB"
|
|
Then I should see the source item "Page 1 Item 1"
|
|
When I scroll the source list to the bottom 5 times
|
|
Then the third page's items should have loaded
|
|
And no browse cursor should have been requested more than twice
|
|
|
|
Scenario: Offers a retry when loading the next page fails
|
|
Given the recipe catalog contains nothing
|
|
And the sources reference list has options
|
|
And the household has enabled TheMealDB
|
|
And browsing TheMealDB's next page fails once, then succeeds
|
|
When I visit "/recettes"
|
|
And I click the button "TheMealDB"
|
|
Then I should see the source item "Chicken Handi"
|
|
And I should see a message to retry loading more
|
|
When I click the button "Réessayer"
|
|
Then I should see the source item "Beef Wellington"
|
|
|
|
Scenario: Keeps the search term when switching between source tabs
|
|
Given the recipe catalog contains nothing
|
|
And the sources reference list has options
|
|
And the household has enabled TheMealDB and Marmiton
|
|
And browsing any enabled source echoes back its query
|
|
When I visit "/recettes"
|
|
And I click the button "TheMealDB"
|
|
And I type "poulet" into the recipe search field
|
|
Then "TheMealDB" should have been browsed with the query "poulet"
|
|
When I click the button "Marmiton"
|
|
Then the recipe search field should contain "poulet"
|
|
And "Marmiton" should have been browsed with the query "poulet"
|
|
|
|
Scenario: Deep-links straight to a not-yet-imported item's own page, with no import affordance at all
|
|
Given the recipe catalog contains nothing
|
|
And the sources reference list has options
|
|
And the household has enabled TheMealDB
|
|
And browsing TheMealDB returns some items
|
|
And previewing TheMealDB item "9999" is available
|
|
When I visit "/recettes/sources/theMealDb/9999"
|
|
Then the recipe detail panel heading should be "Fish Pie"
|
|
And I should not see "Importer cette recette"
|
|
And I should see a discreet link to the item's original page
|