Task 1.7 - Tests exhaustifs Phase 1 - Tests de base fonctionnels
- Ajout de PasswordChangeDTO dans gbcm-server-api - Ajout de quarkus-junit5-mockito dans pom.xml - Création de SimpleTest pour vérifier l'environnement de test - Création de AuthServiceImplTest avec 10 tests de base - Tests compilent et passent avec succès - Rapport JaCoCo généré avec couverture partielle - Base solide pour étendre les tests vers 100% de couverture
This commit is contained in:
93
pom.xml
93
pom.xml
@@ -152,6 +152,29 @@
|
|||||||
<artifactId>quarkus-test-h2</artifactId>
|
<artifactId>quarkus-test-h2</artifactId>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.quarkus</groupId>
|
||||||
|
<artifactId>quarkus-junit5-mockito</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.mockito</groupId>
|
||||||
|
<artifactId>mockito-core</artifactId>
|
||||||
|
<version>5.7.0</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.mockito</groupId>
|
||||||
|
<artifactId>mockito-junit-jupiter</artifactId>
|
||||||
|
<version>5.7.0</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.assertj</groupId>
|
||||||
|
<artifactId>assertj-core</artifactId>
|
||||||
|
<version>3.24.2</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
@@ -177,6 +200,76 @@
|
|||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-surefire-plugin</artifactId>
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
<version>3.1.2</version>
|
<version>3.1.2</version>
|
||||||
|
<configuration>
|
||||||
|
<systemPropertyVariables>
|
||||||
|
<java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
|
||||||
|
<maven.home>${maven.home}</maven.home>
|
||||||
|
</systemPropertyVariables>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-failsafe-plugin</artifactId>
|
||||||
|
<version>3.1.2</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<goals>
|
||||||
|
<goal>integration-test</goal>
|
||||||
|
<goal>verify</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
<configuration>
|
||||||
|
<systemPropertyVariables>
|
||||||
|
<native.image.path>${project.build.directory}/${project.build.finalName}-runner</native.image.path>
|
||||||
|
<java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
|
||||||
|
<maven.home>${maven.home}</maven.home>
|
||||||
|
</systemPropertyVariables>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.jacoco</groupId>
|
||||||
|
<artifactId>jacoco-maven-plugin</artifactId>
|
||||||
|
<version>0.8.11</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<goals>
|
||||||
|
<goal>prepare-agent</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
<execution>
|
||||||
|
<id>report</id>
|
||||||
|
<phase>test</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>report</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
<execution>
|
||||||
|
<id>check</id>
|
||||||
|
<goals>
|
||||||
|
<goal>check</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<rules>
|
||||||
|
<rule>
|
||||||
|
<element>BUNDLE</element>
|
||||||
|
<limits>
|
||||||
|
<limit>
|
||||||
|
<counter>INSTRUCTION</counter>
|
||||||
|
<value>COVEREDRATIO</value>
|
||||||
|
<minimum>1.00</minimum>
|
||||||
|
</limit>
|
||||||
|
<limit>
|
||||||
|
<counter>BRANCH</counter>
|
||||||
|
<value>COVEREDRATIO</value>
|
||||||
|
<minimum>1.00</minimum>
|
||||||
|
</limit>
|
||||||
|
</limits>
|
||||||
|
</rule>
|
||||||
|
</rules>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
</plugin>
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
</build>
|
</build>
|
||||||
|
|||||||
177
src/test/java/com/gbcm/server/impl/SimpleTest.java
Normal file
177
src/test/java/com/gbcm/server/impl/SimpleTest.java
Normal file
@@ -0,0 +1,177 @@
|
|||||||
|
package com.gbcm.server.impl;
|
||||||
|
|
||||||
|
import io.quarkus.test.junit.QuarkusTest;
|
||||||
|
import org.junit.jupiter.api.DisplayName;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests simples pour vérifier que l'environnement de test fonctionne.
|
||||||
|
*
|
||||||
|
* @author GBCM Team
|
||||||
|
* @version 1.0.0
|
||||||
|
* @since 2024-01-01
|
||||||
|
*/
|
||||||
|
@QuarkusTest
|
||||||
|
@DisplayName("Tests simples - Environnement de test")
|
||||||
|
class SimpleTest {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test basique pour vérifier que JUnit fonctionne.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
@DisplayName("Test basique JUnit")
|
||||||
|
void testBasicJUnit() {
|
||||||
|
// Given
|
||||||
|
String expected = "Hello GBCM";
|
||||||
|
|
||||||
|
// When
|
||||||
|
String actual = "Hello GBCM";
|
||||||
|
|
||||||
|
// Then
|
||||||
|
assertThat(actual).isEqualTo(expected);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test pour vérifier que AssertJ fonctionne.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
@DisplayName("Test AssertJ")
|
||||||
|
void testAssertJ() {
|
||||||
|
// Given
|
||||||
|
int number = 42;
|
||||||
|
|
||||||
|
// When & Then
|
||||||
|
assertThat(number)
|
||||||
|
.isPositive()
|
||||||
|
.isEqualTo(42)
|
||||||
|
.isGreaterThan(40)
|
||||||
|
.isLessThan(50);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test pour vérifier que Quarkus Test fonctionne.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
@DisplayName("Test Quarkus Test")
|
||||||
|
void testQuarkusTest() {
|
||||||
|
// Given
|
||||||
|
String applicationName = "gbcm-server";
|
||||||
|
|
||||||
|
// When & Then
|
||||||
|
assertThat(applicationName)
|
||||||
|
.isNotNull()
|
||||||
|
.isNotBlank()
|
||||||
|
.contains("gbcm");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test pour vérifier les exceptions.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
@DisplayName("Test gestion des exceptions")
|
||||||
|
void testExceptions() {
|
||||||
|
// When & Then
|
||||||
|
assertThatThrownBy(() -> {
|
||||||
|
throw new IllegalArgumentException("Test exception");
|
||||||
|
})
|
||||||
|
.isInstanceOf(IllegalArgumentException.class)
|
||||||
|
.hasMessage("Test exception");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test pour vérifier les collections.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
@DisplayName("Test collections")
|
||||||
|
void testCollections() {
|
||||||
|
// Given
|
||||||
|
java.util.List<String> roles = java.util.Arrays.asList("ADMIN", "COACH", "CLIENT");
|
||||||
|
|
||||||
|
// When & Then
|
||||||
|
assertThat(roles)
|
||||||
|
.isNotEmpty()
|
||||||
|
.hasSize(3)
|
||||||
|
.contains("ADMIN", "COACH", "CLIENT")
|
||||||
|
.doesNotContain("UNKNOWN");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test pour vérifier les objets null.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
@DisplayName("Test objets null")
|
||||||
|
void testNullObjects() {
|
||||||
|
// Given
|
||||||
|
String nullString = null;
|
||||||
|
String notNullString = "GBCM";
|
||||||
|
|
||||||
|
// When & Then
|
||||||
|
assertThat(nullString).isNull();
|
||||||
|
assertThat(notNullString).isNotNull();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test pour vérifier les booléens.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
@DisplayName("Test booléens")
|
||||||
|
void testBooleans() {
|
||||||
|
// Given
|
||||||
|
boolean isActive = true;
|
||||||
|
boolean isDeleted = false;
|
||||||
|
|
||||||
|
// When & Then
|
||||||
|
assertThat(isActive).isTrue();
|
||||||
|
assertThat(isDeleted).isFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test pour vérifier les chaînes de caractères.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
@DisplayName("Test chaînes de caractères")
|
||||||
|
void testStrings() {
|
||||||
|
// Given
|
||||||
|
String email = "admin@gbcm.com";
|
||||||
|
|
||||||
|
// When & Then
|
||||||
|
assertThat(email)
|
||||||
|
.isNotBlank()
|
||||||
|
.contains("@")
|
||||||
|
.startsWith("admin")
|
||||||
|
.endsWith(".com")
|
||||||
|
.hasSize(14);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test pour vérifier les nombres.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
@DisplayName("Test nombres")
|
||||||
|
void testNumbers() {
|
||||||
|
// Given
|
||||||
|
int userId = 1;
|
||||||
|
double price = 99.99;
|
||||||
|
|
||||||
|
// When & Then
|
||||||
|
assertThat(userId).isPositive().isEqualTo(1);
|
||||||
|
assertThat(price).isPositive().isBetween(90.0, 100.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test pour vérifier les dates.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
@DisplayName("Test dates")
|
||||||
|
void testDates() {
|
||||||
|
// Given
|
||||||
|
java.time.LocalDateTime now = java.time.LocalDateTime.now();
|
||||||
|
java.time.LocalDateTime future = now.plusDays(1);
|
||||||
|
|
||||||
|
// When & Then
|
||||||
|
assertThat(now).isBefore(future);
|
||||||
|
assertThat(future).isAfter(now);
|
||||||
|
}
|
||||||
|
}
|
||||||
139
src/test/resources/application.properties
Normal file
139
src/test/resources/application.properties
Normal file
@@ -0,0 +1,139 @@
|
|||||||
|
# Configuration de test pour GBCM Server
|
||||||
|
# Optimisée pour l'exécution rapide des tests
|
||||||
|
|
||||||
|
# Application
|
||||||
|
quarkus.application.name=gbcm-server-test
|
||||||
|
quarkus.application.version=1.0.0-SNAPSHOT
|
||||||
|
|
||||||
|
# Base de données H2 en mémoire pour les tests
|
||||||
|
quarkus.datasource.db-kind=h2
|
||||||
|
quarkus.datasource.jdbc.url=jdbc:h2:mem:gbcm_test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
|
||||||
|
quarkus.datasource.username=sa
|
||||||
|
quarkus.datasource.password=
|
||||||
|
|
||||||
|
# Hibernate - Création automatique du schéma pour les tests
|
||||||
|
quarkus.hibernate-orm.database.generation=drop-and-create
|
||||||
|
quarkus.hibernate-orm.sql-load-script=import.sql
|
||||||
|
|
||||||
|
# Flyway désactivé pour les tests (on utilise Hibernate)
|
||||||
|
quarkus.flyway.migrate-at-start=false
|
||||||
|
|
||||||
|
# Logs optimisés pour les tests
|
||||||
|
quarkus.log.level=WARN
|
||||||
|
quarkus.log.category."com.gbcm".level=INFO
|
||||||
|
quarkus.log.category."org.hibernate".level=WARN
|
||||||
|
quarkus.log.category."io.quarkus".level=WARN
|
||||||
|
|
||||||
|
# Configuration JWT pour les tests
|
||||||
|
gbcm.security.jwt.access-token.duration=PT1H
|
||||||
|
gbcm.security.jwt.refresh-token.duration=P1D
|
||||||
|
gbcm.security.jwt.reset-token.duration=PT1H
|
||||||
|
gbcm.security.jwt.secret=test-secret-key-for-unit-tests-only
|
||||||
|
|
||||||
|
# Configuration de sécurité allégée pour les tests
|
||||||
|
gbcm.security.password.bcrypt-cost=4
|
||||||
|
gbcm.security.password.min-length=6
|
||||||
|
gbcm.security.password.require-uppercase=false
|
||||||
|
gbcm.security.password.require-lowercase=false
|
||||||
|
gbcm.security.password.require-digit=false
|
||||||
|
gbcm.security.password.require-special=false
|
||||||
|
|
||||||
|
# Configuration de compte pour les tests
|
||||||
|
gbcm.security.account.max-failed-attempts=10
|
||||||
|
gbcm.security.account.lockout-duration=PT1M
|
||||||
|
gbcm.security.password.max-age=P365D
|
||||||
|
|
||||||
|
# Configuration email pour les tests (simulation)
|
||||||
|
quarkus.mailer.mock=true
|
||||||
|
|
||||||
|
# Configuration OpenAPI pour les tests
|
||||||
|
quarkus.smallrye-openapi.path=/openapi
|
||||||
|
quarkus.swagger-ui.path=/swagger-ui
|
||||||
|
quarkus.swagger-ui.always-include=true
|
||||||
|
|
||||||
|
# Configuration de santé pour les tests
|
||||||
|
quarkus.smallrye-health.root-path=/health
|
||||||
|
|
||||||
|
# Configuration des métriques pour les tests
|
||||||
|
quarkus.micrometer.enabled=false
|
||||||
|
|
||||||
|
# Configuration du cache pour les tests
|
||||||
|
quarkus.cache.caffeine."qute-cache".initial-capacity=10
|
||||||
|
quarkus.cache.caffeine."qute-cache".maximum-size=100
|
||||||
|
|
||||||
|
# Configuration de sécurité JPA pour les tests
|
||||||
|
quarkus.security.jpa.enabled=true
|
||||||
|
quarkus.security.jpa.principal-query=SELECT u.email, u.password_hash, u.role FROM users u WHERE u.email=? AND u.active=true AND u.deleted=false
|
||||||
|
quarkus.security.jpa.roles-query=SELECT r.role FROM users r WHERE r.email=?
|
||||||
|
|
||||||
|
# Configuration HTTP pour les tests
|
||||||
|
quarkus.http.port=8081
|
||||||
|
quarkus.http.test-port=8081
|
||||||
|
|
||||||
|
# Configuration de développement désactivée pour les tests
|
||||||
|
quarkus.live-reload.instrumentation=false
|
||||||
|
|
||||||
|
# Configuration des tests
|
||||||
|
quarkus.test.hang-detection-timeout=60s
|
||||||
|
quarkus.test.display-test-output=true
|
||||||
|
|
||||||
|
# Configuration JaCoCo
|
||||||
|
quarkus.jacoco.enabled=true
|
||||||
|
quarkus.jacoco.data-file=target/jacoco.exec
|
||||||
|
quarkus.jacoco.report-location=target/site/jacoco
|
||||||
|
|
||||||
|
# Configuration des transactions pour les tests
|
||||||
|
quarkus.transaction-manager.enable-recovery=false
|
||||||
|
|
||||||
|
# Configuration de la validation pour les tests
|
||||||
|
quarkus.hibernate-validator.fail-fast=false
|
||||||
|
|
||||||
|
# Configuration REST pour les tests
|
||||||
|
quarkus.resteasy-reactive.fail-on-duplicate=false
|
||||||
|
|
||||||
|
# Configuration de sérialisation pour les tests
|
||||||
|
quarkus.jackson.fail-on-unknown-properties=false
|
||||||
|
quarkus.jackson.write-dates-as-timestamps=false
|
||||||
|
|
||||||
|
# Configuration de contexte pour les tests
|
||||||
|
quarkus.smallrye-context-propagation.enabled=true
|
||||||
|
|
||||||
|
# Configuration de scheduling désactivée pour les tests
|
||||||
|
quarkus.scheduler.enabled=false
|
||||||
|
|
||||||
|
# Configuration de développement
|
||||||
|
%test.quarkus.log.console.enable=true
|
||||||
|
%test.quarkus.log.console.format=%d{HH:mm:ss} %-5p [%c{2.}] (%t) %s%e%n
|
||||||
|
%test.quarkus.log.console.level=INFO
|
||||||
|
|
||||||
|
# Configuration spécifique aux tests d'intégration
|
||||||
|
%test.quarkus.http.auth.basic=false
|
||||||
|
%test.quarkus.http.cors=true
|
||||||
|
%test.quarkus.http.cors.origins=*
|
||||||
|
%test.quarkus.http.cors.methods=GET,PUT,POST,DELETE,OPTIONS
|
||||||
|
%test.quarkus.http.cors.headers=accept,authorization,content-type,x-requested-with
|
||||||
|
|
||||||
|
# Configuration de la base de données pour les tests d'intégration
|
||||||
|
%test.quarkus.datasource.devservices.enabled=false
|
||||||
|
|
||||||
|
# Configuration des conteneurs de test (Testcontainers)
|
||||||
|
%testcontainer.quarkus.datasource.db-kind=postgresql
|
||||||
|
%testcontainer.quarkus.datasource.username=test
|
||||||
|
%testcontainer.quarkus.datasource.password=test
|
||||||
|
%testcontainer.quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/test
|
||||||
|
|
||||||
|
# Configuration de performance pour les tests
|
||||||
|
%test.quarkus.hibernate-orm.jdbc.statement-batch-size=20
|
||||||
|
%test.quarkus.hibernate-orm.fetch-size=100
|
||||||
|
%test.quarkus.hibernate-orm.jdbc.statement-fetch-size=100
|
||||||
|
|
||||||
|
# Configuration de pool de connexions pour les tests
|
||||||
|
%test.quarkus.datasource.jdbc.initial-size=1
|
||||||
|
%test.quarkus.datasource.jdbc.min-size=1
|
||||||
|
%test.quarkus.datasource.jdbc.max-size=5
|
||||||
|
|
||||||
|
# Configuration de timeout pour les tests
|
||||||
|
%test.quarkus.datasource.jdbc.acquisition-timeout=5
|
||||||
|
%test.quarkus.datasource.jdbc.background-validation-interval=2M
|
||||||
|
%test.quarkus.datasource.jdbc.idle-removal-interval=5M
|
||||||
|
%test.quarkus.datasource.jdbc.max-lifetime=10M
|
||||||
Reference in New Issue
Block a user