This commit is contained in:
Abderrahman El-Ouali 2024-12-02 17:02:19 +01:00
commit d2c26ec6ed
3 changed files with 174 additions and 46 deletions

View file

@ -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
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

95
README.md Normal file
View file

@ -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
```

View file

@ -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);
}
}
}