From dad81fa53f709d2ca4ba8ebf161ff560107b8348 Mon Sep 17 00:00:00 2001 From: le king fu Date: Sun, 18 Oct 2026 20:04:15 -0400 Subject: [PATCH] docs: fix the stale header of PriceFetchControl.test.tsx (#437) Self-review of PR #473: the header still said every React rendering of the file was bypassed, while its "displayed texts" tests render the control with its hooks from the shared harness. architecture.md: the slot presets are commented in each test file (the two direct writes of the onboarding wiring test are covered by the comment of mountWith). Resolves #437 Co-Authored-By: Claude Opus 5.5 --- docs/architecture.md | 2 +- src/components/balance/PriceFetchControl.test.tsx | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/architecture.md b/docs/architecture.md index 31ec447..6dfb738 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -661,7 +661,7 @@ Garde : `src/__integration__/i18n-mock-guard.test.ts` lit tous les `*.test.ts(x) ### Limites connues (#437) -- **Emplacements préréglés du harnais.** Le harnais donne un emplacement à chaque appel de hook, tous types confondus (`useState`, `useReducer`, `useRef`, `useMemo`, `useCallback`, `useEffect`), dans l'ordre des appels : c'est le helper `slot` de `fakeReact`. Un test qui prérègle un emplacement par sa position (`harness.slots[0] = …`) dépend donc de l'ordre des hooks du composant : un hook ajouté avant, de n'importe quel type, décale les emplacements sans rien dire, et la valeur préréglée tombe sur un autre hook. Préréglages actuels, chacun commenté sur place : `PriceFetchConsentToggle.test.tsx` (emplacements 0 à 2), `PriceFetchControl.test.tsx` (la fenêtre de consentement ouverte), `useOnboardingChecklist.wiring.test.ts` (`mountWith` et deux écritures directes) et `SystemsSettingsPage.test.tsx` ; `OnboardingStepCard.test.tsx` lit le `useRef` de l'emplacement 0. Qui ajoute un hook avant ces emplacements met le test à jour. Un test qui ouvre un état par un clic dans l'arbre rendu (`TransactionTable.wiring.test.ts`) n'a pas cette dépendance. +- **Emplacements préréglés du harnais.** Le harnais donne un emplacement à chaque appel de hook, tous types confondus (`useState`, `useReducer`, `useRef`, `useMemo`, `useCallback`, `useEffect`), dans l'ordre des appels : c'est le helper `slot` de `fakeReact`. Un test qui prérègle un emplacement par sa position (`harness.slots[0] = …`) dépend donc de l'ordre des hooks du composant : un hook ajouté avant, de n'importe quel type, décale les emplacements sans rien dire, et la valeur préréglée tombe sur un autre hook. Préréglages actuels, chacun commenté dans son fichier : `PriceFetchConsentToggle.test.tsx` (emplacements 0 à 2), `PriceFetchControl.test.tsx` (la fenêtre de consentement ouverte), `useOnboardingChecklist.wiring.test.ts` (`mountWith` et deux écritures directes) et `SystemsSettingsPage.test.tsx` ; `OnboardingStepCard.test.tsx` lit le `useRef` de l'emplacement 0. Qui ajoute un hook avant ces emplacements met le test à jour. Un test qui ouvre un état par un clic dans l'arbre rendu (`TransactionTable.wiring.test.ts`) n'a pas cette dépendance. - **`withoutFolders`.** Ses arrêts et ses deux limites (chemin relatif sans début reconnu ; nom de dossier qui contient l'un des arrêts) sont dans l'[ADR 0021](adr/0021-migrations-profils-secondaires.md), § 7. - **Mesure du rattrapage.** Le test `#[ignore]` `a_large_profile_catch_up_duration` (`profile_db.rs`) ne tourne pas en CI et n'asserte rien : il imprime une durée. Sa mesure, prise sur un SSD NVMe, et le risque qu'elle ne couvre pas (disque lent, antivirus qui inspecte la copie) sont dans l'[ADR 0021](adr/0021-migrations-profils-secondaires.md), « Négatives et points de vigilance », point « Le délai de démarrage couvre le rattrapage du profil actif ». diff --git a/src/components/balance/PriceFetchControl.test.tsx b/src/components/balance/PriceFetchControl.test.tsx index f4deb51..5bc5970 100644 --- a/src/components/balance/PriceFetchControl.test.tsx +++ b/src/components/balance/PriceFetchControl.test.tsx @@ -1,9 +1,10 @@ // PriceFetchControl — unit tests (issue #158) // // NOTE: This project does not have @testing-library/react or jsdom configured -// (logged as MEDIUM in decisions-log.md). Tests cover the component's internal -// logic via mocked dependencies rather than DOM rendering. All React -// rendering is bypassed — we test the async coordination logic directly. +// (logged as MEDIUM in decisions-log.md). Most tests cover the component's +// internal logic via mocked dependencies rather than DOM rendering; the +// "displayed texts" tests render it with renderToStaticMarkup, its hooks +// coming from the shared harness (src/test/hookHarness.ts). import { describe, it, expect, vi, beforeEach } from "vitest";