veza/docs/archive/backend-sessions-2026/PR2_P1_001_TESTS_INTEGRATION_REPORT.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

PR2 — Fix Tests Intégration (testcontainers)

Résumé

Cette PR corrige le problème MOD-P1-001 : tests d'intégration échouent avec testcontainers PostgreSQL.

Problème identifié: La migration 000000_cleanup_refresh_tokens.sql s'exécute avant que la table refresh_tokens soit créée, causant l'échec du container PostgreSQL avec code 3.

Item Corrigé

MOD-P1-001: Tests d'Intégration Échouent (testcontainers)

Fichier: internal/testutils/setup.go Problème:

  • Migration 000000_cleanup_refresh_tokens.sql exécutée avant création de la table refresh_tokens
  • Container PostgreSQL sort avec code 3
  • Pas de retry/backoff pour démarrage container
  • Logs insuffisants pour debugging

Fix:

  1. Exclusion migration cleanup: Exclure 000000_cleanup_refresh_tokens.sql des init scripts testcontainers (cette migration suppose que la table existe déjà)
  2. Retry avec backoff exponentiel: Ajout de 3 tentatives avec backoff exponentiel (2s, 4s, 6s)
  3. Timeout augmenté: Passage de 60s à 90s pour le démarrage du container
  4. Logging amélioré: Ajout de logs structurés (zap) pour debugging

Validation:

go test ./tests/transactions -v -count=1
# ✅ 7/8 tests passent (testcontainers fonctionne)
# ⚠️ 1 test échoue (TestToggleLike_RollbackOnError) - problème logique service, hors scope PR2

Fichiers Modifiés

  1. internal/testutils/setup.go
    • Exclusion migration cleanup des init scripts
    • Ajout retry avec backoff exponentiel
    • Timeout augmenté (60s → 90s)
    • Logging amélioré avec zap

Commandes de Validation

Tests d'Intégration

# Test unique (testcontainers fonctionne)
go test ./tests/transactions -v -count=1 -run TestToggleLike_Success
# ✅ PASS (4.48s)

# Tous les tests d'intégration
go test ./tests/transactions -v -count=1
# ✅ 7/8 tests passent (testcontainers fonctionne)
# ⚠️ TestToggleLike_RollbackOnError échoue - problème logique service (hors scope PR2)

# Tests globaux (unitaires + intégration)
go test ./... -count=1 -short
# ✅ Tests unitaires passent, tests d'intégration passent (sauf 1 test pré-existant)

Vérification Container

# Vérifier que le container démarre correctement
docker ps -a | grep postgres
# ✅ Container démarre et reste actif pendant les tests

Détails Techniques

Migration Exclue

  • Fichier: migrations/000000_cleanup_refresh_tokens.sql
  • Raison: Cette migration est une migration de cleanup qui suppose que la table refresh_tokens existe déjà (créée dans 010_auth_and_users.sql)
  • Impact: Aucun - cette migration est destinée aux bases de données existantes, pas aux bases fraîches créées par testcontainers

Retry Strategy

  • Max retries: 3
  • Backoff: Exponentiel (2s, 4s, 6s)
  • Timeout: 90s par tentative (augmenté de 60s)

Logging

  • Logs structurés avec zap pour chaque tentative
  • Logs d'erreur détaillés en cas d'échec
  • Logs de succès avec nombre de tentatives

Risques / Limitations

  1. Migration cleanup exclue: La migration 000000_cleanup_refresh_tokens.sql n'est pas exécutée dans les tests

    • Impact: Aucun - cette migration est pour cleanup de bases existantes
    • Mitigation: Si nécessaire, cette migration peut être exécutée manuellement après les tests
  2. Timeout 90s: Timeout augmenté pour permettre au container de démarrer

    • Impact: Tests peuvent être plus lents si le container est lent à démarrer
    • Mitigation: Retry permet de récupérer des échecs temporaires
  3. Dépendance Docker: Tests nécessitent Docker en cours d'exécution

    • Impact: Tests échouent si Docker n'est pas disponible
    • Mitigation: Documenté dans README/tests (prerequisite)
  4. Test pré-existant échoue: TestToggleLike_RollbackOnError échoue (1/8 tests)

    • Impact: Problème logique dans social.Service.ToggleLike() - ne retourne pas d'erreur quand le post n'existe plus
    • Scope: Hors scope PR2 (MOD-P1-001 concerne uniquement testcontainers)
    • Mitigation: À corriger dans une PR séparée si nécessaire

Tests Ajoutés/Modifiés

  • Aucun test ajouté (fix de l'infrastructure de test)
  • Tests existants passent maintenant

Documentation

Prerequisites pour tests d'intégration:

  • Docker doit être en cours d'exécution
  • Port 5432 ne doit pas être utilisé (ou Docker doit être configuré pour utiliser un autre port)
  • Suffisamment de mémoire disponible pour le container PostgreSQL

Prochaines Étapes

  • PR2 complétée
  • ⏭️ PR3: Migrations avec rollback sécurisé (MOD-P1-002)

Statut: READY FOR REVIEW

Effort: ~4h (comme estimé dans audit)

Breaking Changes: Aucun