modifs 29/11
This commit is contained in:
parent
a383953883
commit
8efec4e48a
3 changed files with 184 additions and 30 deletions
|
@ -65,6 +65,13 @@ public class BenevoleDemandesEncoursPage extends JFrame {
|
||||||
loadDemandesEnCours();
|
loadDemandesEnCours();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Méthodes de type get()
|
||||||
|
public JTable getTable() {return this.table;}
|
||||||
|
public DefaultTableModel getTableModel() {return this.tableModel;}
|
||||||
|
public JButton getFinaliserDemandeButton() {return this.finaliserDemandeButton;}
|
||||||
|
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 loadDemandesEnCours() {
|
private void loadDemandesEnCours() {
|
||||||
try (Connection connection = DatabaseConnection.getConnection()) {
|
try (Connection connection = DatabaseConnection.getConnection()) {
|
||||||
|
|
|
@ -2,53 +2,192 @@
|
||||||
|
|
||||||
package controller;
|
package controller;
|
||||||
import database.DatabaseConnection;
|
import database.DatabaseConnection;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
|
||||||
import javax.swing.*;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
import java.sql.Connection;
|
import java.sql.Connection;
|
||||||
import java.sql.PreparedStatement;
|
import java.sql.PreparedStatement;
|
||||||
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.*;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
class BenevoleDemandesEncoursPageTest {
|
class BenevoleDemandesEncoursPageTest {
|
||||||
private BenevoleDemandesEncoursPage page;
|
private BenevoleDemandesEncoursPage page;
|
||||||
private int utilisateurId = 1; // ID utilisateur fictif pour le test
|
private int utilisateurID = 1; // ID utilisateur arbitraire pour le test
|
||||||
private int demandeId = 1; // ID de demande fictif pour le test
|
private int benevoleID = 2;
|
||||||
|
private int demandeID; // ID de demande fictif pour le test
|
||||||
|
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
void setUp() throws SQLException {
|
void setUp() throws SQLException {
|
||||||
try (Connection connection = DatabaseConnection.getConnection()) {
|
|
||||||
// Création d'un utilisateur minimal pour éviter les erreurs de clé étrangère
|
|
||||||
String utilisateurInsertSQL = "INSERT IGNORE INTO utilisateur (id) VALUES (?)";
|
|
||||||
PreparedStatement utilisateurStatement = connection.prepareStatement(utilisateurInsertSQL);
|
|
||||||
utilisateurStatement.setInt(1, utilisateurId);
|
|
||||||
utilisateurStatement.executeUpdate();
|
|
||||||
|
|
||||||
// Insérer une demande liée à cet utilisateur pour le test
|
|
||||||
String demandeInsertSQL = "INSERT INTO demandes_aide (id, description, statut, benevole_id) VALUES (?, ?, ?, ?)";
|
|
||||||
PreparedStatement demandeStatement = connection.prepareStatement(demandeInsertSQL);
|
|
||||||
demandeStatement.setInt(1, demandeId);
|
|
||||||
demandeStatement.setString(2, "Test demande description");
|
|
||||||
demandeStatement.setString(3, "en cours");
|
|
||||||
demandeStatement.setInt(4, utilisateurId);
|
|
||||||
demandeStatement.executeUpdate();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Initialiser la page de test
|
// Initialiser la page de test
|
||||||
page = new BenevoleDemandesEncoursPage(utilisateurId);
|
page = new BenevoleDemandesEncoursPage(benevoleID);
|
||||||
}
|
}
|
||||||
@Test
|
|
||||||
private void finaliserDemande(int demandeId) {
|
@Test
|
||||||
|
void testFinaliserDemande() {
|
||||||
|
//on crée une demande avec le statut 'en cours' pour tester la méthode finaliserDemande()
|
||||||
try (Connection connection = DatabaseConnection.getConnection()) {
|
try (Connection connection = DatabaseConnection.getConnection()) {
|
||||||
// Mettre à jour le statut de la demande
|
String insertSQL = "INSERT INTO demandes_aide (statut, utilisateur_id, benevole_id, description) VALUES (?, ?, ?, ?)";
|
||||||
String sql = "UPDATE demandes_aide SET statut = 'finalisée' WHERE id = ?";
|
PreparedStatement insertStatement = connection.prepareStatement(insertSQL, PreparedStatement.RETURN_GENERATED_KEYS);
|
||||||
|
insertStatement.setString(1, "en cours");
|
||||||
|
insertStatement.setInt(2, utilisateurID); // Aucun utilisateur affecté
|
||||||
|
insertStatement.setInt(3, benevoleID); // Aucun bénévole affecté initialement
|
||||||
|
insertStatement.setString(4, "Demande de test pour JUnit / Test finaliserDemande");
|
||||||
|
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 'loadDemandesEnCours()'
|
||||||
|
Method loadDemandesEnCoursMethod = BenevoleDemandesEncoursPage.class.getDeclaredMethod("loadDemandesEnCours");
|
||||||
|
loadDemandesEnCoursMethod.setAccessible(true); // permet d'appeler la méthode même si elle est private
|
||||||
|
loadDemandesEnCoursMethod.invoke(page); // on l'appele
|
||||||
|
|
||||||
|
//test de prendreDemande(); on sélectionne la dernière ligne de la table car elle correspond à la demande test
|
||||||
|
int lastRow = page.getTable().getRowCount()-1;
|
||||||
|
page.getTable().setRowSelectionInterval(lastRow, lastRow);
|
||||||
|
|
||||||
|
// idem que pour loadDemandesEnCours() comme finaliserDemande() est aussi en private
|
||||||
|
Method finaliserDemandeMethod = BenevoleDemandesEncoursPage.class.getDeclaredMethod("finaliserDemande");
|
||||||
|
finaliserDemandeMethod.setAccessible(true); // permet d'appeler la méthode même si elle est private
|
||||||
|
finaliserDemandeMethod.invoke(page); // on l'appele
|
||||||
|
|
||||||
|
// on attend un moment pour que la base de données se mette à jour
|
||||||
|
Thread.sleep(1000);
|
||||||
|
|
||||||
|
String sql = "SELECT statut FROM demandes_aide WHERE id = ?";
|
||||||
PreparedStatement statement = connection.prepareStatement(sql);
|
PreparedStatement statement = connection.prepareStatement(sql);
|
||||||
statement.setInt(1, demandeId);
|
statement.setInt(1, demandeID);
|
||||||
statement.executeUpdate();
|
ResultSet resultSet = statement.executeQuery();
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace(); // Juste un print des erreurs, pas d'affichage de message
|
String currentStatus = "";
|
||||||
|
if (resultSet.next()) {
|
||||||
|
currentStatus = resultSet.getString("statut");
|
||||||
|
}
|
||||||
|
|
||||||
|
assertEquals("finalisée", currentStatus, "Le statut doit être 'finalisée'.");
|
||||||
|
|
||||||
|
// 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) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testLoadDemandesEnCours() {
|
||||||
|
try (Connection connection = DatabaseConnection.getConnection()) {
|
||||||
|
//on crée un utilisateur test pour charger et tester uniquement les demandes de test, pas celles existantes
|
||||||
|
int testUserID = -1;
|
||||||
|
String testUserNom = "Test Mc Testy";
|
||||||
|
String testUserEmail = "test@example.com";
|
||||||
|
String testUserRole = "benevole"; // l'utilisateur de test doit être un bénévole pour pouvoir tester la méthode
|
||||||
|
String insertSQL0 = "INSERT INTO utilisateur (nom, mail, role) VALUES (?, ?, ?)";
|
||||||
|
PreparedStatement insertStatement0 = connection.prepareStatement(insertSQL0, PreparedStatement.RETURN_GENERATED_KEYS);
|
||||||
|
insertStatement0.setString(1, testUserNom);
|
||||||
|
insertStatement0.setString(2, testUserEmail);
|
||||||
|
insertStatement0.setString(3, testUserRole);
|
||||||
|
insertStatement0.executeUpdate();
|
||||||
|
|
||||||
|
// Récupération de l'ID du user de test généré pour pouvoir le supprimer après
|
||||||
|
ResultSet generatedKeysUser = insertStatement0.getGeneratedKeys();
|
||||||
|
if (generatedKeysUser.next()) {
|
||||||
|
testUserID = generatedKeysUser.getInt(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
//on met une première demande test dans la bdd
|
||||||
|
String desc = "Demande de test pour JUnit / Test loadDemandesEnCours";
|
||||||
|
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, "en cours");
|
||||||
|
insertStatement.setInt(2, utilisateurID);
|
||||||
|
insertStatement.setInt(3, benevoleID);
|
||||||
|
insertStatement.setString(4, desc);
|
||||||
|
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 rajoute deux autres demandes pour tester l'affichage
|
||||||
|
String desc2 = "Demande de test pour JUnit / Test loadDemandesEnCours 2";
|
||||||
|
String insertSQL2 = "INSERT INTO demandes_aide (statut, utilisateur_id, benevole_id, description) VALUES (?, ?, ?, ?)";
|
||||||
|
PreparedStatement insertStatement2 = connection.prepareStatement(insertSQL2, PreparedStatement.RETURN_GENERATED_KEYS);
|
||||||
|
insertStatement2.setString(1, "en cours");
|
||||||
|
insertStatement2.setInt(2, utilisateurID);
|
||||||
|
insertStatement2.setInt(3, benevoleID);
|
||||||
|
insertStatement2.setString(4, desc2);
|
||||||
|
insertStatement2.executeUpdate();
|
||||||
|
|
||||||
|
String desc3 = "Demande de test pour JUnit / Test loadDemandesEnCours 2";
|
||||||
|
String insertSQL3 = "INSERT INTO demandes_aide (statut, utilisateur_id, benevole_id, description) VALUES (?, ?, ?, ?)";
|
||||||
|
PreparedStatement insertStatement3 = connection.prepareStatement(insertSQL3, PreparedStatement.RETURN_GENERATED_KEYS);
|
||||||
|
insertStatement3.setString(1, "en cours");
|
||||||
|
insertStatement3.setInt(2, utilisateurID);
|
||||||
|
insertStatement3.setInt(3, benevoleID);
|
||||||
|
insertStatement3.setString(4, desc3);
|
||||||
|
insertStatement3.executeUpdate();
|
||||||
|
|
||||||
|
// on met à jour la table avec les nouvelles demandes rajoutées
|
||||||
|
// on utilise une méthode détournée pour accéder à la méthode private 'loadDemandesEnCours()'
|
||||||
|
Method loadDemandesEnCoursMethod = BenevoleDemandesEncoursPage.class.getDeclaredMethod("loadDemandesEnCours");
|
||||||
|
loadDemandesEnCoursMethod.setAccessible(true); // permet d'appeler la méthode même si elle est private
|
||||||
|
loadDemandesEnCoursMethod.invoke(page); // on l'appele
|
||||||
|
|
||||||
|
//on récupère toutes les descriptions chargées dans la page (chaque ligne uniquement pour la colonne description)
|
||||||
|
//page.getTableModel().getValueAt();
|
||||||
|
|
||||||
|
String sql = "SELECT statut FROM demandes_aide WHERE id = ?";
|
||||||
|
PreparedStatement statement = connection.prepareStatement(sql);
|
||||||
|
statement.setInt(1, demandeID);
|
||||||
|
ResultSet resultSet = statement.executeQuery();
|
||||||
|
|
||||||
|
String currentStatus = "";
|
||||||
|
if (resultSet.next()) {
|
||||||
|
currentStatus = resultSet.getString("statut");
|
||||||
|
}
|
||||||
|
|
||||||
|
String desc_expected = desc + desc2 + desc3;
|
||||||
|
assertEquals(desc_expected, currentStatus, "La description combinée doit être : " + desc_expected);
|
||||||
|
|
||||||
|
// Suppression des demande de test après le test de prendreDemande()
|
||||||
|
//les id se suivent donc on a juste besoin de un seul demandeID
|
||||||
|
String deleteSQL = "DELETE FROM demandes_aide WHERE id = ?";
|
||||||
|
PreparedStatement deleteStatement = connection.prepareStatement(deleteSQL);
|
||||||
|
deleteStatement.setInt(1, demandeID);
|
||||||
|
deleteStatement.executeUpdate();
|
||||||
|
|
||||||
|
String deleteSQL2 = "DELETE FROM demandes_aide WHERE id = ?";
|
||||||
|
PreparedStatement deleteStatement2 = connection.prepareStatement(deleteSQL2);
|
||||||
|
deleteStatement2.setInt(1, (demandeID+1));
|
||||||
|
deleteStatement2.executeUpdate();
|
||||||
|
|
||||||
|
String deleteSQL3 = "DELETE FROM demandes_aide WHERE id = ?";
|
||||||
|
PreparedStatement deleteStatement3 = connection.prepareStatement(deleteSQL3);
|
||||||
|
deleteStatement3.setInt(1, (demandeID+2));
|
||||||
|
deleteStatement3.executeUpdate();
|
||||||
|
|
||||||
|
//on supprime également l'user test
|
||||||
|
String deleteSQLUser = "DELETE FROM utilisateur WHERE id = ?";
|
||||||
|
PreparedStatement deleteStatementUser = connection.prepareStatement(deleteSQLUser);
|
||||||
|
deleteStatementUser.setInt(1, testUserID);
|
||||||
|
deleteStatementUser.executeUpdate();
|
||||||
|
} catch (InvocationTargetException | NoSuchMethodException | IllegalAccessException |
|
||||||
|
SQLException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -51,6 +51,14 @@ class LoginPageTest {
|
||||||
|
|
||||||
// Check if the login page closed after a successful login
|
// Check if the login page closed after a successful login
|
||||||
assertFalse(loginPage.isVisible(), "LoginPage should close after a successful login.");
|
assertFalse(loginPage.isVisible(), "LoginPage should close after a successful login.");
|
||||||
|
|
||||||
|
//delete user after test
|
||||||
|
try (Connection connection = DatabaseConnection.getConnection()) {
|
||||||
|
String deleteSQL = "DELETE FROM utilisateur WHERE email = ?";
|
||||||
|
PreparedStatement deleteStatement = connection.prepareStatement(deleteSQL);
|
||||||
|
deleteStatement.setString(1, email);
|
||||||
|
deleteStatement.executeUpdate();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
Loading…
Reference in a new issue