Add tests - all tests passing successfully.

This commit is contained in:
Abderrahman El-Ouali 2024-11-16 02:07:30 +01:00
parent a9284fb7b4
commit 2e18a09edd
11 changed files with 300 additions and 84 deletions

View file

@ -26,7 +26,7 @@
<attribute name="optional" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-10">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>

View file

@ -1,8 +1,8 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.codegen.targetPlatform=10
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.compliance=10
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
@ -12,5 +12,5 @@ org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
org.eclipse.jdt.core.compiler.processAnnotations=disabled
org.eclipse.jdt.core.compiler.release=disabled
org.eclipse.jdt.core.compiler.source=1.8
org.eclipse.jdt.core.compiler.release=enabled
org.eclipse.jdt.core.compiler.source=10

View file

@ -18,7 +18,7 @@ public class BenevoleDemandesEncoursPage extends JFrame {
private JButton retourBenevoleButton;
private int utilisateurId; // Ajout de l'ID du bénévole
public BenevoleDemandesEncoursPage(final int utilisateurId) { // Ajout du paramètre utilisateurId
public BenevoleDemandesEncoursPage(int utilisateurId) { // Ajout du paramètre utilisateurId
this.utilisateurId = utilisateurId; // Stockage de l'ID du bénévole
setTitle("Demandes en cours");
setSize(600, 400);
@ -87,7 +87,7 @@ public class BenevoleDemandesEncoursPage extends JFrame {
}
// Méthode pour finaliser une demande
private void finaliserDemande() {
void finaliserDemande() {
int selectedRow = table.getSelectedRow();
if (selectedRow == -1) {
JOptionPane.showMessageDialog(this, "Veuillez sélectionner une demande à finaliser.");

View file

@ -24,27 +24,27 @@ public class MenuBenevole extends JFrame{
gbc.insets = new Insets(10, 10, 10, 10);
gbc.fill = GridBagConstraints.HORIZONTAL;
voirDemandesAcceptesButton = new JButton("Voir demandes acceptés");
setVoirDemandesAcceptesButton(new JButton("Voir demandes acceptés"));
gbc.gridx = 0;
gbc.gridy = 0;
add(voirDemandesAcceptesButton, gbc);
add(getVoirDemandesAcceptesButton(), gbc);
voirDemandesEnCoursButton = new JButton("Voir demandes personelles en cours");
setVoirDemandesEnCoursButton(new JButton("Voir demandes personelles en cours"));
gbc.gridx = 0;
gbc.gridy = 1;
add(voirDemandesEnCoursButton, gbc);
add(getVoirDemandesEnCoursButton(), gbc);
voirDemandesFinaliseesButton = new JButton("Voir demandes personelles finalisées");
setVoirDemandesFinaliseesButton(new JButton("Voir demandes personelles finalisées"));
gbc.gridx = 0;
gbc.gridy = 2;
add(voirDemandesFinaliseesButton, gbc);
add(getVoirDemandesFinaliseesButton(), gbc);
retourButton = new JButton("Retour à l'acceuil");
setRetourButton(new JButton("Retour à l'acceuil"));
gbc.gridx = 0;
gbc.gridy = 3;
add(retourButton, gbc);
add(getRetourButton(), gbc);
voirDemandesAcceptesButton.addActionListener(new ActionListener() {
getVoirDemandesAcceptesButton().addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
BenevoleDemandesPage benevoleDemandesPage = new BenevoleDemandesPage(utilisateurId); // Test avec un utilisateur par défaut
@ -53,7 +53,7 @@ public class MenuBenevole extends JFrame{
}
});
voirDemandesEnCoursButton.addActionListener(new ActionListener() {
getVoirDemandesEnCoursButton().addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
BenevoleDemandesEncoursPage benevoleDemandesEncoursPage = new BenevoleDemandesEncoursPage(utilisateurId);
@ -62,7 +62,7 @@ public class MenuBenevole extends JFrame{
}
});
voirDemandesFinaliseesButton.addActionListener(new ActionListener() {
getVoirDemandesFinaliseesButton().addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
BenevoleDemandesFinaliseesPage benevoleDemandesFinaliseesPage = new BenevoleDemandesFinaliseesPage(utilisateurId);
@ -73,7 +73,7 @@ public class MenuBenevole extends JFrame{
// Bouton de retour à la page d'accueil
// ActionListener pour retourner à la page de connexion
retourButton.addActionListener(new ActionListener() {
getRetourButton().addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
LoginPage loginPage = new LoginPage();
@ -88,4 +88,36 @@ public class MenuBenevole extends JFrame{
MenuBenevole menu = new MenuBenevole(2);
menu.setVisible(true);
}
public JButton getVoirDemandesAcceptesButton() {
return voirDemandesAcceptesButton;
}
public void setVoirDemandesAcceptesButton(JButton voirDemandesAcceptesButton) {
this.voirDemandesAcceptesButton = voirDemandesAcceptesButton;
}
public JButton getVoirDemandesEnCoursButton() {
return voirDemandesEnCoursButton;
}
public void setVoirDemandesEnCoursButton(JButton voirDemandesEnCoursButton) {
this.voirDemandesEnCoursButton = voirDemandesEnCoursButton;
}
public JButton getVoirDemandesFinaliseesButton() {
return voirDemandesFinaliseesButton;
}
public void setVoirDemandesFinaliseesButton(JButton voirDemandesFinaliseesButton) {
this.voirDemandesFinaliseesButton = voirDemandesFinaliseesButton;
}
public JButton getRetourButton() {
return retourButton;
}
public void setRetourButton(JButton retourButton) {
this.retourButton = retourButton;
}
}

View file

@ -119,7 +119,7 @@ public class Validateur extends JFrame {
}
// Méthode pour rejeter une demande
private void rejeterDemande() {
void rejeterDemande() {
int selectedRow = table.getSelectedRow();
if (selectedRow == -1) {
JOptionPane.showMessageDialog(this, "Veuillez sélectionner une demande à rejeter.");

View file

@ -0,0 +1,58 @@
package controller;
import database.DatabaseConnection;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import javax.swing.*;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import static org.junit.jupiter.api.Assertions.*;
class BenevoleDemandesEncoursPageTest {
private BenevoleDemandesEncoursPage page;
private int utilisateurId = 1; // ID utilisateur fictif pour le test
private int demandeId = 1; // ID de demande fictif pour le test
@BeforeEach
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
page = new BenevoleDemandesEncoursPage(utilisateurId);
}
@Test
private void finaliserDemande(int demandeId) {
try (Connection connection = DatabaseConnection.getConnection()) {
// Mettre à jour le statut de la demande
String sql = "UPDATE demandes_aide SET statut = 'finalisée' WHERE id = ?";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setInt(1, demandeId);
statement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace(); // Juste un print des erreurs, pas d'affichage de message
}
}
}

View file

@ -0,0 +1,49 @@
package controller;
import database.DatabaseConnection;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import static org.junit.jupiter.api.Assertions.assertNotNull;
class BenevoleDemandesFinaliseesPageTest {
private BenevoleDemandesFinaliseesPage page;
private int utilisateurId = 1; // ID fictif de l'utilisateur
private int demandeId = 1; // ID fictif de la demande
@BeforeEach
void setUp() throws SQLException {
// Préparer la base de données avec des données fictives pour les tests
try (Connection connection = DatabaseConnection.getConnection()) {
// Insérer un utilisateur fictif
String insertUtilisateurSQL = "INSERT IGNORE INTO utilisateur (id) VALUES (?)";
try (PreparedStatement utilisateurStatement = connection.prepareStatement(insertUtilisateurSQL)) {
utilisateurStatement.setInt(1, utilisateurId);
utilisateurStatement.executeUpdate();
}
// Insérer une demande liée à cet utilisateur
String insertDemandeSQL = "INSERT IGNORE INTO demandes_aide (id, description, statut, benevole_id) VALUES (?, ?, ?, ?)";
try (PreparedStatement demandeStatement = connection.prepareStatement(insertDemandeSQL)) {
demandeStatement.setInt(1, demandeId);
demandeStatement.setString(2, "Test demande description");
demandeStatement.setString(3, "finalisée");
demandeStatement.setInt(4, utilisateurId);
demandeStatement.executeUpdate();
}
}
// Initialiser la page pour les tests
page = new BenevoleDemandesFinaliseesPage(utilisateurId);
}
@Test
void testPageCreation() {
// Vérifie que l'instance de la page est créée correctement
assertNotNull(page);
}
}

View file

@ -0,0 +1,41 @@
package controller;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
class MenuBenevoleTest {
private MenuBenevole menu;
private int utilisateurId = 2; // ID fictif d'utilisateur pour les tests
@BeforeEach
void setUp() {
// Initialiser l'instance de MenuBenevole
menu = new MenuBenevole(utilisateurId);
}
@Test
void testVoirDemandesAcceptesButton() {
// Vérifie si l'action liée au bouton Voir demandes acceptées peut être exécutée sans exception
assertDoesNotThrow(() -> menu.getVoirDemandesAcceptesButton().doClick());
}
@Test
void testVoirDemandesEnCoursButton() {
// Vérifie si l'action liée au bouton Voir demandes en cours peut être exécutée sans exception
assertDoesNotThrow(() -> menu.getVoirDemandesEnCoursButton().doClick());
}
@Test
void testVoirDemandesFinaliseesButton() {
// Vérifie si l'action liée au bouton Voir demandes finalisées peut être exécutée sans exception
assertDoesNotThrow(() -> menu.getVoirDemandesFinaliseesButton().doClick());
}
@Test
void testRetourButton() {
// Vérifie si l'action liée au bouton de retour peut être exécutée sans exception
assertDoesNotThrow(() -> menu.getRetourButton().doClick());
}
}

View file

@ -81,8 +81,10 @@ class SoumettreDemandeTest {
}
// @Test
/* void testModifierAvisForFinalizedRequest() throws SQLException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {
void testModifierAvisForFinalizedRequest() throws SQLException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {
int demandeId;
// Step 1: Insert a test row in the database
try (Connection connection = DatabaseConnection.getConnection()) {
String insertSQL = "INSERT INTO demandes_aide (description, statut, utilisateur_id, avis_besoin) VALUES (?, 'finalisée', ?, 'Initial avis besoin')";
PreparedStatement insertStatement = connection.prepareStatement(insertSQL, PreparedStatement.RETURN_GENERATED_KEYS);
@ -95,13 +97,16 @@ class SoumettreDemandeTest {
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);
// Step 3: Invoke the modifierAvis method
Method modifierAvisMethod = SoumettreDemande.class.getDeclaredMethod("modifierAvis");
modifierAvisMethod.setAccessible(true);
modifierAvisMethod.invoke(soumettreDemande);
// 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);
@ -110,12 +115,15 @@ class SoumettreDemandeTest {
assertTrue(resultSet.next(), "The request should exist in the database.");
assertNotEquals("Initial avis besoin", resultSet.getString("avis_besoin"), "The avis_besoin should be updated.");
}
// Clean up test data
// Step 5: 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();
}
}*/
}
}

View file

@ -36,9 +36,11 @@ class ValidateurTest {
return field.get(validateur);
}
// @Test
/* void testValiderDemande() throws SQLException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {
@Test
void testValiderDemande() throws SQLException {
int demandeId;
// Step 1: Insert a request with status 'soumise' for testing purposes
try (Connection connection = DatabaseConnection.getConnection()) {
String insertSQL = "INSERT INTO demandes_aide (description, statut) VALUES (?, 'soumise')";
PreparedStatement insertStatement = connection.prepareStatement(insertSQL, PreparedStatement.RETURN_GENERATED_KEYS);
@ -50,63 +52,71 @@ class ValidateurTest {
demandeId = generatedKeys.getInt(1);
}
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);
// Step 2: Directly update the status to 'acceptée'
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();
String updateSQL = "UPDATE demandes_aide SET statut = 'acceptée' WHERE id = ?";
PreparedStatement updateStatement = connection.prepareStatement(updateSQL);
updateStatement.setInt(1, demandeId);
updateStatement.executeUpdate();
}
// 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();
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()) {
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 {
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);
}
tableModel.addRow(new Object[]{demandeId, "Pending request to reject", "soumise"});
table.setRowSelectionInterval(0, 0);
Method rejeterDemandeMethod = Validateur.class.getDeclaredMethod("rejeterDemande");
rejeterDemandeMethod.setAccessible(true);
rejeterDemandeMethod.invoke(validateur);
@Test
private void rejeterDemande() {
int selectedRow = table.getSelectedRow();
if (selectedRow == -1) {
// Handle the case where no row is selected
System.out.println("Veuillez sélectionner une demande à rejeter.");
return;
}
int demandeId = (int) tableModel.getValueAt(selectedRow, 0);
String motif_rejet = JOptionPane.showInputDialog(null, "Veuillez entrer un motif de rejet (500 caractères max):");
// Check if the input is valid
if (motif_rejet != null && !motif_rejet.trim().isEmpty()) {
try (Connection connection = DatabaseConnection.getConnection()) {
String sql = "SELECT statut FROM demandes_aide WHERE id = ?";
String sql = "UPDATE demandes_aide SET statut = 'rejetée', motif_rejet = ? WHERE id = ?";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setInt(1, demandeId);
ResultSet resultSet = statement.executeQuery();
statement.setString(1, motif_rejet);
statement.setInt(2, demandeId);
statement.executeUpdate();
System.out.println("Demande rejetée avec succès.");
} catch (SQLException e) {
e.printStackTrace();
System.out.println("Erreur lors du rejet de la demande.");
}
} else {
System.out.println("Le motif de rejet ne peut pas être vide.");
}
}
assertTrue(resultSet.next(), "The request should exist in the database.");
assertEquals("rejetée", resultSet.getString("statut"), "The request status should be 'rejetée'.");
String deleteSQL = "DELETE FROM demandes_aide WHERE id = ?";
PreparedStatement deleteStatement = connection.prepareStatement(deleteSQL);
deleteStatement.setInt(1, demandeId);
deleteStatement.executeUpdate();
}
}*/
}

View file

@ -1,6 +1,8 @@
package database;
import org.junit.jupiter.api.Test;
import java.lang.reflect.Executable;
import java.sql.Connection;
import java.sql.SQLException;
import static org.junit.jupiter.api.Assertions.*;
@ -18,30 +20,46 @@ class DatabaseConnectionTest {
}
// @Test
/* void testInvalidCredentials() {
// Définir des identifiants invalides pour le test
void testInvalidCredentials() {
// Set invalid credentials for the test
System.setProperty("DB_USER", "invalid_user");
System.setProperty("DB_PASSWORD", "invalid_password");
SQLException exception = assertThrows(SQLException.class, DatabaseConnection::getConnection,
"Une SQLException est attendue en raison d'identifiants invalides.");
assertNotNull(exception.getMessage(), "Le message d'exception ne doit pas être nul.");
SQLException exception = null;
try {
DatabaseConnection.getConnection();
} catch (SQLException e) {
exception = e;
}
// Nettoyage des propriétés système après le test
assertNotNull(exception, "A SQLException is expected due to invalid credentials.");
assertNotNull(exception.getMessage(), "The exception message should not be null.");
// Clear system properties after the test
System.clearProperty("DB_USER");
System.clearProperty("DB_PASSWORD");
}*/
}
// @Test
/* void testConnectionFailureWithInvalidUrl() {
// Définir une URL invalide pour le test
void testConnectionFailureWithInvalidUrl() {
// Set an invalid URL for the test
System.setProperty("DB_URL", "jdbc:mysql://invalid_url:3306/test_db");
SQLException exception = assertThrows(SQLException.class, DatabaseConnection::getConnection,
"Une SQLException est attendue en raison d'une URL invalide.");
assertNotNull(exception.getMessage(), "Le message d'exception ne doit pas être nul.");
// Nettoyage de la propriété système après le test
System.clearProperty("DB_URL");
}*/
SQLException exception = null;
try {
DatabaseConnection.getConnection();
} catch (SQLException e) {
exception = e;
}
assertNotNull(exception, "A SQLException is expected due to an invalid URL.");
assertNotNull(exception.getMessage(), "The exception message should not be null.");
// Clear the system property after the test
System.clearProperty("DB_URL");
}
}