Files
life-echo/api/tests/test_chapter_read_view.py
Kevin 53d9e003af feat(api): 叙事 prompt、职业上下文、读路径章节、WS 解耦与错误脱敏
- 回忆录:事实边界补充允许清单;传记文体示例与 JSON 叙事要求对齐
- default 职业提示 occupation_context;cadre/military 退休语境
- GET 章节读路径零写入,prepare_chapter_read_view + markdown_for_response
- 文本归一抽到 core/text_normalize;移除弃用 reply 策略与 recompose_chapters_for_story
- ConversationService:WS 连接/用户段落/结束对话;对外错误固定文案
- 测试:HTTP 脱敏契约、章节读视图、occupation 与 background_voice
2026-04-01 11:55:52 +08:00

63 lines
1.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""章节读路径 prepare_chapter_read_view不写库、临时物化串用于列表/详情。"""
from unittest.mock import MagicMock, patch
from app.features.memoir.reading_segment_materialize import (
chapter_meets_minimum_display,
)
from app.features.memoir.service import prepare_chapter_read_view
def test_prepare_not_dirty_no_override() -> None:
ch = MagicMock()
ch.markdown_compose_dirty = False
ch.reading_segments_json = None
ch.story_links = [MagicMock()]
c, md = prepare_chapter_read_view(ch)
assert c is ch
assert md is None
def test_prepare_dirty_with_snapshot_no_override() -> None:
ch = MagicMock()
ch.markdown_compose_dirty = True
ch.reading_segments_json = [{"story_id": "s1", "body_markdown": "x" * 400}]
ch.story_links = [MagicMock()]
c, md = prepare_chapter_read_view(ch)
assert md is None
def test_prepare_dirty_no_snapshot_no_links_no_override() -> None:
ch = MagicMock()
ch.markdown_compose_dirty = True
ch.reading_segments_json = None
ch.story_links = []
c, md = prepare_chapter_read_view(ch)
assert md is None
def test_prepare_dirty_no_snapshot_with_links_uses_materialize() -> None:
ch = MagicMock()
ch.markdown_compose_dirty = True
ch.reading_segments_json = None
ch.story_links = [MagicMock()]
fake_md = "正文" * 200
with patch(
"app.features.memoir.service.materialize_chapter_markdown_from_loaded_chapter",
return_value=fake_md,
) as m:
c, md = prepare_chapter_read_view(ch)
m.assert_called_once_with(ch)
assert md == fake_md.strip()
assert c is ch
def test_chapter_meets_minimum_uses_override() -> None:
ch = MagicMock()
ch.canonical_markdown = ""
long_md = "" * 400
assert (
chapter_meets_minimum_display(ch, canonical_markdown_override=long_md) is True
)
assert chapter_meets_minimum_display(ch, canonical_markdown_override="") is False