veza/docs/archive/frontend-sessions-2026/GUIDE_CORRECTION_TESTS.md
senke 0e7097ed1b chore(cleanup): J1 — purge 220MB debris, archive session docs (complete)
First-attempt commit 3a5c6e184 only captured the .gitignore change; the
pre-commit hook silently dropped the 343 staged moves/deletes during
lint-staged's "no matching task" path. This commit re-applies the intended
J1 content on top of bec75f143 (which was pushed in parallel).

Uses --no-verify because:
- J1 only touches .md/.json/.log/.png/binaries — zero code that would
  benefit from lint-staged, typecheck, or vitest
- The hook demonstrated it corrupts pure-rename commits in this repo
- Explicitly authorized by user for this one commit

Changes (343 total: 169 deletions + 174 renames):

Binaries purged (~167 MB):
- veza-backend-api/{server,modern-server,encrypt_oauth_tokens,seed,seed-v2}

Generated reports purged:
- 9 apps/web/lint_report*.json (~32 MB)
- 8 apps/web/tsc_*.{log,txt} + ts_*.log (TS error snapshots)
- 3 apps/web/storybook_*.json (1375+ stored errors)
- apps/web/{build_errors*,build_output,final_errors}.txt
- 70 veza-backend-api/coverage*.out + coverage_groups/ (~4 MB)
- 3 veza-backend-api/internal/handlers/*.bak

Root cleanup:
- 54 audit-*.png (visual regression baselines, ~11 MB)
- 9 stale MVP-era scripts (Jan 27, hardcoded v0.101):
  start_{iteration,mvp,recovery}.sh,
  test_{mvp_endpoints,protected_endpoints,user_journey}.sh,
  validate_v0101.sh, verify_logs_setup.sh, gen_hash.py

Session docs archived (not deleted — preserved under docs/archive/):
- 78 apps/web/*.md     → docs/archive/frontend-sessions-2026/
- 43 veza-backend-api/*.md → docs/archive/backend-sessions-2026/
- 53 docs/{RETROSPECTIVE_V,SMOKE_TEST_V,PLAN_V0_,V0_*_RELEASE_SCOPE,
          AUDIT_,PLAN_ACTION_AUDIT,REMEDIATION_PROGRESS}*.md
                        → docs/archive/v0-history/

README.md and CONTRIBUTING.md preserved in apps/web/ and veza-backend-api/.

Note: The .gitignore rules preventing recurrence were already pushed in
3a5c6e184 and remain in place — this commit does not modify .gitignore.

Refs: AUDIT_REPORT.md §11
2026-04-14 17:12:03 +02:00

4.7 KiB

Guide de Correction des Tests qui Échouent

Date: 2025-01-27
Objectif: Corriger systématiquement les 163 fichiers de tests qui échouent


🔍 Problèmes Communs Identifiés

1. Mock useToast Incorrect

Symptôme: showError is not a function

Problème:

// ❌ Incorrect
vi.mock('@/hooks/useToast', () => ({
  useToast: vi.fn(() => ({
    toast: vi.fn(),
  })),
}));

Solution:

// ✅ Correct
const mockShowSuccess = vi.fn();
const mockShowError = vi.fn();

vi.mock('@/hooks/useToast', () => ({
  useToast: vi.fn(() => ({
    success: mockShowSuccess,
    error: mockShowError,
    toast: vi.fn(), // Optionnel pour compatibilité
  })),
}));

Fichiers affectés: ~10-15 fichiers


2. React Router Context Manquant

Symptôme: Cannot destructure property 'basename' of React__namespace.useContext(...) as it is null

Problème:

// ❌ Incorrect
render(<Component />);

Solution:

// ✅ Correct - Option 1: Utiliser customRender
import { render } from '@/test/test-utils';

render(<Component />); // customRender inclut déjà Router

// ✅ Correct - Option 2: Wrapper manuel
import { BrowserRouter } from 'react-router-dom';
import { render } from '@testing-library/react';

render(
  <BrowserRouter>
    <Component />
  </BrowserRouter>
);

Fichiers affectés: ~20-30 fichiers


3. WebSocket Mock Incomplet

Symptôme: realWebSocket.addEventListener is not a function

Solution: Déjà corrigé dans src/test/setup.ts - MockWebSocket inclut maintenant addEventListener, removeEventListener, dispatchEvent

Fichiers affectés: Tests utilisant WebSocket


4. Context Manquants (ToastContext, AuthContext, etc.)

Symptôme: Cannot read property 'X' of undefined

Solution: Utiliser customRender de test-utils.tsx qui inclut tous les Contexts nécessaires

import { render } from '@/test/test-utils';

// customRender inclut automatiquement:
// - BrowserRouter
// - QueryClientProvider
// - ToastProvider
render(<Component />);

Fichiers affectés: ~30-40 fichiers


5. Mocks API Manquants

Symptôme: Network Error ou 404 Not Found dans les tests

Solution: Ajouter handlers MSW appropriés dans le test

import { server } from '@/mocks/test-setup';
import { rest } from 'msw';

beforeEach(() => {
  server.use(
    rest.get('/api/tracks', (req, res, ctx) => {
      return res(ctx.json({ tracks: [] }));
    })
  );
});

Fichiers affectés: ~50-60 fichiers


🛠️ Processus de Correction

Étape 1: Identifier les Erreurs

npm test -- --run 2>&1 | grep -E "(Error|failed|Cannot|TypeError)" > test-errors.log

Étape 2: Catégoriser les Erreurs

  • Grouper par type d'erreur (useToast, Router, Context, etc.)
  • Identifier les fichiers affectés

Étape 3: Corriger par Catégorie

  1. useToast - Corriger tous les mocks useToast d'abord
  2. Router - Ajouter BrowserRouter/customRender
  3. Context - Utiliser customRender
  4. Mocks API - Ajouter handlers MSW

Étape 4: Vérifier

npm test -- --run

📋 Checklist de Correction

Pour chaque fichier de test qui échoue:

  • Vérifier si le test utilise customRender de test-utils.tsx
  • Si non, remplacer render par customRender ou wrapper avec Router
  • Vérifier si le mock useToast retourne { success, error }
  • Si non, corriger le mock
  • Vérifier si le composant utilise React Router (Link, useNavigate, etc.)
  • Si oui, s'assurer que Router est présent (via customRender ou wrapper)
  • Vérifier si le test nécessite des mocks API
  • Si oui, ajouter handlers MSW appropriés
  • Exécuter le test individuellement pour vérifier
  • Répéter pour tous les tests du fichier

🚀 Script Automatique

Un script scripts/fix-failing-tests.sh a été créé pour automatiser certaines corrections:

cd apps/web
./scripts/fix-failing-tests.sh

Note: Le script fait des corrections automatiques mais certaines nécessitent une vérification manuelle.


📊 Progression

Corrections Appliquées

  • Mock useToast corrigé dans PlaylistBatchActions.test.tsx
  • Router ajouté dans TrackSearch.test.tsx
  • Mock WebSocket amélioré dans setup.ts
  • Helpers créés dans test-utils.tsx et mocks.ts

À Faire

  • Corriger ~160 fichiers restants selon les patterns identifiés

🎯 Objectif

Avant:

  • 163 fichiers de tests échouent
  • 683 tests échouent

Après:

  • 0 fichiers de tests échouent
  • 0 tests échouent

Dernière mise à jour: 2025-01-27