"""提示词模块单元测试。"""

from prompts import (
    SYSTEM_PROMPT_TEMPLATE,
    USER_PROMPT_TEMPLATE,
    get_system_prompt,
    get_user_prompt,
)


class TestSystemPromptTemplate:
    """系统提示词模板测试。"""

    def test_contains_delimiter_placeholder(self):
        assert "{delimiter}" in SYSTEM_PROMPT_TEMPLATE

    def test_contains_semantic_completeness_rule(self):
        assert "语义完整性" in SYSTEM_PROMPT_TEMPLATE

    def test_contains_self_contained_rule(self):
        assert "自包含性" in SYSTEM_PROMPT_TEMPLATE

    def test_contains_heading_preservation_rule(self):
        assert "标题层级保留" in SYSTEM_PROMPT_TEMPLATE

    def test_contains_table_integrity_rule(self):
        assert "表格完整性" in SYSTEM_PROMPT_TEMPLATE

    def test_contains_granularity_rule(self):
        assert "合理粒度" in SYSTEM_PROMPT_TEMPLATE


class TestUserPromptTemplate:
    """用户提示词模板测试。"""

    def test_contains_text_content_placeholder(self):
        assert "{text_content}" in USER_PROMPT_TEMPLATE


class TestGetSystemPrompt:
    """get_system_prompt 函数测试。"""

    def test_default_delimiter(self):
        result = get_system_prompt()
        assert "---" in result
        assert "{delimiter}" not in result

    def test_custom_delimiter(self):
        result = get_system_prompt("===SPLIT===")
        assert "===SPLIT===" in result
        assert "{delimiter}" not in result

    def test_delimiter_appears_in_format_example(self):
        result = get_system_prompt("***")
        # 分隔符应出现在格式说明和示例中
        assert "`***`" in result

    def test_empty_delimiter(self):
        result = get_system_prompt("")
        assert "{delimiter}" not in result


class TestGetUserPrompt:
    """get_user_prompt 函数测试。"""

    def test_text_content_substitution(self):
        result = get_user_prompt("这是一段测试文本。")
        assert "这是一段测试文本。" in result
        assert "{text_content}" not in result

    def test_preserves_surrounding_markers(self):
        result = get_user_prompt("内容")
        assert "---开始---" in result
        assert "---结束---" in result

    def test_multiline_content(self):
        content = "第一行\n第二行\n第三行"
        result = get_user_prompt(content)
        assert content in result

    def test_empty_content(self):
        result = get_user_prompt("")
        assert "{text_content}" not in result
        assert "---开始---" in result
