RBAC:
- HealthResource: @PermitAll
- RoleResource: @RolesAllowed ADMIN/SUPER_ADMIN/ADMIN_ORGANISATION class-level
- PropositionAideResource: @RolesAllowed MEMBRE/USER class-level
- AuthCallbackResource: @PermitAll
- EvenementResource: @PermitAll /publics et /test, count restreint
- BackupResource/LogsMonitoringResource/SystemResource: MODERATOR → MODERATEUR
- AnalyticsResource: MANAGER/MEMBER → ADMIN_ORGANISATION/MEMBRE
- RoleConstant.java: constantes de rôles centralisées
Cycle de vie membres:
- MemberLifecycleService: ajouterMembre()/retirerMembre() sur activation/radiation/archivage
- MembreResource: endpoint GET /numero/{numeroMembre}
- MembreService: méthode trouverParNumeroMembre()
Changement mot de passe:
- CompteAdherentResource: endpoint POST /auth/change-password (mobile)
- MembreKeycloakSyncService: changerMotDePasseDirectKeycloak() via API Admin Keycloak directe
- Fallback automatique si lions-user-manager indisponible
Workflow:
- Flyway V17-V23: rôles, types org, formules Option C, lifecycle columns, bareme cotisation
- Nouvelles classes: MemberLifecycleService, OrganisationModuleService, scheduler
- Security: OrganisationContextFilter, OrganisationContextHolder, ModuleAccessFilter
64 lines
1.9 KiB
Java
64 lines
1.9 KiB
Java
package dev.lions.unionflow.server.resource;
|
|
|
|
import static io.restassured.RestAssured.given;
|
|
import static org.hamcrest.Matchers.*;
|
|
|
|
import io.quarkus.test.junit.QuarkusTest;
|
|
import io.restassured.http.ContentType;
|
|
import org.junit.jupiter.api.DisplayName;
|
|
import org.junit.jupiter.api.Test;
|
|
|
|
@QuarkusTest
|
|
class HealthResourceTest {
|
|
|
|
@Test
|
|
@DisplayName("GET /api/status retourne 200 avec status UP")
|
|
void getStatus_returns200AndUp() {
|
|
given()
|
|
.when()
|
|
.get("/api/status")
|
|
.then()
|
|
.statusCode(200)
|
|
.contentType(ContentType.JSON)
|
|
.body("status", equalTo("UP"))
|
|
.body("service", equalTo("UnionFlow Server"))
|
|
.body("version", equalTo("1.0.0"))
|
|
.body("timestamp", notNullValue())
|
|
.body("message", equalTo("Serveur opérationnel"));
|
|
}
|
|
|
|
@Test
|
|
@DisplayName("GET /api/status avec Accept inconnu retourne 200 (endpoint toujours accessible)")
|
|
void getStatus_acceptHeaderDifferent_returns200() {
|
|
given()
|
|
.header("Accept", "application/json")
|
|
.when()
|
|
.get("/api/status")
|
|
.then()
|
|
.statusCode(200)
|
|
.body("status", equalTo("UP"));
|
|
}
|
|
|
|
@Test
|
|
@DisplayName("GET /api/status/inexistant retourne 404")
|
|
void getStatusInexistant_returns404() {
|
|
given()
|
|
.when()
|
|
.get("/api/status/inexistant")
|
|
.then()
|
|
.statusCode(404);
|
|
}
|
|
|
|
@Test
|
|
@DisplayName("POST /api/status retourne 405 (méthode non autorisée)")
|
|
void postStatus_returns405() {
|
|
given()
|
|
.contentType(ContentType.JSON)
|
|
.body("{}")
|
|
.when()
|
|
.post("/api/status")
|
|
.then()
|
|
.statusCode(405);
|
|
}
|
|
}
|