fini tests unitaires pour Validateur et soumettreDemande

This commit is contained in:
skferrei 2024-11-17 18:10:39 +01:00
parent f91d1b5217
commit 2d2ccafadc
7 changed files with 159 additions and 118 deletions

View file

@ -113,6 +113,16 @@ public class SoumettreDemande extends JFrame {
});
}
//Méthodes de type get()
public JTable getTable() {return this.demandesTable;}
public DefaultTableModel getTableModel() {return this.tableModel;}
public JButton getRetourButton() {return this.retourButton;}
public JButton getSoumettreButton() {return this.soumettreButton;}
public JButton getVoirMotifButton() {return this.voirMotifButton;}
public JButton getVoirAvisButton() {return this.voirAvisButton;}
public JButton getModifierAvisButton() {return this.modifierAvisButton;}
public int getID() {return this.utilisateurId;}
// Méthode pour soumettre une demande
private void soumettreDemande() {
String description = descriptionField.getText();

View file

@ -74,6 +74,14 @@ public class Validateur extends JFrame {
});
}
//Méthodes de type get()
public JTable getTable() {return this.table;}
public DefaultTableModel getTableModel() {return this.tableModel;}
public JButton getValiderButton() {return this.validerButton;}
public JButton getRejeterButton() {return this.rejeterButton;}
public JButton getRetourButton() {return this.retourButton;}
public int getID() {return this.utilisateurId;}
// Méthode pour charger les demandes en attente
private void loadDemandesEnAttente() {
try (Connection connection = DatabaseConnection.getConnection()) {

View file

@ -18,12 +18,11 @@ 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() throws SQLException {
void setUp() {
//on crée la page des demandes acceptés
benevoleDemandesPage = new BenevoleDemandesPage(benevoleID);
}
@ -52,7 +51,7 @@ class BenevoleDemandesPageTest {
}
@Test
void testPrendreDemande() throws SQLException {
void testPrendreDemande() {
//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 (?, ?, ?, ?)";
@ -60,7 +59,7 @@ class BenevoleDemandesPageTest {
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.setString(4, "Demande de test pour JUnit / Test prendreDemande");
insertStatement.executeUpdate();
// Récupération de l'ID généré pour pouvoir le supprimer après
@ -107,7 +106,8 @@ class BenevoleDemandesPageTest {
PreparedStatement deleteStatement = connection.prepareStatement(deleteSQL);
deleteStatement.setInt(1, demandeID);
deleteStatement.executeUpdate();
} catch (InterruptedException | InvocationTargetException | NoSuchMethodException | IllegalAccessException e) {
} catch (InterruptedException | InvocationTargetException | NoSuchMethodException | IllegalAccessException |
SQLException e) {
throw new RuntimeException(e);
}
}

View file

@ -25,7 +25,8 @@ class CreateAccountPageTest {
private JButton createAccountButton;
private JButton retourLoginButton;
/* @BeforeEach
/*
@BeforeEach
void setUp() throws NoSuchFieldException, IllegalAccessException {
createAccountPage = new CreateAccountPage();
@ -120,5 +121,6 @@ class CreateAccountPageTest {
// Check that the current frame is disposed
assertFalse(createAccountPage.isVisible(), "La page de création de compte devrait être fermée après avoir cliqué sur 'Retour à la connexion'.");
}*/
}
*/
}

View file

@ -30,7 +30,8 @@ class LoginPageTest {
loginPage.add(createAccountButton);
}
/* @Test
/*
@Test
void testLoginWithValidUser() throws SQLException {
try (Connection connection = DatabaseConnection.getConnection()) {
String email = "test@example.com";
@ -63,8 +64,8 @@ class LoginPageTest {
// Vérifiez que la page reste ouverte après une connexion échouée
assertTrue(loginPage.isVisible(), "LoginPage devrait rester ouverte si la connexion échoue.");
}*/
}
*/
@Test
void testCreateAccountButtonAction() {

View file

@ -20,10 +20,9 @@ class SoumettreDemandeTest {
private SoumettreDemande soumettreDemande;
private JTextField descriptionField;
private JButton soumettreButton;
private JTable demandesTable;
private DefaultTableModel tableModel;
private int utilisateurId = 1;
private int utilisateurId = 1; // utilisateur arbitraire qui va créer les demandes de test
private int demandeID;
@BeforeEach
void setUp() throws NoSuchFieldException, IllegalAccessException {
@ -31,8 +30,6 @@ class SoumettreDemandeTest {
// Access private fields using reflection
descriptionField = (JTextField) getField("descriptionField");
soumettreButton = (JButton) getField("soumettreButton");
demandesTable = (JTable) getField("demandesTable");
tableModel = (DefaultTableModel) getField("tableModel");
}
@ -82,47 +79,61 @@ class SoumettreDemandeTest {
@Test
void testModifierAvisForFinalizedRequest() throws SQLException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {
int demandeId;
// Step 1: Insert a test row in the database
//on crée une demande avec le statut 'finalisée' pour tester la méthode modifierAvis(), et avec un avis original
try (Connection connection = DatabaseConnection.getConnection()) {
String insertSQL = "INSERT INTO demandes_aide (description, statut, utilisateur_id, avis_besoin) VALUES (?, 'finalisée', ?, 'Initial avis besoin')";
String insertSQL = "INSERT INTO demandes_aide (statut, utilisateur_id, benevole_id, description, avis_besoin) VALUES (?, ?, ?, ?, ?)";
PreparedStatement insertStatement = connection.prepareStatement(insertSQL, PreparedStatement.RETURN_GENERATED_KEYS);
insertStatement.setString(1, "Finalized request for modify test");
insertStatement.setString(1, "finalisée");
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 modif avis_besoin");
insertStatement.setString(5, "Avis_besoin à modifier");
insertStatement.executeUpdate();
// Récupération de l'ID généré pour pouvoir le supprimer après
ResultSet generatedKeys = insertStatement.getGeneratedKeys();
generatedKeys.next();
demandeId = generatedKeys.getInt(1);
if (generatedKeys.next()) {
demandeID = generatedKeys.getInt(1);
}
// Step 2: Simulate table setup
tableModel.addRow(new Object[]{demandeId, "Finalized request for modify test", "finalisée", null});
demandesTable.setRowSelectionInterval(0, 0);
// 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 'loadAnciennesDemandes()'
Method loadAnciennesDemandesMethod = SoumettreDemande.class.getDeclaredMethod("loadAnciennesDemandes");
loadAnciennesDemandesMethod.setAccessible(true); // permet d'appeler la méthode même si elle est private
loadAnciennesDemandesMethod.invoke(soumettreDemande); // on l'appele
// Step 3: Invoke the modifierAvis method
//test de modifierAvis(); on sélectionne la dernière ligne de la table car elle correspond à la demande test
int lastRow = soumettreDemande.getTable().getRowCount()-1;
soumettreDemande.getTable().setRowSelectionInterval(lastRow, lastRow);
// idem que pour loadAnciennesDemandes() comme modifierAvis() est aussi en private
Method modifierAvisMethod = SoumettreDemande.class.getDeclaredMethod("modifierAvis");
modifierAvisMethod.setAccessible(true);
modifierAvisMethod.invoke(soumettreDemande);
modifierAvisMethod.setAccessible(true); // permet d'appeler la méthode même si elle est private
modifierAvisMethod.invoke(soumettreDemande); // on l'appele
// on attend un moment pour que la base de données se mette à jour
Thread.sleep(1000);
// Step 4: Verify the update in the database
try (Connection connection = DatabaseConnection.getConnection()) {
String sql = "SELECT avis_besoin FROM demandes_aide WHERE id = ?";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setInt(1, demandeId);
statement.setInt(1, demandeID);
ResultSet resultSet = statement.executeQuery();
assertTrue(resultSet.next(), "The request should exist in the database.");
assertNotEquals("Initial avis besoin", resultSet.getString("avis_besoin"), "The avis_besoin should be updated.");
String currentAvis = "";
if (resultSet.next()) {
currentAvis = resultSet.getString("avis_besoin");
}
// Step 5: Clean up test data
try (Connection connection = DatabaseConnection.getConnection()) {
assertNotEquals("Avis_besoin à modifier", currentAvis, "L'avis n'a pas été modifié.");
// 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.setInt(1, demandeID);
deleteStatement.executeUpdate();
} catch (InterruptedException | InvocationTargetException | NoSuchMethodException | IllegalAccessException |
SQLException e) {
throw new RuntimeException(e);
}
}

View file

@ -19,122 +19,131 @@ import static org.junit.jupiter.api.Assertions.*;
class ValidateurTest {
private Validateur validateur;
private JTable table;
private DefaultTableModel tableModel;
private int utilisateurId = 1;
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() throws NoSuchFieldException, IllegalAccessException {
void setUp() {
validateur = new Validateur(utilisateurId);
table = (JTable) getField("table");
tableModel = (DefaultTableModel) getField("tableModel");
}
private Object getField(String fieldName) throws NoSuchFieldException, IllegalAccessException {
Field field = Validateur.class.getDeclaredField(fieldName);
field.setAccessible(true);
return field.get(validateur);
}
@Test
void testValiderDemande() throws SQLException {
int demandeId;
// Step 1: Insert a request with status 'soumise' for testing purposes
//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 (description, statut) VALUES (?, 'soumise')";
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, "Pending request to validate");
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();
generatedKeys.next();
demandeId = generatedKeys.getInt(1);
if (generatedKeys.next()) {
demandeID = generatedKeys.getInt(1);
}
// Step 2: Directly update the status to 'acceptée'
try (Connection connection = DatabaseConnection.getConnection()) {
String updateSQL = "UPDATE demandes_aide SET statut = 'acceptée' WHERE id = ?";
PreparedStatement updateStatement = connection.prepareStatement(updateSQL);
updateStatement.setInt(1, demandeId);
updateStatement.executeUpdate();
// 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");
}
// Step 3: Verify that the status is now 'acceptée'
try (Connection connection = DatabaseConnection.getConnection()) {
String selectSQL = "SELECT statut FROM demandes_aide WHERE id = ?";
PreparedStatement selectStatement = connection.prepareStatement(selectSQL);
selectStatement.setInt(1, demandeId);
ResultSet resultSet = selectStatement.executeQuery();
assertEquals("acceptée", currentStatus, "Le statut doit être 'acceptée'.");
assertTrue(resultSet.next(), "The request should exist in the database.");
assertEquals("acceptée", resultSet.getString("statut"), "The request status should be 'acceptée'.");
}
// Step 4: Clean up by deleting the test request
try (Connection connection = DatabaseConnection.getConnection()) {
// 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.setInt(1, demandeID);
deleteStatement.executeUpdate();
} catch (InterruptedException | InvocationTargetException | NoSuchMethodException | IllegalAccessException |
SQLException e) {
throw new RuntimeException(e);
}
}
/* @Test
void testRejeterDemande() throws Exception {
// Step 1: Add a sample request to reject for testing
int demandeId;
@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 (description, statut) VALUES (?, 'soumise')";
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, "Request to reject");
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();
generatedKeys.next();
demandeId = generatedKeys.getInt(1);
if (generatedKeys.next()) {
demandeID = generatedKeys.getInt(1);
}
// Step 2: Simulate selecting this row in the JTable
tableModel.addRow(new Object[]{demandeId, "Request to reject", "soumise"});
table.setRowSelectionInterval(0, 0); // Select the first row
// 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
// Step 3: Set up for user input using a mock (you may need to use a mocking framework)
String motifRejet = "Reason for rejection";
JOptionPane.showInputDialog(null, "Veuillez entrer un motif de rejet (500 caractères max):");
assertNotNull(motifRejet, "Motif de rejet ne doit pas être nul");
//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);
// Step 4: Execute `rejeterDemande`
Method method = Validateur.class.getDeclaredMethod("rejeterDemande");
method.setAccessible(true);
method.invoke(validateur);
// 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
// Step 5: Verify the status update in the database
try (Connection connection = DatabaseConnection.getConnection()) {
String selectSQL = "SELECT statut, motif_rejet FROM demandes_aide WHERE id = ?";
PreparedStatement selectStatement = connection.prepareStatement(selectSQL);
selectStatement.setInt(1, demandeId);
ResultSet resultSet = selectStatement.executeQuery();
// on attend un moment pour que la base de données se mette à jour
Thread.sleep(1000);
assertTrue(resultSet.next(), "La demande doit exister dans la base de données.");
assertEquals("rejetée", resultSet.getString("statut"), "Le statut de la demande doit être 'rejetée'.");
assertEquals(motifRejet, resultSet.getString("motif_rejet"), "Le motif de rejet doit correspondre.");
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");
}
// Step 6: Clean up by deleting the test request
try (Connection connection = DatabaseConnection.getConnection()) {
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.setInt(1, demandeID);
deleteStatement.executeUpdate();
} catch (InterruptedException | InvocationTargetException | NoSuchMethodException | IllegalAccessException |
SQLException e) {
throw new RuntimeException(e);
}
}
}*/