package kr.itn.itnhub;

import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.testcontainers.service.connection.ServiceConnection;
import org.springframework.test.context.DynamicPropertyRegistry;
import org.springframework.test.context.DynamicPropertySource;
import org.testcontainers.containers.PostgreSQLContainer;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;

/**
 * Spring 컨텍스트를 실제로 로딩해야 하는 테스트의 공통 베이스.
 *
 * <p>Testcontainers PostgreSQL 컨테이너를 띄우고, 애플리케이션 구동에 필요한
 * {@code mattermost.*} / {@code app.admin.*} 필수 프로퍼티를 더미 값으로 채워
 * 컨텍스트 리프레시가 실제 외부 시스템 없이도 성공하도록 한다.</p>
 */
@SpringBootTest
@Testcontainers
public abstract class AbstractDbTest {

    @Container
    @ServiceConnection
    static PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:16");

    @DynamicPropertySource
    static void secrets(DynamicPropertyRegistry registry) {
        registry.add("app.admin.username", () -> "admin");
        registry.add("app.admin.password", () -> "test-password");
        registry.add("mattermost.base-url", () -> "http://localhost:1");
        registry.add("mattermost.token", () -> "test-token");
        registry.add("mattermost.team-id", () -> "test-team");
    }
}
