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;

/**
 * Tests pour HealthResource
 *
 * @author Lions Dev Team
 * @since 2025-01-10
 */
@QuarkusTest
@DisplayName("Tests HealthResource")
class HealthResourceTest {

  @Test
  @DisplayName("Test GET /api/status - Statut du serveur")
  void testGetStatus() {
    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("message", equalTo("Serveur opérationnel"))
        .body("timestamp", notNullValue());
  }

  @Test
  @DisplayName("Test GET /api/status - Vérification de la structure de la réponse")
  void testGetStatusStructure() {
    given()
        .when()
        .get("/api/status")
        .then()
        .statusCode(200)
        .contentType(ContentType.JSON)
        .body("$", hasKey("status"))
        .body("$", hasKey("service"))
        .body("$", hasKey("version"))
        .body("$", hasKey("timestamp"))
        .body("$", hasKey("message"));
  }

  @Test
  @DisplayName("Test GET /api/status - Vérification du Content-Type")
  void testGetStatusContentType() {
    given().when().get("/api/status").then().statusCode(200).contentType("application/json");
  }

  @Test
  @DisplayName("Test GET /api/status - Réponse rapide")
  void testGetStatusPerformance() {
    given()
        .when()
        .get("/api/status")
        .then()
        .statusCode(200)
        .time(lessThan(1000L)); // Moins d'1 seconde
  }
}
