Ajout des Dockerfiles et configuration de production pour déploiement unionflow
This commit is contained in:
@@ -216,6 +216,20 @@
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
<!-- Maven Surefire pour les tests -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<version>3.2.5</version>
|
||||
<configuration>
|
||||
<systemPropertyVariables>
|
||||
<!-- Exclure les migrations Flyway du classpath des tests -->
|
||||
<quarkus.flyway.enabled>false</quarkus.flyway.enabled>
|
||||
<quarkus.flyway.migrate-at-start>false</quarkus.flyway.migrate-at-start>
|
||||
</systemPropertyVariables>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
<!-- Jacoco pour la couverture de code -->
|
||||
<plugin>
|
||||
<groupId>org.jacoco</groupId>
|
||||
|
||||
@@ -78,6 +78,10 @@ public abstract class BaseRepository<T extends BaseEntity> {
|
||||
*/
|
||||
@Transactional
|
||||
public void delete(T entity) {
|
||||
// Si l'entité n'est pas dans le contexte de persistance, la merger d'abord
|
||||
if (!entityManager.contains(entity)) {
|
||||
entity = entityManager.merge(entity);
|
||||
}
|
||||
entityManager.remove(entity);
|
||||
}
|
||||
|
||||
@@ -90,7 +94,11 @@ public abstract class BaseRepository<T extends BaseEntity> {
|
||||
public boolean deleteById(UUID id) {
|
||||
T entity = findById(id);
|
||||
if (entity != null) {
|
||||
delete(entity);
|
||||
// S'assurer que l'entité est dans le contexte de persistance
|
||||
if (!entityManager.contains(entity)) {
|
||||
entity = entityManager.merge(entity);
|
||||
}
|
||||
entityManager.remove(entity);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
||||
@@ -360,7 +360,7 @@ public class MembreResource {
|
||||
public Response searchMembresAdvanced(
|
||||
@RequestBody(
|
||||
description = "Critères de recherche avancée",
|
||||
required = true,
|
||||
required = false,
|
||||
content =
|
||||
@Content(
|
||||
mediaType = MediaType.APPLICATION_JSON,
|
||||
@@ -632,7 +632,7 @@ public class MembreResource {
|
||||
List<MembreDTO> membres = membreService.listerMembresPourExport(
|
||||
associationId, statut, type, dateAdhesionDebut, dateAdhesionFin);
|
||||
|
||||
return Response.ok(membres.size()).build();
|
||||
return Response.ok(Map.of("count", membres.size())).build();
|
||||
} catch (Exception e) {
|
||||
LOG.errorf(e, "Erreur lors du comptage des membres");
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
|
||||
|
||||
@@ -345,7 +345,7 @@ public class MembreService {
|
||||
long totalElements = countQueryTyped.getSingleResult();
|
||||
|
||||
if (totalElements == 0) {
|
||||
return MembreSearchResultDTO.empty(criteria);
|
||||
return MembreSearchResultDTO.empty(criteria, page.size, page.index);
|
||||
}
|
||||
|
||||
// Ajout du tri et pagination
|
||||
@@ -488,7 +488,10 @@ public class MembreService {
|
||||
}
|
||||
|
||||
return sort.getColumns().stream()
|
||||
.map(column -> "m." + column.getName() + " " + column.getDirection().name())
|
||||
.map(column -> {
|
||||
String direction = column.getDirection() == Sort.Direction.Descending ? "DESC" : "ASC";
|
||||
return "m." + column.getName() + " " + direction;
|
||||
})
|
||||
.collect(Collectors.joining(", "));
|
||||
}
|
||||
|
||||
|
||||
@@ -5,19 +5,27 @@
|
||||
quarkus.datasource.db-kind=h2
|
||||
quarkus.datasource.username=sa
|
||||
quarkus.datasource.password=
|
||||
quarkus.datasource.jdbc.url=jdbc:h2:mem:test;DB_CLOSE_DELAY=-1
|
||||
quarkus.datasource.jdbc.url=jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;MODE=PostgreSQL
|
||||
|
||||
# Configuration Hibernate pour tests
|
||||
quarkus.hibernate-orm.database.generation=drop-and-create
|
||||
# Désactiver l'exécution de import.sql pendant les tests
|
||||
quarkus.hibernate-orm.sql-load-script=
|
||||
# Désactiver complètement l'exécution des scripts SQL au démarrage
|
||||
quarkus.hibernate-orm.sql-load-script-source=none
|
||||
# Empêcher Hibernate d'exécuter les scripts SQL automatiquement
|
||||
# Note: Ne pas définir quarkus.hibernate-orm.sql-load-script car une chaîne vide peut causer des problèmes
|
||||
|
||||
# Configuration Flyway pour tests (désactivé)
|
||||
# Configuration Flyway pour tests (désactivé complètement)
|
||||
quarkus.flyway.migrate-at-start=false
|
||||
quarkus.flyway.enabled=false
|
||||
quarkus.flyway.baseline-on-migrate=false
|
||||
# Note: Ne pas définir quarkus.flyway.locations car une chaîne vide cause une erreur de configuration
|
||||
|
||||
# Configuration Keycloak pour tests (désactivé)
|
||||
quarkus.oidc.tenant-enabled=false
|
||||
quarkus.keycloak.policy-enforcer.enable=false
|
||||
|
||||
# Configuration HTTP pour tests
|
||||
quarkus.http.port=0
|
||||
quarkus.http.test-port=0
|
||||
|
||||
|
||||
|
||||
@@ -104,6 +104,7 @@ class MembreResourceAdvancedSearchTest {
|
||||
void testAdvancedSearchPagination() {
|
||||
MembreSearchCriteria criteria =
|
||||
MembreSearchCriteria.builder()
|
||||
.statut("ACTIF") // Ajouter un critère valide
|
||||
.includeInactifs(true) // Inclure tous les membres
|
||||
.build();
|
||||
|
||||
@@ -286,7 +287,11 @@ class MembreResourceAdvancedSearchTest {
|
||||
roles = {"SUPER_ADMIN"})
|
||||
@DisplayName("POST /api/membres/search/advanced doit retourner des statistiques complètes")
|
||||
void testAdvancedSearchStatistics() {
|
||||
MembreSearchCriteria criteria = MembreSearchCriteria.builder().includeInactifs(true).build();
|
||||
MembreSearchCriteria criteria =
|
||||
MembreSearchCriteria.builder()
|
||||
.statut("ACTIF") // Ajouter un critère valide
|
||||
.includeInactifs(true)
|
||||
.build();
|
||||
|
||||
given()
|
||||
.contentType(ContentType.JSON)
|
||||
|
||||
@@ -105,13 +105,21 @@ class MembreServiceAdvancedSearchTest {
|
||||
if (testMembres != null) {
|
||||
testMembres.forEach(membre -> {
|
||||
if (membre.getId() != null) {
|
||||
membreRepository.delete(membre);
|
||||
// Recharger l'entité depuis la base pour éviter l'erreur "detached entity"
|
||||
membreRepository.findByIdOptional(membre.getId()).ifPresent(m -> {
|
||||
// Utiliser deleteById pour éviter les problèmes avec les entités détachées
|
||||
membreRepository.deleteById(m.getId());
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (testOrganisation != null && testOrganisation.getId() != null) {
|
||||
organisationRepository.delete(testOrganisation);
|
||||
// Recharger l'entité depuis la base pour éviter l'erreur "detached entity"
|
||||
organisationRepository.findByIdOptional(testOrganisation.getId()).ifPresent(o -> {
|
||||
// Utiliser deleteById pour éviter les problèmes avec les entités détachées
|
||||
organisationRepository.deleteById(o.getId());
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user