Actualiser src/test/java/controller/ValidateurTest.java
This commit is contained in:
부모
2e41f1185e
커밋
26dfba125e
1개의 변경된 파일과 161개의 추가작업 그리고 8개의 파일을 삭제
|
@ -1,28 +1,181 @@
|
||||||
package controller;
|
package controller;
|
||||||
|
|
||||||
|
import database.DatabaseConnection;
|
||||||
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 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.*;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
class ValidateurTest {
|
class ValidateurTest {
|
||||||
|
|
||||||
private Validateur validateur;
|
private Validateur validateur;
|
||||||
|
private JTable table;
|
||||||
|
private DefaultTableModel tableModel;
|
||||||
|
private JButton validerButton;
|
||||||
|
private JButton rejeterButton;
|
||||||
|
private JButton retourButton;
|
||||||
|
private int utilisateurId = 1; // Example user ID for testing
|
||||||
|
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
void setUp() {
|
void setUp() throws NoSuchFieldException, IllegalAccessException {
|
||||||
validateur = new Validateur(3); // Utilisateur ID fictif
|
validateur = new Validateur(utilisateurId);
|
||||||
|
|
||||||
|
// Access private fields using reflection
|
||||||
|
table = (JTable) getField("table");
|
||||||
|
tableModel = (DefaultTableModel) getField("tableModel");
|
||||||
|
validerButton = (JButton) getField("validerButton");
|
||||||
|
rejeterButton = (JButton) getField("rejeterButton");
|
||||||
|
retourButton = (JButton) getField("retourButton");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Helper method to access private fields
|
||||||
|
private Object getField(String fieldName) throws NoSuchFieldException, IllegalAccessException {
|
||||||
|
Field field = Validateur.class.getDeclaredField(fieldName);
|
||||||
|
field.setAccessible(true);
|
||||||
|
return field.get(validateur);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testValidateurNotNull() {
|
void testLoadDemandesEnAttente() throws SQLException {
|
||||||
// Vérifier si la page du validateur est bien créée
|
// Insert a test pending request
|
||||||
assertNotNull(validateur);
|
int demandeId;
|
||||||
|
try (Connection connection = DatabaseConnection.getConnection()) {
|
||||||
|
String insertSQL = "INSERT INTO demandes_aide (description, statut) VALUES (?, 'soumise')";
|
||||||
|
PreparedStatement insertStatement = connection.prepareStatement(insertSQL, PreparedStatement.RETURN_GENERATED_KEYS);
|
||||||
|
insertStatement.setString(1, "Pending request for test");
|
||||||
|
insertStatement.executeUpdate();
|
||||||
|
|
||||||
|
ResultSet generatedKeys = insertStatement.getGeneratedKeys();
|
||||||
|
generatedKeys.next();
|
||||||
|
demandeId = generatedKeys.getInt(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Invoke loadDemandesEnAttente and verify the request appears in the table
|
||||||
|
Method loadDemandesEnAttenteMethod = Validateur.class.getDeclaredMethod("loadDemandesEnAttente");
|
||||||
|
loadDemandesEnAttenteMethod.setAccessible(true);
|
||||||
|
loadDemandesEnAttenteMethod.invoke(validateur);
|
||||||
|
|
||||||
|
boolean found = false;
|
||||||
|
for (int i = 0; i < tableModel.getRowCount(); i++) {
|
||||||
|
if ((int) tableModel.getValueAt(i, 0) == demandeId) {
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assertTrue(found, "The pending request should be loaded in the table.");
|
||||||
|
|
||||||
|
// Clean up test data
|
||||||
|
try (Connection connection = DatabaseConnection.getConnection()) {
|
||||||
|
String deleteSQL = "DELETE FROM demandes_aide WHERE id = ?";
|
||||||
|
PreparedStatement deleteStatement = connection.prepareStatement(deleteSQL);
|
||||||
|
deleteStatement.setInt(1, demandeId);
|
||||||
|
deleteStatement.executeUpdate();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testDemandeStatutModification() {
|
void testValiderDemande() throws SQLException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {
|
||||||
// Tester si le changement de statut d'une demande fonctionne correctement
|
// Insert a test pending request
|
||||||
// assertDoesNotThrow(() -> validateur.modifierStatutDemande(1, "validée")); // ID de la demande fictif
|
int demandeId;
|
||||||
|
try (Connection connection = DatabaseConnection.getConnection()) {
|
||||||
|
String insertSQL = "INSERT INTO demandes_aide (description, statut) VALUES (?, 'soumise')";
|
||||||
|
PreparedStatement insertStatement = connection.prepareStatement(insertSQL, PreparedStatement.RETURN_GENERATED_KEYS);
|
||||||
|
insertStatement.setString(1, "Pending request to validate");
|
||||||
|
insertStatement.executeUpdate();
|
||||||
|
|
||||||
|
ResultSet generatedKeys = insertStatement.getGeneratedKeys();
|
||||||
|
generatedKeys.next();
|
||||||
|
demandeId = generatedKeys.getInt(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Select the row and invoke validerDemande method
|
||||||
|
tableModel.addRow(new Object[]{demandeId, "Pending request to validate", "soumise"});
|
||||||
|
table.setRowSelectionInterval(0, 0);
|
||||||
|
|
||||||
|
Method validerDemandeMethod = Validateur.class.getDeclaredMethod("validerDemande");
|
||||||
|
validerDemandeMethod.setAccessible(true);
|
||||||
|
validerDemandeMethod.invoke(validateur);
|
||||||
|
|
||||||
|
// Verify that the request status was updated in the database
|
||||||
|
try (Connection connection = DatabaseConnection.getConnection()) {
|
||||||
|
String sql = "SELECT statut FROM demandes_aide WHERE id = ?";
|
||||||
|
PreparedStatement statement = connection.prepareStatement(sql);
|
||||||
|
statement.setInt(1, demandeId);
|
||||||
|
ResultSet resultSet = statement.executeQuery();
|
||||||
|
|
||||||
|
assertTrue(resultSet.next(), "The request should exist in the database.");
|
||||||
|
assertEquals("acceptée", resultSet.getString("statut"), "The request status should be 'acceptée'.");
|
||||||
|
|
||||||
|
// Clean up test data
|
||||||
|
String deleteSQL = "DELETE FROM demandes_aide WHERE id = ?";
|
||||||
|
PreparedStatement deleteStatement = connection.prepareStatement(deleteSQL);
|
||||||
|
deleteStatement.setInt(1, demandeId);
|
||||||
|
deleteStatement.executeUpdate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testRejeterDemande() throws SQLException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {
|
||||||
|
// Insert a test pending request
|
||||||
|
int demandeId;
|
||||||
|
try (Connection connection = DatabaseConnection.getConnection()) {
|
||||||
|
String insertSQL = "INSERT INTO demandes_aide (description, statut) VALUES (?, 'soumise')";
|
||||||
|
PreparedStatement insertStatement = connection.prepareStatement(insertSQL, PreparedStatement.RETURN_GENERATED_KEYS);
|
||||||
|
insertStatement.setString(1, "Pending request to reject");
|
||||||
|
insertStatement.executeUpdate();
|
||||||
|
|
||||||
|
ResultSet generatedKeys = insertStatement.getGeneratedKeys();
|
||||||
|
generatedKeys.next();
|
||||||
|
demandeId = generatedKeys.getInt(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Select the row and invoke rejeterDemande method
|
||||||
|
tableModel.addRow(new Object[]{demandeId, "Pending request to reject", "soumise"});
|
||||||
|
table.setRowSelectionInterval(0, 0);
|
||||||
|
|
||||||
|
// Simulate entering a rejection reason
|
||||||
|
String motifRejet = "Test motif de rejet";
|
||||||
|
JOptionPane.showMessageDialog(validateur, motifRejet); // Simulate the input dialog
|
||||||
|
|
||||||
|
Method rejeterDemandeMethod = Validateur.class.getDeclaredMethod("rejeterDemande");
|
||||||
|
rejeterDemandeMethod.setAccessible(true);
|
||||||
|
rejeterDemandeMethod.invoke(validateur);
|
||||||
|
|
||||||
|
// Verify that the request status and rejection reason were updated in the database
|
||||||
|
try (Connection connection = DatabaseConnection.getConnection()) {
|
||||||
|
String sql = "SELECT statut, motif_rejet FROM demandes_aide WHERE id = ?";
|
||||||
|
PreparedStatement statement = connection.prepareStatement(sql);
|
||||||
|
statement.setInt(1, demandeId);
|
||||||
|
ResultSet resultSet = statement.executeQuery();
|
||||||
|
|
||||||
|
assertTrue(resultSet.next(), "The request should exist in the database.");
|
||||||
|
assertEquals("rejetée", resultSet.getString("statut"), "The request status should be 'rejetée'.");
|
||||||
|
assertEquals(motifRejet, resultSet.getString("motif_rejet"), "The rejection reason should be saved in the database.");
|
||||||
|
|
||||||
|
// Clean up test data
|
||||||
|
String deleteSQL = "DELETE FROM demandes_aide WHERE id = ?";
|
||||||
|
PreparedStatement deleteStatement = connection.prepareStatement(deleteSQL);
|
||||||
|
deleteStatement.setInt(1, demandeId);
|
||||||
|
deleteStatement.executeUpdate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testRetourButtonAction() {
|
||||||
|
// Simulate clicking the "Retour à la connexion" button
|
||||||
|
retourButton.doClick();
|
||||||
|
|
||||||
|
// Check that the current frame is disposed
|
||||||
|
assertFalse(validateur.isVisible(), "Validateur page should be closed after clicking 'Retour à la connexion'.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
불러오는 중…
Reference in a new issue