test-frontend-integration.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. const { PrismaClient } = require('@prisma/client');
  2. const prisma = new PrismaClient();
  3. async function testCompany5Integration() {
  4. try {
  5. console.log('🔍 Test d\'intégration frontend - endpoint reservations/company/5/sum');
  6. const companyId = 5; // test-company
  7. // 1. Vérifier la compagnie 5
  8. const company = await prisma.company.findUnique({
  9. where: { id: companyId },
  10. include: {
  11. vehicules: {
  12. include: {
  13. trajets: {
  14. include: {
  15. _count: {
  16. select: {
  17. reservations: true,
  18. },
  19. },
  20. },
  21. },
  22. },
  23. },
  24. },
  25. });
  26. if (!company) {
  27. console.log('❌ Compagnie 5 non trouvée');
  28. return;
  29. }
  30. console.log(`\n🏢 Compagnie ${companyId}: ${company.name}`);
  31. console.log(` - Véhicules: ${company.vehicules.length}`);
  32. if (company.vehicules.length > 0) {
  33. company.vehicules.forEach(vehicule => {
  34. console.log(` - Véhicule ${vehicule.id}: ${vehicule.trajets.length} trajets`);
  35. vehicule.trajets.forEach(trajet => {
  36. console.log(` - Trajet ${trajet.id}: ${trajet._count.reservations} réservations, fermé=${trajet.registrationClosed}`);
  37. });
  38. });
  39. }
  40. // 2. Simuler l'appel de l'endpoint (comme le ferait le frontend)
  41. console.log(`\n🧪 Test de l'endpoint pour la compagnie ${companyId}:`);
  42. const reservations = await prisma.reservation.findMany({
  43. where: {
  44. trajet: {
  45. vehicule: {
  46. companyId: companyId,
  47. },
  48. registrationClosed: true, // Uniquement les trajets fermés
  49. },
  50. },
  51. include: {
  52. trajet: {
  53. select: {
  54. id: true,
  55. pricePerSeat: true,
  56. registrationClosed: true,
  57. vehicule: {
  58. select: {
  59. company: {
  60. select: {
  61. name: true,
  62. },
  63. },
  64. },
  65. },
  66. },
  67. },
  68. },
  69. });
  70. const totalAmount = reservations.reduce(
  71. (sum, reservation) => sum + (reservation.trajet?.pricePerSeat || 0),
  72. 0,
  73. );
  74. const result = {
  75. companyId: companyId,
  76. totalReservations: reservations.length,
  77. totalAmount: totalAmount,
  78. };
  79. console.log('📊 Résultat de l\'endpoint pour la compagnie 5:');
  80. console.log(JSON.stringify(result, null, 2));
  81. // 3. Si aucune réservation, créer un trajet fermé pour le test
  82. if (reservations.length === 0) {
  83. console.log('\n🔧 Aucune réservation trouvée, création d\'un test...');
  84. // Vérifier s'il y a des trajets pour cette compagnie
  85. const allTrajets = await prisma.trajet.findMany({
  86. where: {
  87. vehicule: {
  88. companyId: companyId,
  89. },
  90. },
  91. });
  92. if (allTrajets.length > 0) {
  93. // Fermer le premier trajet et créer quelques réservations de test
  94. const trajetId = allTrajets[0].id;
  95. console.log(` - Fermeture du trajet ${trajetId} pour le test...`);
  96. await prisma.trajet.update({
  97. where: { id: trajetId },
  98. data: { registrationClosed: true },
  99. });
  100. // Refaire le test
  101. const newReservations = await prisma.reservation.findMany({
  102. where: {
  103. trajet: {
  104. vehicule: {
  105. companyId: companyId,
  106. },
  107. registrationClosed: true,
  108. },
  109. },
  110. include: {
  111. trajet: {
  112. select: {
  113. pricePerSeat: true,
  114. },
  115. },
  116. },
  117. });
  118. const newTotalAmount = newReservations.reduce(
  119. (sum, reservation) => sum + (reservation.trajet?.pricePerSeat || 0),
  120. 0,
  121. );
  122. const newResult = {
  123. companyId: companyId,
  124. totalReservations: newReservations.length,
  125. totalAmount: newTotalAmount,
  126. };
  127. console.log('📊 Nouveau résultat après fermeture du trajet:');
  128. console.log(JSON.stringify(newResult, null, 2));
  129. // Remettre en ouvert
  130. await prisma.trajet.update({
  131. where: { id: trajetId },
  132. data: { registrationClosed: false },
  133. });
  134. console.log(' - Trajet remis en ouvert');
  135. } else {
  136. console.log(' - Aucun trajet trouvé pour cette compagnie');
  137. }
  138. }
  139. // 4. Test de la logique frontend
  140. console.log('\n✅ Test de la logique frontend pour la compagnie 5:');
  141. console.log(` - URL appelée: /api/reservations/company/5/sum`);
  142. console.log(` - reservationsSumResult?.totalAmount: ${result.totalAmount}`);
  143. console.log(` - reservationsSum.value sera défini à: ${result.totalAmount}`);
  144. console.log(` - Type: ${typeof result.totalAmount} (attendu: number)`);
  145. console.log('\n✅ Test d\'intégration terminé avec succès !');
  146. } catch (error) {
  147. console.error('❌ Erreur lors du test:', error);
  148. } finally {
  149. await prisma.$disconnect();
  150. }
  151. }
  152. testCompany5Integration();