From 8478672054f28be1a3644bb62af2c61673ea5c4f Mon Sep 17 00:00:00 2001 From: Toto Date: Fri, 29 Nov 2024 10:26:17 +0100 Subject: [PATCH] BenevoleDemandesFinaliseesPageTest DONE --- .../BenevoleDemandesFinaliseesPageTest.java | 154 +++++++++++------- 1 file changed, 96 insertions(+), 58 deletions(-) diff --git a/src/test/java/controller/BenevoleDemandesFinaliseesPageTest.java b/src/test/java/controller/BenevoleDemandesFinaliseesPageTest.java index db22373..9238421 100644 --- a/src/test/java/controller/BenevoleDemandesFinaliseesPageTest.java +++ b/src/test/java/controller/BenevoleDemandesFinaliseesPageTest.java @@ -4,8 +4,6 @@ import database.DatabaseConnection; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import javax.swing.*; -import javax.swing.table.DefaultTableModel; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.sql.Connection; @@ -13,87 +11,127 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; -import static org.junit.jupiter.api.Assertions.assertNotEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.*; class BenevoleDemandesFinaliseesPageTest { - private BenevoleDemandesFinaliseesPage benevoleDemandesFinaliseesPage; - private JTable table; - private DefaultTableModel tableModel; - private int user_besoinID = 1; - private int benevoleID = 2; // ID fictif de l'utilisateur - private int demandeID; // ID fictif de la demande + private BenevoleDemandesFinaliseesPage page; + private int utilisateurID = 1; // ID utilisateur arbitraire pour le test + private int benevoleID = 2; // ID du bénévole pour le test + private int demandeID; // ID de la demande de test @BeforeEach void setUp() throws SQLException { - // Initialiser la benevoleDemandesFinaliseesPage pour les tests - benevoleDemandesFinaliseesPage = new BenevoleDemandesFinaliseesPage(benevoleID); + // Initialiser la page de test + page = new BenevoleDemandesFinaliseesPage(benevoleID); } @Test - void testPageCreation() { - // on vérifie que l'instance de la benevoleDemandesFinaliseesPage est créée correctement - assertNotNull(benevoleDemandesFinaliseesPage); - } - - @Test - void testModifierAvisForFinalizedRequest() { - //on crée une demande avec le statut 'finalisée' pour tester la méthode modifierAvis(), et avec un avis original + void testLoadDemandesFinalisees() { try (Connection connection = DatabaseConnection.getConnection()) { - String insertSQL = "INSERT INTO demandes_aide (statut, utilisateur_id, benevole_id, description, avis_benevole) VALUES (?, ?, ?, ?, ?)"; + // Créer trois demandes tests + String desc1 = "Demande de test 1 pour JUnit / Test loadDemandesFinalisees"; + String desc2 = "Demande de test 2 pour JUnit / Test loadDemandesFinalisees"; + String desc3 = "Demande de test 3 pour JUnit / Test loadDemandesFinalisees"; + + // Insertion de la première demande + String insertSQL = "INSERT INTO demandes_aide (statut, utilisateur_id, benevole_id, description) VALUES (?, ?, ?, ?)"; PreparedStatement insertStatement = connection.prepareStatement(insertSQL, PreparedStatement.RETURN_GENERATED_KEYS); insertStatement.setString(1, "finalisée"); - insertStatement.setInt(2, user_besoinID); - insertStatement.setInt(3, benevoleID); // Aucun bénévole affecté initialement - insertStatement.setString(4, "Demande de test pour JUnit / Test modif avis_benevole"); - insertStatement.setString(5, "Avis_benevole à modifier"); + insertStatement.setInt(2, utilisateurID); + insertStatement.setInt(3, benevoleID); + insertStatement.setString(4, desc1); insertStatement.executeUpdate(); - // Récupération de l'ID généré pour pouvoir le supprimer après ResultSet generatedKeys = insertStatement.getGeneratedKeys(); if (generatedKeys.next()) { demandeID = generatedKeys.getInt(1); } - // on met à jour la table avec la nouvelle demande rajoutée - // on utilise une méthode détournée pour accéder à la méthode private 'loadAnciennesDemandes()' + // Insertion des autres demandes + insertStatement.setString(4, desc2); + insertStatement.executeUpdate(); + insertStatement.setString(4, desc3); + insertStatement.executeUpdate(); + + // Charger les demandes dans la table Method loadDemandesFinaliseesMethod = BenevoleDemandesFinaliseesPage.class.getDeclaredMethod("loadDemandesFinalisees"); - loadDemandesFinaliseesMethod.setAccessible(true); // permet d'appeler la méthode même si elle est private - loadDemandesFinaliseesMethod.invoke(benevoleDemandesFinaliseesPage); // on l'appele + loadDemandesFinaliseesMethod.setAccessible(true); + loadDemandesFinaliseesMethod.invoke(page); - //test de modifierAvis(); on sélectionne la dernière ligne de la table car elle correspond à la demande test - int lastRow = benevoleDemandesFinaliseesPage.getTable().getRowCount()-1; - benevoleDemandesFinaliseesPage.getTable().setRowSelectionInterval(lastRow, lastRow); + // Vérifier que les descriptions sont bien chargées + int lastRow = page.getTable().getRowCount() - 1; + String desc_actual = (String) page.getTableModel().getValueAt(lastRow-2, 1) + + (String) page.getTableModel().getValueAt(lastRow-1, 1) + + (String) page.getTableModel().getValueAt(lastRow, 1); - // idem que pour loadAnciennesDemandes() comme modifierAvis() est aussi en private - Method modifierAvisMethod = BenevoleDemandesFinaliseesPage.class.getDeclaredMethod("modifierAvis"); - modifierAvisMethod.setAccessible(true); // permet d'appeler la méthode même si elle est private - modifierAvisMethod.invoke(benevoleDemandesFinaliseesPage); // on l'appele + String desc_expected = desc1 + desc2 + desc3; + assertEquals(desc_expected, desc_actual, "Les descriptions doivent correspondre"); - // on attend un moment pour que la base de données se mette à jour - Thread.sleep(1000); - - String sql = "SELECT avis_benevole FROM demandes_aide WHERE id = ?"; - PreparedStatement statement = connection.prepareStatement(sql); - statement.setInt(1, demandeID); - ResultSet resultSet = statement.executeQuery(); - - String currentAvis = ""; - if (resultSet.next()) { - currentAvis = resultSet.getString("avis_benevole"); + // Nettoyage des données de test + for (int i = 0; i < 3; i++) { + String deleteSQL = "DELETE FROM demandes_aide WHERE id = ?"; + PreparedStatement deleteStatement = connection.prepareStatement(deleteSQL); + deleteStatement.setInt(1, demandeID + i); + deleteStatement.executeUpdate(); } - assertNotEquals("Avis_benevole à modifier", currentAvis, "L'avis n'a pas été modifié."); - - // Suppression de la demande de test après le test de prendreDemande() - String deleteSQL = "DELETE FROM demandes_aide WHERE id = ?"; - PreparedStatement deleteStatement = connection.prepareStatement(deleteSQL); - deleteStatement.setInt(1, demandeID); - deleteStatement.executeUpdate(); - } catch (InterruptedException | InvocationTargetException | NoSuchMethodException | IllegalAccessException | - SQLException e) { + } catch (SQLException | NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { throw new RuntimeException(e); } } -} + @Test + void testModifierAvisForFinalizedRequest() { + try (Connection connection = DatabaseConnection.getConnection()) { + // Créer une demande finalisée de test + String insertSQL = "INSERT INTO demandes_aide (statut, utilisateur_id, benevole_id, description, avis_benevole) VALUES (?, ?, ?, ?, ?)"; + PreparedStatement insertStatement = connection.prepareStatement(insertSQL, PreparedStatement.RETURN_GENERATED_KEYS); + insertStatement.setString(1, "finalisée"); + insertStatement.setInt(2, utilisateurID); + insertStatement.setInt(3, benevoleID); + insertStatement.setString(4, "Demande de test pour modification d'avis"); + insertStatement.setString(5, "Avis initial"); + insertStatement.executeUpdate(); + + ResultSet generatedKeys = insertStatement.getGeneratedKeys(); + if (generatedKeys.next()) { + demandeID = generatedKeys.getInt(1); + } + + // Charger la demande dans la table + Method loadDemandesFinaliseesMethod = BenevoleDemandesFinaliseesPage.class.getDeclaredMethod("loadDemandesFinalisees"); + loadDemandesFinaliseesMethod.setAccessible(true); + loadDemandesFinaliseesMethod.invoke(page); + + // Sélectionner la demande + int lastRow = page.getTable().getRowCount() - 1; + page.getTable().setRowSelectionInterval(lastRow, lastRow); + + // Modifier l'avis + Method modifierAvisMethod = BenevoleDemandesFinaliseesPage.class.getDeclaredMethod("modifierAvis"); + modifierAvisMethod.setAccessible(true); + modifierAvisMethod.invoke(page); + + Thread.sleep(1000); // Attendre la mise à jour + + // Vérifier la modification + String checkSQL = "SELECT avis_benevole FROM demandes_aide WHERE id = ?"; + PreparedStatement checkStatement = connection.prepareStatement(checkSQL); + checkStatement.setInt(1, demandeID); + ResultSet resultSet = checkStatement.executeQuery(); + + assertTrue(resultSet.next(), "La demande doit exister"); + String nouvelAvis = resultSet.getString("avis_benevole"); + assertNotEquals("Avis initial", nouvelAvis, "L'avis doit être modifié"); + + // Nettoyage + String deleteSQL = "DELETE FROM demandes_aide WHERE id = ?"; + PreparedStatement deleteStatement = connection.prepareStatement(deleteSQL); + deleteStatement.setInt(1, demandeID); + deleteStatement.executeUpdate(); + + } catch (SQLException | NoSuchMethodException | IllegalAccessException | InvocationTargetException | InterruptedException e) { + throw new RuntimeException(e); + } + } +} \ No newline at end of file