/** * Script pour tester l'authentification admin et l'accès aux tickets */ const API_URL = 'http://localhost:4000'; async function testAdminAuth() { try { console.log('🔐 Test d\'authentification ADMIN...\n'); // 1. Login avec le compte admin console.log('📝 Connexion avec admin@thetiptop.com...'); const loginResponse = await fetch(`${API_URL}/api/auth/login`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email: 'admin@thetiptop.com', password: 'Admin123!', // Mot de passe par défaut }), }); if (!loginResponse.ok) { const errorData = await loginResponse.json(); console.error('❌ Échec de connexion:', errorData); console.log('\n💡 Si le mot de passe est incorrect, essayez avec admin@test.com'); return; } const loginData = await loginResponse.json(); console.log('✅ Connexion réussie!'); console.log('User:', loginData.user); console.log('Role:', loginData.user?.role); const token = loginData.token; if (!token) { console.error('❌ Token manquant dans la réponse'); return; } // 2. Vérifier le rôle if (loginData.user?.role !== 'ADMIN') { console.error(`❌ Rôle incorrect: ${loginData.user?.role}`); console.log('Le compte doit avoir le rôle ADMIN pour accéder aux tickets'); return; } console.log('\n🎯 Rôle ADMIN confirmé!\n'); // 3. Tester l'accès aux tickets console.log('📊 Récupération des tickets...'); const ticketsResponse = await fetch(`${API_URL}/api/admin/tickets`, { method: 'GET', headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json', }, }); if (!ticketsResponse.ok) { const errorData = await ticketsResponse.json(); console.error('❌ Échec de récupération des tickets:', errorData); console.log('Status:', ticketsResponse.status); console.log('Headers:', Object.fromEntries(ticketsResponse.headers.entries())); return; } const ticketsData = await ticketsResponse.json(); console.log('✅ Tickets récupérés avec succès!'); console.log(`Total de tickets: ${ticketsData.data?.pagination?.total || 0}`); console.log(`Page: ${ticketsData.data?.pagination?.page || 1}`); console.log(`Tickets sur cette page: ${ticketsData.data?.tickets?.length || 0}\n`); if (ticketsData.data?.tickets?.length > 0) { console.log('🎫 Exemple de tickets:'); console.table(ticketsData.data.tickets.slice(0, 5).map(t => ({ code: t.code, status: t.status, user: t.user_name, prize: t.prize_name, played_at: new Date(t.played_at).toLocaleDateString('fr-FR'), }))); } // 4. Tester les statistiques console.log('\n📈 Récupération des statistiques...'); const statsResponse = await fetch(`${API_URL}/api/admin/statistics`, { method: 'GET', headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json', }, }); if (statsResponse.ok) { const statsData = await statsResponse.json(); console.log('✅ Statistiques récupérées:'); console.log('- Utilisateurs totaux:', statsData.data?.users?.total_users); console.log('- Tickets totaux:', statsData.data?.tickets?.total_tickets); console.log('- Tickets en attente:', statsData.data?.tickets?.pending); console.log('- Tickets réclamés:', statsData.data?.tickets?.claimed); } console.log('\n✅ Tous les tests réussis! L\'API admin fonctionne correctement.'); console.log('\n🔑 Token pour le frontend:'); console.log(`Bearer ${token}`); console.log('\n💡 Utilisez ce token dans le localStorage du frontend:'); console.log(`localStorage.setItem('token', '${token}');`); } catch (error) { console.error('❌ Erreur:', error.message); console.log('\n💡 Assurez-vous que le backend est démarré: npm start'); } } testAdminAuth();