71 lines
2.2 KiB
Python
71 lines
2.2 KiB
Python
"""角色卡字段映射单元测试。"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from app.modules.imports.card_parser import CharacterCard
|
|
from app.modules.imports.mapping import (
|
|
card_to_daoti,
|
|
card_to_profile,
|
|
character_book_to_entries,
|
|
)
|
|
|
|
|
|
def _card(**kw: object) -> CharacterCard:
|
|
base: dict[str, object] = {"spec_version": "2.0", "name": "狂三"}
|
|
base.update(kw)
|
|
return CharacterCard(**base) # type: ignore[arg-type]
|
|
|
|
|
|
def test_profile_maps_core_fields() -> None:
|
|
card = _card(
|
|
description="desc",
|
|
scenario="sch",
|
|
first_mes="hi",
|
|
tags=["a"],
|
|
creator="X",
|
|
character_version="1",
|
|
)
|
|
profile = card_to_profile(card)
|
|
assert profile["background"] == "desc"
|
|
assert profile["scenario"] == "sch"
|
|
assert profile["first_mes"] == "hi"
|
|
assert profile["tags"] == ["a"]
|
|
assert profile["source_meta"]["creator"] == "X"
|
|
assert profile["source_meta"]["spec_version"] == "2.0"
|
|
|
|
|
|
def test_profile_preserves_system_prompt_and_extensions() -> None:
|
|
card = _card(system_prompt="SP", extensions={"foo": {"bar": 1}})
|
|
profile = card_to_profile(card)
|
|
assert profile["system_prompt"] == "SP"
|
|
assert profile["st_extensions"] == {"foo": {"bar": 1}}
|
|
|
|
|
|
def test_daoti_personality_as_initial_summary() -> None:
|
|
assert card_to_daoti(_card(personality="腹黑优雅"))["personality_summary"] == "腹黑优雅"
|
|
|
|
|
|
def test_daoti_empty_personality_is_none() -> None:
|
|
assert card_to_daoti(_card())["personality_summary"] is None
|
|
|
|
|
|
def test_book_to_entries_maps_fields() -> None:
|
|
book = {
|
|
"entries": [
|
|
{"keys": ["猫"], "content": "喜欢猫", "position": "after_char", "constant": True},
|
|
{"keys": ["时间"], "content": "时间能力", "priority": 5},
|
|
]
|
|
}
|
|
entries = character_book_to_entries(book)
|
|
assert len(entries) == 2
|
|
assert entries[0]["keys"] == ["猫"]
|
|
assert entries[0]["constant"] is True
|
|
assert entries[1]["priority"] == 5
|
|
assert entries[1]["position"] == "after_char" # 默认
|
|
|
|
|
|
def test_book_none_or_empty() -> None:
|
|
assert character_book_to_entries(None) == []
|
|
assert character_book_to_entries({}) == []
|
|
assert character_book_to_entries({"entries": []}) == []
|