veza/apps/web/e2e/RATE_LIMIT_FIX_REPORT.md
2025-12-22 22:00:50 +01:00

6.9 KiB
Raw Blame History

🔧 E2E RATE LIMIT FIX REPORT

Date: 2025-12-19
Status: 4 FIXES CRITIQUES APPLIQUÉS


🎯 PROBLÈME DIAGNOSTIQUÉ

Symptômes

  • 32 tests échouent (84% échec)
  • Erreurs principales :
    1. No token found in storage after login!
    2. ⏱️ TimeoutError: page.waitForURL: Timeout 20000ms exceeded
    3. 🚫 HTTP 429 (Too Many Requests)

Cause Racine

RATE LIMITING BACKEND : 6 workers Playwright = 6 logins simultanés → Backend rate limiter bloque les requêtes

🔴 [NETWORK ERROR] POST http://127.0.0.1:8080/api/v1/auth/login: 429
🔴 [CONSOLE ERROR] Trop de requêtes. Veuillez patienter avant de réessayer.

FIXES APPLIQUÉS

Fix 1 : Réduire Workers Playwright (CRITIQUE)

Fichier: playwright.config.ts

Avant:

workers: process.env.CI ? 1 : undefined, // 6 workers en local

Après:

// ⚠️ CRITICAL: 1 worker pour éviter rate limiting backend (429)
// Le backend a un rate limiter qui bloque trop de requêtes simultanées
workers: 1,

Impact: Réduit les requêtes simultanées de 6 à 1 → Élimine le rate limiting


Fix 2 : Logs Storage Visibles (DEBUG)

Fichier: e2e/utils/test-helpers.ts

Problème: Les console.log dans page.evaluate() s'affichent dans la console du navigateur, pas dans Playwright.

Solution: Extraire les données de storage AVANT de chercher le token, puis logger dans la console Playwright.

Nouveau logging:

console.log('🔍 [Helper] === STORAGE DUMP FOR DEBUG ===');
console.log('  📦 localStorage keys:', Object.keys(storageData.localStorage));
console.log('  📦 sessionStorage keys:', Object.keys(storageData.sessionStorage));
console.log('  🍪 cookies:', storageData.cookies || '(empty)');
console.log('  🔐 auth-storage content:', JSON.stringify(parsed, null, 2));

Impact: Visibilité complète sur le contenu du storage pour débugger le problème de token


Fix 3 : Corriger URL qa-audit.spec.ts

Fichier: e2e/qa-audit.spec.ts

Avant:

const BASE_URL = process.env.VITE_API_URL || 'http://localhost'; // ❌ Pas de port!

Après:

// ⚠️ FIX: BASE_URL est le frontend (port 3000), pas l'API backend
const BASE_URL = process.env.BASE_URL || 'http://localhost:3000';

Impact: Corrige 6 tests qui échouaient avec net::ERR_CONNECTION_REFUSED


Fix 4 : Attente Token Persistence (DÉJÀ EN PLACE)

Fichier: e2e/utils/test-helpers.ts

// CRITIQUE: Attendre que le token soit persisté dans le storage (max 5s)
console.log(`⏳ [LOGIN] Waiting for token to appear in storage...`);
await page.waitForFunction(() => {
  return localStorage.getItem('veza_access_token') || localStorage.getItem('auth-storage');
}, null, { timeout: 5000 }).catch(() => {
  console.warn('⚠️ Token wait timeout - proceeding with verification');
});

Impact: Gère les cas où le token prend du temps à être stocké


🧪 VALIDATION

Étape 1 : Relancer les tests

cd apps/web
npm run test:e2e

Étape 2 : Observer les nouveaux logs

Avant (pas visible):

(rien - logs dans console navigateur)

Après (visible dans Playwright):

🔍 [Helper] === STORAGE DUMP FOR DEBUG ===
  📦 localStorage keys: [ 'veza_access_token', 'veza_refresh_token', 'auth-storage' ]
  🔐 auth-storage content: {
    "state": {
      "user": {...},
      "isAuthenticated": true
    }
  }
  ✅ TOKEN FOUND: eyJhbGciOiJIUzI1NiIsInR5cCI...

📊 RÉSULTATS ATTENDUS

Avant

  • 32 tests échouent
  • 6 tests passent
  • Success Rate: 16%

Après

  • 35+ tests passent (estimation)
  • <5 tests échouent (autres problèmes)
  • Success Rate: 90%+

🔍 SI LES TESTS ÉCHOUENT ENCORE

Scénario 1: Token toujours absent

Logs à chercher:

🔍 [Helper] === STORAGE DUMP FOR DEBUG ===
  📦 localStorage keys: [ 'i18nextLng', 'auth-storage' ]
  🔐 auth-storage content: {
    "state": {
      "user": null,
      "isAuthenticated": false
    }
  }
  ❌ NO TOKEN FOUND in any storage location

Diagnostic: Le backend ne retourne PAS de tokens

Action: Vérifier la réponse du backend lors du login :

# Dans un autre terminal
curl -X POST http://localhost:8080/api/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email":"user@example.com","password":"password123"}'

Réponse attendue:

{
  "success": true,
  "data": {
    "access_token": "eyJhbGciOiJI...",
    "refresh_token": "eyJhbGciOiJI...",
    "expires_in": 3600,
    "token_type": "Bearer",
    "user": {...}
  }
}

Scénario 2: Toujours des 429

Logs à chercher:

🔴 [NETWORK ERROR] POST http://127.0.0.1:8080/api/v1/auth/login: 429

Diagnostic: Le rate limiter backend est trop strict

Action 1: Vérifier les workers Playwright :

grep -n "workers" apps/web/playwright.config.ts
# Devrait afficher: workers: 1,

Action 2: Augmenter le rate limit backend temporairement (pour les tests) :

// Dans veza-backend-api/internal/middleware/rate_limiter.go
// Augmenter le nombre de requêtes autorisées
MaxRequests: 100, // Au lieu de 10

Scénario 3: Token dans un format différent

Logs à chercher:

🔐 auth-storage content: {
  "state": {
    "token": "eyJhbGciOiJI...",  // ✅ Token ici!
    "isAuthenticated": true
  }
}
❌ NO TOKEN FOUND in any storage location

Diagnostic: Le token est dans auth-storage.state.token mais getAuthToken ne le trouve pas

Action: Vérifier le code de getAuthToken pour s'assurer qu'il cherche dans state.token


🎯 CHANGEMENTS RÉSUMÉS

Fichier Changement Impact
playwright.config.ts workers: 1 Élimine rate limiting
utils/test-helpers.ts Logs storage dans Playwright console Visibilité debug
qa-audit.spec.ts BASE_URL = 'http://localhost:3000' Corrige connexion refused
utils/test-helpers.ts waitForFunction pour token Gère timing async

PROCHAINES ÉTAPES

  1. Relancer les tests:

    cd apps/web
    npm run test:e2e
    
  2. Observer les logs:

    • Chercher 🔍 [Helper] === STORAGE DUMP FOR DEBUG ===
    • Vérifier si le token est présent ou absent
  3. Ajuster si nécessaire:

    • Si token absent : Vérifier réponse backend
    • Si toujours 429 : Vérifier workers: 1 dans config
    • Si autres erreurs : Consulter les logs détaillés

📝 NOTES IMPORTANTES

  • ⚠️ Les tests seront plus lents (1 worker au lieu de 6)
  • Mais ils seront stables (pas de rate limiting)
  • 🔍 Les logs storage sont maintenant visibles dans la sortie Playwright
  • 📊 Success rate attendu : 90%+ (vs 16% avant)

READY FOR RE-RUN

Lancez npm run test:e2e et observez les nouveaux logs ! 🚀