BenevoleDemandesPageTest complété

This commit is contained in:
skferrei 2024-11-11 18:59:42 +01:00
parent da793d64f4
commit eba4b31427
4 changed files with 134 additions and 14 deletions

View file

@ -65,6 +65,13 @@ public class BenevoleDemandesPage extends JFrame {
loadDemandesAcceptees(); 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 // Méthode pour charger les demandes acceptées
private void loadDemandesAcceptees() { private void loadDemandesAcceptees() {
try (Connection connection = DatabaseConnection.getConnection()) { try (Connection connection = DatabaseConnection.getConnection()) {

View file

@ -11,9 +11,9 @@ import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
public class LoginPage extends JFrame { public class LoginPage extends JFrame {
public JTextField emailField; private JTextField emailField;
public JButton loginButton; private JButton loginButton;
public JButton createAccountButton; private JButton createAccountButton;
public LoginPage() { public LoginPage() {
setTitle("Page de connexion"); 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 // Méthode pour gérer la connexion de l'utilisateur
private void loginUser() { private void loginUser() {
String email = emailField.getText(); String email = emailField.getText();

View file

@ -3,26 +3,132 @@ package controller;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; 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.*; import static org.junit.jupiter.api.Assertions.*;
class BenevoleDemandesPageTest { class BenevoleDemandesPageTest {
private BenevoleDemandesPage benevoleDemandesPage; 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 @BeforeEach
void setUp() { void setUp() throws SQLException {
benevoleDemandesPage = new BenevoleDemandesPage(1); // Utilisateur ID fictif //on crée la page des demandes acceptés
benevoleDemandesPage = new BenevoleDemandesPage(benevoleID);
} }
@Test @Test
void testBenevoleDemandesPageNotNull() { void testBenevoleDemandesPage() {
// Vérifier si la page des demandes de bénévoles est bien créée // Vérifier si la page des demandes de bénévoles est bien créée
assertNotNull(benevoleDemandesPage); assertNotNull(benevoleDemandesPage);
assertEquals(benevoleID,benevoleDemandesPage.getID(),"id pas correct");
} }
@Test @Test
void testListeDemandesNonVide() { void testListeDemandesNonVide() {
// Vérifie si la liste des demandes est initialisée (ou vide, selon les données dans la base) try {
// assertNotNull(benevoleDemandesPage.getTable()); // 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.");
}
} }

View file

@ -24,8 +24,8 @@ class LoginPageTest {
@Test @Test
void emailFieldIsEmpty() { void emailFieldIsEmpty() {
// Simule un champ email vide et vérifie le message d'erreur // Simule un champ email vide et vérifie le message d'erreur
loginPage.emailField.setText(""); // Simule que l'email est vide loginPage.getEmailField().setText(""); // Simule que l'email est vide
JButton loginButton = loginPage.loginButton; JButton loginButton = loginPage.getLoginButton();
loginButton.doClick(); // Simule un clic sur le bouton "Se connecter" loginButton.doClick(); // Simule un clic sur le bouton "Se connecter"
// Vérifie que la boîte de dialogue pour email vide s'affiche // Vérifie que la boîte de dialogue pour email vide s'affiche
@ -36,8 +36,8 @@ class LoginPageTest {
@Test @Test
void emailNotFound() { void emailNotFound() {
// Simule un email non existant // Simule un email non existant
loginPage.emailField.setText("notfound@test.com"); // Simule un email qui n'existe pas loginPage.getEmailField().setText("notfound@test.com"); // Simule un email qui n'existe pas
JButton loginButton = loginPage.loginButton; JButton loginButton = loginPage.getLoginButton();
loginButton.doClick(); // Simule un clic sur le bouton "Se connecter" loginButton.doClick(); // Simule un clic sur le bouton "Se connecter"
// Vérifie que la boîte de dialogue pour email non trouvé s'affiche // Vérifie que la boîte de dialogue pour email non trouvé s'affiche
@ -48,7 +48,7 @@ class LoginPageTest {
@Test @Test
void createAccountButtonWorks() { void createAccountButtonWorks() {
// Vérifie si le bouton "Créer un compte" redirige vers la page de création // 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" createAccountButton.doClick(); // Simule un clic sur le bouton "Créer un compte"
// Vérifie que la page de création de compte est ouverte // Vérifie que la page de création de compte est ouverte