package com.zioinfo.kintex.system.message;

import org.junit.jupiter.api.Test;

import java.util.HashMap;
import java.util.Map;

import static org.junit.jupiter.api.Assertions.*;

/**
 * 메시지 템플릿 렌더({key} 치환) 단위테스트 — DB/스프링 없이 renderTemplate 순수 로직 검증(#35).
 */
class MessageRenderTest {

    private final MessageService service = new MessageService(null);

    @Test
    void replacesKnownPlaceholders() {
        Map<String, Object> p = Map.of("name", "홍길동", "eventName", "스마트팩토리");
        String out = service.renderTemplate("{name}님, {eventName}에 오신 것을 환영합니다.", p);
        assertEquals("홍길동님, 스마트팩토리에 오신 것을 환영합니다.", out);
    }

    @Test
    void keepsMissingPlaceholderAsOriginal() {
        String out = service.renderTemplate("{name}님, {eventName} 안내", Map.of("name", "김철수"));
        assertEquals("김철수님, {eventName} 안내", out, "누락 파라미터는 원본 {key} 유지");
    }

    @Test
    void nullValueBecomesEmpty() {
        Map<String, Object> p = new HashMap<>();
        p.put("name", null);
        String out = service.renderTemplate("[{name}] 알림", p);
        assertEquals("[] 알림", out, "null 값은 빈 문자열로 치환");
    }

    @Test
    void nullTemplateAndParamsSafe() {
        assertEquals("", service.renderTemplate(null, Map.of("a", "b")));
        assertEquals("고정 문구", service.renderTemplate("고정 문구", null));
    }

    @Test
    void ignoresNonPlaceholderBraces() {
        String out = service.renderTemplate("금액 {amount} (단위: {}) 원", Map.of("amount", "1,000"));
        assertEquals("금액 1,000 (단위: {}) 원", out, "빈 중괄호는 플레이스홀더로 오탐하지 않음");
    }
}
