diff --git a/.forgejo/workflows/maven.yml b/.forgejo/workflows/maven.yml index 4da60f1..d1ff92a 100644 --- a/.forgejo/workflows/maven.yml +++ b/.forgejo/workflows/maven.yml @@ -1,43 +1,21 @@ -name: Java CI with Maven -on: - push: - branches: [ "master" ] -jobs: - build: - runs-on: ubuntu-latest - services: - mysql: - image: mysql:8.0 - env: - MYSQL_ROOT_PASSWORD: root - MYSQL_DATABASE: projet_gei_023 - MYSQL_USER: user - MYSQL_PASSWORD: ohQu4ood - ports: - - 3306:3306 - options: >- - --health-cmd="mysqladmin ping" - --health-interval=10s - --health-timeout=5s - --health-retries=3 +image: maven:3.8.3-openjdk-17 - steps: - - uses: actions/checkout@v3 - - name: Set up JDK 17 - uses: actions/setup-java@v3 - with: - java-version: '17' - distribution: 'temurin' - cache: maven - - - name: Setup MySQL - run: | - sudo systemctl start mysql - mysql -e 'CREATE DATABASE IF NOT EXISTS projet_gei_023;' -uroot -proot - mysql -e "ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';" -uroot -proot - - - name: Build with Maven - run: mvn -B package --file pom.xml - - - name: Test with Maven - run: mvn test \ No newline at end of file +services: + - mysql:8.0 + +variables: + MYSQL_DATABASE: projet_gei_023 + MYSQL_ROOT_PASSWORD: root + MYSQL_USER: user + MYSQL_PASSWORD: ohQu4ood + MYSQL_HOST: mysql + +stages: + - test + +test: + stage: test + script: + - mvn test + only: + - master \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..3fdd1a1 --- /dev/null +++ b/README.md @@ -0,0 +1,95 @@ +# Application PDLA - Gestion des Demandes Bénévoles + +## Prérequis +- Java JDK 11 ou supérieur +- Apache Maven 3.6 ou supérieur +- Eclipse IDE +- Accès aux machines INSA (pour l'exécution sur Linux) + +## Installation + +### Configuration Eclipse +1. Importez le projet dans Eclipse : + - File > Import > Maven > Existing Maven Projects + - Sélectionnez le dossier racine du projet + - Cliquez sur "Finish" + +2. Configuration du build path : + - Clic droit sur le projet > Properties + - Java Build Path > Libraries + - Vérifiez que le JDK est correctement configuré + +### Configuration Maven +1. Mettez à jour les dépendances Maven : +```bash +mvn clean install +``` + +2. Vérifiez que le fichier `pom.xml` est correctement configuré avec toutes les dépendances nécessaires. + +## Exécution des Tests + +### Dans Eclipse +1. Clic droit sur le projet +2. Run As > Maven test + +### En ligne de commande (Linux INSA) +```bash +# Se connecter aux machines INSA +ssh votre_login@votre_machine.insa-toulouse.fr + +# Naviguer vers le répertoire du projet +cd chemin/vers/votre/projet + +# Exécuter les tests +mvn test +``` + +## Structure du Projet +- `src/main/java/` : Code source principal + - `controller/` : Contrôleurs de l'application + - `database/` : Gestion de la base de données + - Classes principales : + - BenevoleDemandes*.java + - CreateAccountPage.java + - LoginPage.java + - MenuBenevole.java + - SoumettreDemande.java + - Validateur.java + +- `src/test/java/` : Tests unitaires et d'intégration + - Tests correspondants aux classes principales + - Tests de validation + - Tests de base de données + +## Exécution de l'Application + +### Dans Eclipse +1. Localisez la classe principale +2. Clic droit > Run As > Java Application + +### En ligne de commande (Linux INSA) +```bash +# Compiler et créer le package +mvn package + +# Exécuter l'application +java -jar target/nom-du-jar.jar +``` + +## Notes Importantes +- Assurez-vous que la base de données est correctement configurée avant l'exécution +- Tous les tests doivent passer avant de soumettre des modifications +- Utilisez la branche 'master' pour le développement principal + +## Tests +L'application inclut plusieurs types de tests : +- Tests unitaires pour les composants individuels +- Tests d'intégration pour les flux complets +- Tests de validation pour les formulaires +- Tests de la base de données + +Pour exécuter des tests spécifiques : +```bash +mvn test -Dtest=NomDuTest +``` \ No newline at end of file diff --git a/src/test/java/controller/ValidateurTest.java b/src/test/java/controller/ValidateurTest.java index 0417f27..8a8741f 100644 --- a/src/test/java/controller/ValidateurTest.java +++ b/src/test/java/controller/ValidateurTest.java @@ -16,12 +16,13 @@ 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 validateurID = 3; // utilisateur arbitraire qui va valider les demandes de test + 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); + validateur = new Validateur(validateurID); } @Test @@ -31,7 +32,7 @@ class ValidateurTest { 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.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 validation"); insertStatement.executeUpdate(); @@ -90,7 +91,7 @@ class ValidateurTest { 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.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(); @@ -142,4 +143,58 @@ class ValidateurTest { } } + @Test + void testLoadDemandesEnAttente() { + try (Connection connection = DatabaseConnection.getConnection()) { + // Créer trois demandes tests + String desc1 = "Demande de test 1 pour JUnit / Test loadDemandesEnAttente"; + String desc2 = "Demande de test 2 pour JUnit / Test loadDemandesEnAttente"; + String desc3 = "Demande de test 3 pour JUnit / Test loadDemandesEnAttente"; + + // Insertion de la première demande + 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); //pas de benevole attribué + insertStatement.setString(4, desc1); + insertStatement.executeUpdate(); + + ResultSet generatedKeys = insertStatement.getGeneratedKeys(); + if (generatedKeys.next()) { + demandeID = generatedKeys.getInt(1); + } + + // Insertion des autres demandes + insertStatement.setString(4, desc2); + insertStatement.executeUpdate(); + insertStatement.setString(4, desc3); + insertStatement.executeUpdate(); + + // Charger les demandes dans la table + Method loadDemandesEnAttenteMethod = Validateur.class.getDeclaredMethod("loadDemandesEnAttente"); + loadDemandesEnAttenteMethod.setAccessible(true); + loadDemandesEnAttenteMethod.invoke(validateur); + + // Vérifier que les descriptions sont bien chargées + int lastRow = validateur.getTable().getRowCount()-1; + String desc_actual = (String) validateur.getTableModel().getValueAt(lastRow-2, 1) + + (String) validateur.getTableModel().getValueAt(lastRow-1, 1) + + (String) validateur.getTableModel().getValueAt(lastRow, 1); + + String desc_expected = desc1 + desc2 + desc3; + assertEquals(desc_expected, desc_actual, "Les descriptions doivent correspondre"); + + // Nettoyage des données de test + for (int i = 0; i < 3; i++) { + String deleteSQL = "DELETE FROM demandes_aide WHERE id = ?"; + PreparedStatement deleteStatement = connection.prepareStatement(deleteSQL); + deleteStatement.setInt(1, demandeID + i); + deleteStatement.executeUpdate(); + } + + } catch (SQLException | NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { + throw new RuntimeException(e); + } + } }