package dev.lions.btpxpress.adapter.http; import static io.restassured.RestAssured.given; import io.quarkus.test.junit.QuarkusTest; import io.restassured.http.ContentType; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; /** * Tests pour ChantierResource - Tests d'intégration REST MÉTIER: Tests des endpoints de gestion des * chantiers * * NOTE: Désactivé temporairement pour le déploiement CI/CD car nécessite un bootstrap Quarkus complet */ @QuarkusTest @Disabled("Désactivé pour le déploiement CI/CD - Nécessite un environnement Quarkus complet") @DisplayName("🏗️ Tests REST - Chantiers") public class ChantierResourceTest { @Test @DisplayName("📋 GET /api/chantiers - Lister tous les chantiers") void testGetAllChantiers() { given().when().get("/api/chantiers").then().statusCode(200).contentType(ContentType.JSON); } @Test @DisplayName("🔍 GET /api/chantiers/{id} - Récupérer chantier par ID invalide") void testGetChantierByInvalidId() { given() .when() .get("/api/chantiers/invalid-uuid") .then() .statusCode(400); // Bad Request pour UUID invalide } @Test @DisplayName("🔍 GET /api/chantiers/{id} - Récupérer chantier inexistant") void testGetChantierByNonExistentId() { given() .when() .get("/api/chantiers/123e4567-e89b-12d3-a456-426614174000") .then() .statusCode(404); // Not Found attendu } @Test @DisplayName("📊 GET /api/chantiers/stats - Statistiques chantiers") void testGetChantiersStats() { given().when().get("/api/chantiers/stats").then().statusCode(200).contentType(ContentType.JSON); } @Test @DisplayName("✅ GET /api/chantiers/actifs - Lister chantiers actifs") void testGetChantiersActifs() { given() .when() .get("/api/chantiers/actifs") .then() .statusCode(200) .contentType(ContentType.JSON); } @Test @DisplayName("🚫 POST /api/chantiers - Créer chantier sans données") void testCreateChantierWithoutData() { given() .contentType(ContentType.JSON) .when() .post("/api/chantiers") .then() .statusCode(400); // Bad Request attendu } @Test @DisplayName("🚫 POST /api/chantiers - Créer chantier avec données invalides") void testCreateChantierWithInvalidData() { String invalidChantierData = """ { "nom": "", "adresse": "", "montantPrevu": -1000 } """; given() .contentType(ContentType.JSON) .body(invalidChantierData) .when() .post("/api/chantiers") .then() .statusCode(400); // Validation error attendu } @Test @DisplayName("🚫 PUT /api/chantiers/{id} - Modifier chantier inexistant") void testUpdateNonExistentChantier() { String chantierData = """ { "nom": "Chantier Modifié", "adresse": "Nouvelle Adresse", "montantPrevu": 150000 } """; given() .contentType(ContentType.JSON) .body(chantierData) .when() .put("/api/chantiers/123e4567-e89b-12d3-a456-426614174000") .then() .statusCode(400); // Bad Request pour UUID inexistant } @Test @DisplayName("🚫 DELETE /api/chantiers/{id} - Supprimer chantier inexistant") void testDeleteNonExistentChantier() { given() .when() .delete("/api/chantiers/123e4567-e89b-12d3-a456-426614174000") .then() .statusCode(400); // Bad Request pour UUID inexistant } @Test @DisplayName("📊 GET /api/chantiers/count - Compter les chantiers") void testCountChantiers() { given().when().get("/api/chantiers/count").then().statusCode(200).contentType(ContentType.JSON); } }