package dev.lions.unionflow.server.security;

import io.quarkus.test.junit.QuarkusTest;
import io.quarkus.test.junit.QuarkusTestProfile;
import io.quarkus.test.junit.TestProfile;
import io.quarkus.test.security.TestSecurity;
import jakarta.inject.Inject;
import java.util.Map;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

/**
 * Tests pour {@link SecurityConfig#logSecurityInfo()} avec DEBUG désactivé.
 *
 * <p>Utilise un {@link QuarkusTestProfile} qui force le niveau de log sur INFO
 * pour {@code SecurityConfig}, ce qui rend {@code LOG.isDebugEnabled()} = false.
 */
@QuarkusTest
@TestProfile(SecurityConfigLogDebugDisabledTest.NoDebugProfile.class)
@DisplayName("SecurityConfig.logSecurityInfo — branche LOG.isDebugEnabled() = false")
class SecurityConfigLogDebugDisabledTest {

    /** Profil qui désactive DEBUG pour SecurityConfig. */
    public static class NoDebugProfile implements QuarkusTestProfile {
        @Override
        public Map<String, String> getConfigOverrides() {
            return Map.of(
                "quarkus.log.category.\"dev.lions.unionflow.server.security.SecurityConfig\".level", "INFO"
            );
        }
    }

    @Inject
    SecurityConfig securityConfig;

    @Test
    @DisplayName("logSecurityInfo sans DEBUG → ne lève pas d'exception")
    void logSecurityInfo_debugDisabled_doesNotThrow() {
        securityConfig.logSecurityInfo();
    }

    @Test
    @TestSecurity(user = "admin@test.com", roles = {"ADMIN"})
    @DisplayName("logSecurityInfo authentifié sans DEBUG → ne lève pas d'exception")
    void logSecurityInfo_authenticatedDebugDisabled_doesNotThrow() {
        securityConfig.logSecurityInfo();
    }
}
