{
  "metadata": {
    "created_at": "2025-12-26T12:00:00Z",
    "last_updated": "2025-12-26T12:30:00Z",
    "version": "1.0.0",
    "test_suite": "MVP Integration Tests"
  },
  "bugs": [
    {
      "id": "BUG-001",
      "title": "Authentification - Format de requête API incorrect pour /auth/register",
      "description": "L'endpoint /api/v1/auth/register utilisait 'password_confirmation' au lieu de 'password_confirm'. CORRIGÉ: Le script de test utilise maintenant 'password_confirm'. Cependant, le register échoue toujours avec 'Failed to create user' (code 9000), probablement dû à un problème de base de données ou de validation du mot de passe.",
      "severity": "critical",
      "category": "auth",
      "status": "in_progress",
      "priority": 1,
      "fix_description": "Corrigé le script test-mvp-api.sh pour utiliser 'password_confirm' au lieu de 'password_confirmation'. Le format de requête est maintenant correct, mais le register échoue toujours avec une erreur interne (probablement DB ou validation).",
      "fixed_at": "2025-12-26T12:57:00Z",
      "steps_to_reproduce": [
        "1. Exécuter curl -X POST 'http://localhost:8080/api/v1/auth/register' -H 'Content-Type: application/json' -d '{\"email\":\"test@example.com\",\"username\":\"testuser\",\"password\":\"TestPassword123!\",\"password_confirmation\":\"TestPassword123!\"}'",
        "2. Observer la réponse d'erreur avec code 2000"
      ],
      "expected_behavior": "L'utilisateur devrait être créé avec succès (HTTP 201) et retourner les données utilisateur avec un token.",
      "actual_behavior": "Erreur HTTP avec message 'Le mot de passe est requis' (code 2000).",
      "environment": {
        "backend_version": "unknown",
        "api_endpoint": "/api/v1/auth/register",
        "method": "POST"
      },
      "logs": [
        "{\"success\":false,\"error\":{\"code\":2000,\"message\":\"Le mot de passe est requis\",\"request_id\":\"4445a4b2-8b30-4951-91ac-1f252f36c109\",\"timestamp\":\"2025-12-26T12:27:58Z\"}}"
      ],
      "assigned_to": null,
      "created_at": "2025-12-26T12:27:58Z",
      "updated_at": "2025-12-26T12:57:00Z"
    },
    {
      "id": "BUG-004",
      "title": "Register endpoint returns 'Failed to create user' (code 9000)",
      "description": "Après correction du format password_confirm, le register échoue toujours avec une erreur interne (code 9000) 'Failed to create user'. CAUSES IDENTIFIÉES: 1) Les champs 'is_banned' et 'login_count' étaient absents du modèle Go User (corrigé). 2) Le trigger PostgreSQL audit_trigger_function() essayait d'accéder à NEW.creator_id qui n'existe pas dans la table users (CAUSE PRINCIPALE). CORRIGÉ: Ajouté IsBanned et LoginCount au modèle User, et corrigé le trigger pour utiliser to_jsonb() et extraire les valeurs depuis JSONB au lieu d'accéder directement aux colonnes.",
      "severity": "critical",
      "category": "auth",
      "status": "fixed",
      "priority": 1,
      "fix_description": "1. Ajouté IsBanned bool et LoginCount int au modèle User dans internal/models/user.go avec les tags GORM appropriés (default:false/0, not null). 2. Initialisé explicitement tous les champs NOT NULL dans la fonction Register de internal/core/auth/service.go: IsBanned: false, LoginCount: 0, TokenVersion: 0, CreatedAt et UpdatedAt avec time.Now(). 3. CORRECTION PRINCIPALE: Modifié audit_trigger_function() dans migrations/052_audit_triggers.sql pour utiliser to_jsonb(NEW) et extraire creator_id/user_id depuis le JSONB au lieu d'accéder directement à NEW.creator_id (qui n'existe pas dans users). Cela évite l'erreur 'record \"new\" has no field \"creator_id\"'. 4. Ajouté un logging détaillé (fmt.Println) pour faciliter le diagnostic des erreurs futures.",
      "fixed_at": "2025-12-26T15:23:00Z",
      "steps_to_reproduce": [
        "1. Exécuter curl -X POST 'http://localhost:8080/api/v1/auth/register' -H 'Content-Type: application/json' -d '{\"email\":\"test@example.com\",\"username\":\"testuser\",\"password\":\"TestPassword123!\",\"password_confirm\":\"TestPassword123!\"}'",
        "2. Observer l'erreur avec code 9000"
      ],
      "expected_behavior": "L'utilisateur devrait être créé avec succès (HTTP 201) et retourner les données utilisateur.",
      "actual_behavior": "Erreur HTTP 500 avec message 'Failed to create user' (code 9000).",
      "environment": {
        "backend_version": "unknown",
        "api_endpoint": "/api/v1/auth/register",
        "method": "POST"
      },
      "logs": [
        "{\"success\":false,\"error\":{\"code\":9000,\"message\":\"Failed to create user\",\"request_id\":\"...\",\"timestamp\":\"...\"}}"
      ],
      "assigned_to": null,
      "created_at": "2025-12-26T12:57:00Z",
      "updated_at": "2025-12-26T12:57:00Z"
    },
    {
      "id": "BUG-002",
      "title": "Global Setup E2E échoue avec timeout",
      "description": "Le global setup Playwright échoue avec un timeout lors de la tentative de login. Cela bloque tous les tests E2E car ils dépendent de l'état d'authentification sauvegardé.",
      "severity": "critical",
      "category": "e2e",
      "status": "open",
      "priority": 1,
      "steps_to_reproduce": [
        "1. Exécuter cd apps/web && npx playwright test e2e/mvp-integration.spec.ts",
        "2. Observer le timeout dans global-setup.ts ligne 57"
      ],
      "expected_behavior": "Le global setup devrait créer un utilisateur de test, se connecter, et sauvegarder l'état d'authentification dans e2e/.auth/user.json.",
      "actual_behavior": "Timeout après 20 secondes lors de l'attente de la redirection vers /dashboard après login. L'utilisateur n'est probablement pas créé à cause de BUG-001.",
      "environment": {
        "browser": "Chromium",
        "os": "Linux",
        "playwright_version": "1.41.2",
        "frontend_url": "http://localhost:5173"
      },
      "logs": [
        "❌ [GLOBAL SETUP] Global setup failed: page.waitForURL: Timeout 20000ms exceeded."
      ],
      "assigned_to": null,
      "created_at": "2025-12-26T12:28:00Z",
      "updated_at": "2025-12-26T12:30:00Z"
    },
    {
      "id": "BUG-003",
      "title": "Script test-mvp-api.sh - Extraction de token incorrecte",
      "description": "Le script test-mvp-api.sh ne parvient pas à extraire correctement le access_token de la réponse de login. CORRIGÉ: Le format réel est .data.token.access_token (pas .data.access_token). Le script a été mis à jour pour chercher dans le bon chemin avec des fallbacks.",
      "severity": "high",
      "category": "testing",
      "status": "fixed",
      "priority": 2,
      "fix_description": "Corrigé l'extraction du token dans scripts/test-mvp-api.sh pour utiliser .data.token.access_token (format réel selon LoginResponse). Ajouté des fallbacks et du debug logging.",
      "fixed_at": "2025-12-26T13:07:00Z",
      "steps_to_reproduce": [
        "1. Exécuter ./scripts/test-mvp-api.sh",
        "2. Observer le message 'Login response missing access_token' après AUTH-004"
      ],
      "expected_behavior": "Le script devrait extraire le token depuis .data.access_token, .access_token, ou .data.token.access_token et le stocker dans ACCESS_TOKEN.",
      "actual_behavior": "Le token n'est pas extrait, probablement à cause d'un format de réponse différent ou d'une erreur dans la logique d'extraction jq.",
      "environment": {
        "script": "scripts/test-mvp-api.sh",
        "jq_version": "installed"
      },
      "logs": [
        "[✗] Login response missing access_token"
      ],
      "assigned_to": null,
      "created_at": "2025-12-26T12:28:30Z",
      "updated_at": "2025-12-26T12:30:00Z"
    }
  ],
  "summary": {
    "total_bugs": 4,
    "by_severity": {
      "critical": 3,
      "high": 1,
      "medium": 0,
      "low": 0
    },
    "by_category": {
      "auth": 2,
      "tracks": 0,
      "playlists": 0,
      "profile": 0,
      "navigation": 0,
      "api": 0,
      "ui": 0,
      "e2e": 1,
      "testing": 1,
      "general": 0
    },
      "by_status": {
      "open": 2,
      "in_progress": 0,
      "fixed": 2,
      "closed": 0,
      "wont_fix": 0
    }
  },
  "test_results": {
    "api_tests": {
      "total": 28,
      "passed": 2,
      "failed": 1,
      "skipped": 25
    },
    "e2e_tests": {
      "total": 20,
      "passed": 0,
      "failed": 1,
      "skipped": 19
    }
  }
}
