diff --git a/src/main/java/controller/BenevoleDemandesPage.java b/src/main/java/controller/BenevoleDemandesPage.java index 9423f28..fca54c7 100644 --- a/src/main/java/controller/BenevoleDemandesPage.java +++ b/src/main/java/controller/BenevoleDemandesPage.java @@ -65,6 +65,13 @@ public class BenevoleDemandesPage extends JFrame { loadDemandesAcceptees(); } + //Méthodes de type get() + public JTable getTable() {return this.table;} + public DefaultTableModel getTableModel() {return this.tableModel;} + public JButton getPrendreDemandeButton() {return this.prendreDemandeButton;} + public JButton getRetourBenevoleButton() {return this.retourBenevoleButton;} + public int getID() {return this.utilisateurId;} + // Méthode pour charger les demandes acceptées private void loadDemandesAcceptees() { try (Connection connection = DatabaseConnection.getConnection()) { diff --git a/src/main/java/controller/LoginPage.java b/src/main/java/controller/LoginPage.java index fc555f4..b7010e3 100644 --- a/src/main/java/controller/LoginPage.java +++ b/src/main/java/controller/LoginPage.java @@ -11,9 +11,9 @@ import java.sql.ResultSet; import java.sql.SQLException; public class LoginPage extends JFrame { - public JTextField emailField; - public JButton loginButton; - public JButton createAccountButton; + private JTextField emailField; + private JButton loginButton; + private JButton createAccountButton; public LoginPage() { setTitle("Page de connexion"); @@ -53,7 +53,14 @@ public class LoginPage extends JFrame { } }); } - // suprime de main menu + + //Méthodes de type get() + public JTextField getEmailField() {return this.emailField;} + public JButton getLoginButton() {return this.loginButton;} + public JButton getCreateAccountButton() {return this.createAccountButton;} + + + // suprime de main menu // Méthode pour gérer la connexion de l'utilisateur private void loginUser() { String email = emailField.getText(); diff --git a/src/test/java/controller/BenevoleDemandesPageTest.java b/src/test/java/controller/BenevoleDemandesPageTest.java index c09bdc1..9a168c1 100644 --- a/src/test/java/controller/BenevoleDemandesPageTest.java +++ b/src/test/java/controller/BenevoleDemandesPageTest.java @@ -3,26 +3,132 @@ package controller; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import javax.swing.*; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.sql.SQLException; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; + +import database.DatabaseConnection; + import static org.junit.jupiter.api.Assertions.*; class BenevoleDemandesPageTest { private BenevoleDemandesPage benevoleDemandesPage; + private JTable table; + private int benevoleID = 2; //pour tester on prend arbitrairement un utilisateur qui est un bénévole + private int demandeID; //on crée manuellment une demande pour les tests (on la supprime après) @BeforeEach - void setUp() { - benevoleDemandesPage = new BenevoleDemandesPage(1); // Utilisateur ID fictif + void setUp() throws SQLException { + //on crée la page des demandes acceptés + benevoleDemandesPage = new BenevoleDemandesPage(benevoleID); } @Test - void testBenevoleDemandesPageNotNull() { + void testBenevoleDemandesPage() { // Vérifier si la page des demandes de bénévoles est bien créée assertNotNull(benevoleDemandesPage); + assertEquals(benevoleID,benevoleDemandesPage.getID(),"id pas correct"); } @Test void testListeDemandesNonVide() { - // Vérifie si la liste des demandes est initialisée (ou vide, selon les données dans la base) - // assertNotNull(benevoleDemandesPage.getTable()); + try { + // on utilise une méthode détournée pour accéder à la méthode private 'loadDemandesAcceptees()' + Method loadDemandesAccepteesMethod = BenevoleDemandesPage.class.getDeclaredMethod("loadDemandesAcceptees"); + loadDemandesAccepteesMethod.setAccessible(true); // permet d'appeler la méthode même si elle est private + loadDemandesAccepteesMethod.invoke(benevoleDemandesPage); // on l'appele + + // Vérifie si la liste des demandes a bien été chargée + assertNotNull(benevoleDemandesPage.getTable()); + assertNotNull(benevoleDemandesPage.getTableModel()); + } catch (InvocationTargetException | NoSuchMethodException | IllegalAccessException e) { + throw new RuntimeException(e); + } } + + @Test + void testPrendreDemande() throws SQLException { + //on crée une demande avec le statut 'acceptée' pour tester la méthode prendreDemande() + try (Connection connection = DatabaseConnection.getConnection()) { + 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, "acceptée"); + insertStatement.setNull(2, java.sql.Types.INTEGER); // Aucun utilisateur affecté + insertStatement.setNull(3, java.sql.Types.INTEGER); // Aucun bénévole affecté initialement + insertStatement.setString(4, "Demande de test pour JUnit"); + 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 'loadDemandesAcceptees()' + Method loadDemandesAccepteesMethod = BenevoleDemandesPage.class.getDeclaredMethod("loadDemandesAcceptees"); + loadDemandesAccepteesMethod.setAccessible(true); // permet d'appeler la méthode même si elle est private + loadDemandesAccepteesMethod.invoke(benevoleDemandesPage); // on l'appele + + //test de prendreDemande(); on sélectionne la dernière ligne de la table car elle correspond à la demande test + int lastRow = benevoleDemandesPage.getTable().getRowCount()-1; + benevoleDemandesPage.getTable().setRowSelectionInterval(lastRow, lastRow); + + // idem que pour loadDemandesAcceptees() comme prendreDemande() est aussi en private + Method prendreDemandeMethod = BenevoleDemandesPage.class.getDeclaredMethod("prendreDemande"); + prendreDemandeMethod.setAccessible(true); // permet d'appeler la méthode même si elle est private + prendreDemandeMethod.invoke(benevoleDemandesPage); // on l'appele + + // on attend un moment pour que la base de données se mette à jour + Thread.sleep(1000); + + String sql = "SELECT statut, benevole_id FROM demandes_aide WHERE id = ?"; + PreparedStatement statement = connection.prepareStatement(sql); + statement.setInt(1, demandeID); + ResultSet resultSet = statement.executeQuery(); + + String currentStatus = ""; + int currentBenevole = -1; + if (resultSet.next()) { + currentStatus = resultSet.getString("statut"); + currentBenevole = resultSet.getInt("benevole_id"); + } + + assertEquals("en cours", currentStatus, "Le statut doit être 'en cours'."); + assertEquals(benevoleID, currentBenevole, "L'id du bénévole n'a pas correctement été attribué."); + + // 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 e) { + throw new RuntimeException(e); + } + } + + //ce test repose sur le fait que l'excution de la méthode prendreDemande() en ayant sélectionnée une ligne entraine la disparition de la ligne + //donc si le nombre de ligne n'a pas changé tout est bon + @Test + void testPrendreDemandeNonSelectionnee() { + // Désélectionner toute ligne pour simuler l'absence de sélection + benevoleDemandesPage.getTable().clearSelection(); + + // on enregistre l'état avant l'appel de la méthode + int rowCountBefore = benevoleDemandesPage.getTableModel().getRowCount(); + + //test de prendreDemande() sans rien sélectionner + JButton prendreButton = benevoleDemandesPage.getPrendreDemandeButton(); + prendreButton.doClick(); + + // on vérifier que l'état de la table n'a pas changé (la table n'a pas été modifiée) + int rowCountAfter = benevoleDemandesPage.getTableModel().getRowCount(); + assertEquals(rowCountBefore, rowCountAfter, "La table ne doit pas être modifiée si aucune demande n'est sélectionnée."); + } + } diff --git a/src/test/java/controller/LoginPageTest.java b/src/test/java/controller/LoginPageTest.java index e329d7c..fdbc9e7 100644 --- a/src/test/java/controller/LoginPageTest.java +++ b/src/test/java/controller/LoginPageTest.java @@ -24,8 +24,8 @@ class LoginPageTest { @Test void emailFieldIsEmpty() { // Simule un champ email vide et vérifie le message d'erreur - loginPage.emailField.setText(""); // Simule que l'email est vide - JButton loginButton = loginPage.loginButton; + loginPage.getEmailField().setText(""); // Simule que l'email est vide + JButton loginButton = loginPage.getLoginButton(); loginButton.doClick(); // Simule un clic sur le bouton "Se connecter" // Vérifie que la boîte de dialogue pour email vide s'affiche @@ -36,8 +36,8 @@ class LoginPageTest { @Test void emailNotFound() { // Simule un email non existant - loginPage.emailField.setText("notfound@test.com"); // Simule un email qui n'existe pas - JButton loginButton = loginPage.loginButton; + loginPage.getEmailField().setText("notfound@test.com"); // Simule un email qui n'existe pas + JButton loginButton = loginPage.getLoginButton(); loginButton.doClick(); // Simule un clic sur le bouton "Se connecter" // Vérifie que la boîte de dialogue pour email non trouvé s'affiche @@ -48,7 +48,7 @@ class LoginPageTest { @Test void createAccountButtonWorks() { // Vérifie si le bouton "Créer un compte" redirige vers la page de création - JButton createAccountButton = loginPage.createAccountButton; + JButton createAccountButton = loginPage.getCreateAccountButton(); createAccountButton.doClick(); // Simule un clic sur le bouton "Créer un compte" // Vérifie que la page de création de compte est ouverte