the-tip-top-backend/scripts/test-admin-tickets.js
2025-11-17 23:47:54 +01:00

116 lines
4.0 KiB
JavaScript

/**
* 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();