"""episode_summary 모듈 테스트."""
from unittest.mock import patch


def test_summarize_episode_returns_string():
    from app.modules.pipeline.episode_summarizer import summarize_episode
    with patch("app.modules.pipeline.episode_summarizer.call_structured") as mock:
        mock.return_value = {"summary": "요약 텍스트", "key_events": ["이벤트1"]}
        result = summarize_episode("시나리오 전문", max_length=500)
        assert "summary" in result
        assert len(result["summary"]) > 0


def test_summarize_episode_respects_max_length():
    from app.modules.pipeline.episode_summarizer import summarize_episode
    with patch("app.modules.pipeline.episode_summarizer.call_structured") as mock:
        mock.return_value = {"summary": "A" * 600, "key_events": []}
        result = summarize_episode("전문", max_length=500)
        # 모듈은 LLM 응답을 그대로 반환, 길이 제한은 프롬프트에서 지시
        assert result["summary"] is not None


def test_summarize_episode_loads_external_prompt():
    from app.modules.pipeline.episode_summarizer import summarize_episode
    with patch("app.modules.pipeline.episode_summarizer.call_structured") as mock, \
         patch("app.modules.pipeline.episode_summarizer.load_prompt") as mock_p:
        mock.return_value = {"summary": "ok", "key_events": []}
        mock_p.return_value = "system"
        summarize_episode("전문")
        mock_p.assert_called_once()


def test_summarize_episode_calls_call_structured_with_step():
    """call_structured가 step='episode_summary'로 호출되는지 검증."""
    from app.modules.pipeline.episode_summarizer import summarize_episode
    with patch("app.modules.pipeline.episode_summarizer.call_structured") as mock:
        mock.return_value = {"summary": "ok", "key_events": []}
        summarize_episode("전문", max_length=500)
        mock.assert_called_once()
        _, kwargs = mock.call_args
        assert kwargs["step"] == "episode_summary"
