67 lines
2.3 KiB
Python
67 lines
2.3 KiB
Python
"""小周天每轮反思抽取纯函数测试。"""
|
|
|
|
from app.modules.extraction.extract import MemoryCandidateDraft
|
|
from app.modules.reflection.extract import parse_reflection
|
|
|
|
|
|
def test_parse_standard() -> None:
|
|
raw = (
|
|
'{"memories":[{"type":"preference","title":"喜欢简洁","content":"用户偏好简洁",'
|
|
'"importance":0.8,"sensitivity":"low","confidence":0.7,"reason":"多次提及"}],'
|
|
'"reflection":"本轮应更主动确认用户意图。"}'
|
|
)
|
|
memories, reflection = parse_reflection(raw)
|
|
assert len(memories) == 1
|
|
assert memories[0].title == "喜欢简洁"
|
|
assert isinstance(memories[0], MemoryCandidateDraft)
|
|
assert reflection == "本轮应更主动确认用户意图。"
|
|
|
|
|
|
def test_parse_markdown_block() -> None:
|
|
raw = '```json\n{"memories":[],"reflection":"反思文本"}\n```'
|
|
memories, reflection = parse_reflection(raw)
|
|
assert memories == []
|
|
assert reflection == "反思文本"
|
|
|
|
|
|
def test_parse_invalid_returns_empty() -> None:
|
|
assert parse_reflection("不是JSON") == ([], "")
|
|
assert parse_reflection("[]") == ([], "")
|
|
|
|
|
|
def test_missing_reflection_returns_empty_string() -> None:
|
|
memories, reflection = parse_reflection('{"memories":[]}')
|
|
assert memories == []
|
|
assert reflection == ""
|
|
|
|
|
|
def test_missing_memories_returns_empty_list() -> None:
|
|
memories, reflection = parse_reflection('{"reflection":"只有反思"}')
|
|
assert memories == []
|
|
assert reflection == "只有反思"
|
|
|
|
|
|
def test_memory_safe_defaults() -> None:
|
|
raw = '{"memories":[{"title":"t","content":"c"}],"reflection":"r"}'
|
|
m = parse_reflection(raw)[0][0]
|
|
assert m.sensitivity == "low"
|
|
assert m.confidence == 0.5
|
|
assert m.importance == 0.5
|
|
|
|
|
|
def test_skip_memory_missing_title_or_content() -> None:
|
|
raw = (
|
|
'{"memories":[{"title":"t"},{"content":"c"},{"title":"t","content":"c"}],"reflection":"r"}'
|
|
)
|
|
assert len(parse_reflection(raw)[0]) == 1
|
|
|
|
|
|
def test_clamp_values() -> None:
|
|
raw = '{"memories":[{"title":"t","content":"c","importance":1.5}],"reflection":"r"}'
|
|
assert parse_reflection(raw)[0][0].importance == 1.0
|
|
|
|
|
|
def test_reflection_strips_whitespace() -> None:
|
|
raw = '{"memories":[],"reflection":" 带空格的反思 "}'
|
|
assert parse_reflection(raw)[1] == "带空格的反思"
|