mirror of
https://github.com/MaksTinyWorkshop/_Assistant_Lead_Tech
synced 2026-04-27 23:08:16 +02:00
capitalisation: intégration 28 entrées knowledge + 2 CLAUDE.md RL799_V2 (triage branche mcp_v1)
28 nouvelles sections intégrées dans 12 fichiers knowledge (backend risques/patterns, frontend risques/patterns, workflow risques). Couvre rate limiting, RGPD, CSP Next.js, refresh token TOCTOU, catch-all Prisma, distinction 401/403, tests E2E Playwright, etc. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -112,3 +112,26 @@ if (user === null || user.role !== 'ADMIN') return <View />;
|
||||
- **Règle** : tout guard de rôle dans un composant React Native doit utiliser `useEffect` + redirect + rendu vide, jamais un return conditionnel direct
|
||||
|
||||
- Contexte technique : React Native / Expo Router / Zustand auth — app-alexandrie 24-03-2026
|
||||
|
||||
---
|
||||
|
||||
<a id="risque-tests-structurels-obsoletes-migration-auth"></a>
|
||||
## Tests structurels obsolètes après migration du mécanisme d'auth
|
||||
|
||||
### Risques
|
||||
|
||||
- Lors de la migration d'un pattern `Authorization: Bearer` vers des cookies httpOnly, les tests structurels (qui mocquent `getSession()` et assertent sur les headers) deviennent tous faux sans que TypeScript ne détecte rien
|
||||
- Les mocks ne matchent plus le code réel, les tests passent ou échouent silencieusement
|
||||
|
||||
### Symptômes
|
||||
|
||||
- Tests frontend qui mocquent `getSession()` et assertent `Authorization: Bearer` sur les appels `fetch`, alors que le code utilise désormais `apiFetch` avec cookies (`credentials: 'include'`)
|
||||
- Faux positifs : les tests ne testent plus rien de réel
|
||||
|
||||
### Bonnes pratiques / mitigations
|
||||
|
||||
- Après toute migration d'un mécanisme d'auth frontend, auditer systématiquement les tests de services pour vérifier que les assertions portent sur le bon mécanisme (cookies vs headers)
|
||||
- Adapter les mocks pour patcher `apiFetch` au lieu de `getSession` + `fetch` brut
|
||||
- **Signal review** : `Authorization: Bearer` dans les tests alors que le code production utilise `credentials: 'include'`
|
||||
|
||||
- Contexte technique : Vue 3 / auth migration — RL799_V2 08-04-2026
|
||||
|
||||
@@ -254,3 +254,26 @@ const routes = [
|
||||
- Ajouter un test qui valide la synchro sur changement de query param (même composant réutilisé, navigation intra-page)
|
||||
|
||||
- Contexte technique : Vue 3 / Vue Router 4 — RL799_V2 02-04-2026
|
||||
|
||||
---
|
||||
|
||||
<a id="risque-vue-router-tests-textuels-guards"></a>
|
||||
## Vue Router — faux sentiment de sécurité avec tests textuels sur guards
|
||||
|
||||
### Risques
|
||||
|
||||
- Des assertions de type `content.includes("requiresRoles: ['admin']")` valident la présence de configuration mais pas le comportement réel du `beforeEach`
|
||||
- Un changement dans le guard redirige mal (`login` vs `home`) ou ignore un cas RBAC sans casser les tests
|
||||
|
||||
### Symptômes
|
||||
|
||||
- Les tests passent alors qu'un changement dans le guard redirige vers la mauvaise page
|
||||
- Régressions de guard runtime invisibles aux tests
|
||||
|
||||
### Bonnes pratiques / mitigations
|
||||
|
||||
- Ajouter au moins un test runtime qui exécute effectivement la logique du guard (session admin/non-admin) et vérifie la valeur retournée par le guard (`true` ou `{ name: 'home' }`)
|
||||
- Les tests textuels (`includes`) sont acceptables comme smoke structurel mais ne doivent pas être la seule couverture des guards de navigation
|
||||
- **Signal review** : guards de navigation couverts uniquement par des tests `includes()` sans test comportemental
|
||||
|
||||
- Contexte technique : Vue 3 / Vue Router 4 / node:test — RL799_V2 08-04-2026
|
||||
|
||||
@@ -148,3 +148,26 @@ source_projects: [app-alexandrie, app-template-resto, RL799_V2]
|
||||
- **Règle** : si un test vérifie un *comportement* (ex: "le menu se ferme après clic"), il doit monter le composant, pas chercher une string dans le source
|
||||
|
||||
- Contexte technique : Vue 3 / node:test — RL799_V2 02-04-2026
|
||||
|
||||
---
|
||||
|
||||
<a id="risque-catch-false-test-skip-e2e"></a>
|
||||
## Anti-pattern : `.catch(() => false)` + `test.skip` dans les tests E2E
|
||||
|
||||
### Risques
|
||||
|
||||
- Le pattern `await locator.isVisible().catch(() => false)` suivi de `test.skip(true, ...)` masque les erreurs réelles (sélecteur cassé, timeout, changement de structure) derrière un skip silencieux
|
||||
- Un AC peut rester perpétuellement non testé sans qu'aucun rapport ne le signale comme problème
|
||||
|
||||
### Symptômes
|
||||
|
||||
- Tests skippés en permanence dans les rapports CI
|
||||
- AC marqués `[x]` dans la story mais jamais réellement validés
|
||||
|
||||
### Bonnes pratiques / mitigations
|
||||
|
||||
- Pour vérifier si un élément optionnel est présent (données dépendantes du seed), utiliser `await locator.count()` qui retourne 0 sans lancer d'exception, puis `test.skip` uniquement si count === 0
|
||||
- Réserver `.catch()` aux cas où une exception est réellement attendue et documentée
|
||||
- **Signal review** : `.catch(() => false)` suivi de `test.skip` dans un test E2E
|
||||
|
||||
- Contexte technique : Playwright / E2E — RL799_V2 08-04-2026
|
||||
|
||||
Reference in New Issue
Block a user