151 lines
7.5 KiB
Java
151 lines
7.5 KiB
Java
package controller;
|
|
|
|
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.Field;
|
|
import java.lang.reflect.InvocationTargetException;
|
|
import java.lang.reflect.Method;
|
|
import java.sql.Connection;
|
|
import java.sql.PreparedStatement;
|
|
import java.sql.ResultSet;
|
|
import java.sql.SQLException;
|
|
|
|
import static org.junit.jupiter.api.Assertions.*;
|
|
|
|
class ValidateurTest {
|
|
|
|
private Validateur validateur;
|
|
private int utilisateurId = 1; // utilisateur arbitraire qui va créer les demandes de test
|
|
private int demandeID; //on crée manuellment une demande pour les tests (on la supprime après)
|
|
|
|
@BeforeEach
|
|
void setUp() {
|
|
validateur = new Validateur(utilisateurId);
|
|
}
|
|
|
|
@Test
|
|
void testValiderDemande() throws SQLException {
|
|
//on crée une demande avec le statut 'soumise' pour tester la méthode validerDemande()
|
|
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, "soumise");
|
|
insertStatement.setNull(2, utilisateurId);
|
|
insertStatement.setNull(3, java.sql.Types.INTEGER); // Aucun bénévole affecté initialement
|
|
insertStatement.setString(4, "Demande de test pour JUnit / Test validation");
|
|
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 'loadDemandesEnAttente()'
|
|
Method loadDemandesEnAttenteMethod = Validateur.class.getDeclaredMethod("loadDemandesEnAttente");
|
|
loadDemandesEnAttenteMethod.setAccessible(true); // permet d'appeler la méthode même si elle est private
|
|
loadDemandesEnAttenteMethod.invoke(validateur); // on l'appele
|
|
|
|
//test de validerDemande(); on sélectionne la dernière ligne de la table car elle correspond à la demande test
|
|
int lastRow = validateur.getTable().getRowCount()-1;
|
|
validateur.getTable().setRowSelectionInterval(lastRow, lastRow);
|
|
|
|
// idem que pour loadDemandesEnAttente() comme rejeterDemande() est aussi en private
|
|
Method rejeterDemandeMethod = Validateur.class.getDeclaredMethod("validerDemande");
|
|
rejeterDemandeMethod.setAccessible(true); // permet d'appeler la méthode même si elle est private
|
|
rejeterDemandeMethod.invoke(validateur); // 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);
|
|
statement.setInt(1, demandeID);
|
|
ResultSet resultSet = statement.executeQuery();
|
|
|
|
String currentStatus = "";
|
|
if (resultSet.next()) {
|
|
currentStatus = resultSet.getString("statut");
|
|
}
|
|
|
|
assertEquals("acceptée", currentStatus, "Le statut doit être 'accepté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 testRejeterDemande() {
|
|
//on crée une demande avec le statut 'soumise' pour tester la méthode rejeterDemande()
|
|
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, "soumise");
|
|
insertStatement.setInt(2, utilisateurId);
|
|
insertStatement.setNull(3, java.sql.Types.INTEGER); // Aucun bénévole affecté initialement
|
|
insertStatement.setString(4, "Demande de test pour JUnit / Test rejet");
|
|
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 'loadDemandesEnAttente()'
|
|
Method loadDemandesEnAttenteMethod = Validateur.class.getDeclaredMethod("loadDemandesEnAttente");
|
|
loadDemandesEnAttenteMethod.setAccessible(true); // permet d'appeler la méthode même si elle est private
|
|
loadDemandesEnAttenteMethod.invoke(validateur); // on l'appele
|
|
|
|
//test de rejeterDemande(); on sélectionne la dernière ligne de la table car elle correspond à la demande test
|
|
int lastRow = validateur.getTable().getRowCount()-1;
|
|
validateur.getTable().setRowSelectionInterval(lastRow, lastRow);
|
|
|
|
// idem que pour loadDemandesEnAttente() comme rejeterDemande() est aussi en private
|
|
Method rejeterDemandeMethod = Validateur.class.getDeclaredMethod("rejeterDemande");
|
|
rejeterDemandeMethod.setAccessible(true); // permet d'appeler la méthode même si elle est private
|
|
rejeterDemandeMethod.invoke(validateur); // 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);
|
|
statement.setInt(1, demandeID);
|
|
ResultSet resultSet = statement.executeQuery();
|
|
|
|
String currentStatus = "";
|
|
if (resultSet.next()) {
|
|
currentStatus = resultSet.getString("statut");
|
|
}
|
|
|
|
assertEquals("rejetée", currentStatus, "Le statut doit être 'rejeté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);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|