veza/veza-backend-api/PR2_P1_001_TESTS_INTEGRATION_REPORT.md
2025-12-12 21:34:34 -05: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