初始化提交
This commit is contained in:
commit
887c1f449e
963 files changed
+166869
No files matched your search
@@ -0,0 +1,65 @@
|
||||
"""角色卡导出映射单元测试。"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from app.models.character import Character
|
||||
from app.models.lorebook import Lorebook, LorebookEntry
|
||||
from app.modules.imports.export_mapping import character_to_card, lorebook_to_st_book
|
||||
from app.repositories.json_utils import dumps
|
||||
|
||||
|
||||
def _character(**kw: object) -> Character:
|
||||
base: dict[str, object] = {
|
||||
"name": "狂三",
|
||||
"profile_json": "{}",
|
||||
}
|
||||
base.update(kw)
|
||||
return Character(**base) # type: ignore[arg-type]
|
||||
|
||||
|
||||
def test_character_to_card_basic() -> None:
|
||||
char = _character(
|
||||
display_name="三三",
|
||||
personality_summary="腹黑",
|
||||
profile_json=dumps({"background": "desc", "scenario": "sch", "tags": ["a"],
|
||||
"source_meta": {"creator": "X", "character_version": "1"}}),
|
||||
)
|
||||
card = character_to_card(char)
|
||||
assert card["spec"] == "chara_card_v3"
|
||||
assert card["spec_version"] == "3.0"
|
||||
data = card["data"]
|
||||
assert data["name"] == "狂三"
|
||||
assert data["nickname"] == "三三"
|
||||
assert data["personality"] == "腹黑"
|
||||
assert data["description"] == "desc"
|
||||
assert data["creator"] == "X"
|
||||
assert data["character_version"] == "1"
|
||||
|
||||
|
||||
def test_no_nickname_when_same_as_name() -> None:
|
||||
char = _character(name="X", display_name="X")
|
||||
assert "nickname" not in character_to_card(char)["data"]
|
||||
|
||||
|
||||
def test_personality_from_daoti_snapshot() -> None:
|
||||
# 道体 personality_summary 是导出的 personality 来源(演化后的当前快照)
|
||||
char = _character(personality_summary="演化后的人格")
|
||||
assert character_to_card(char)["data"]["personality"] == "演化后的人格"
|
||||
|
||||
|
||||
def test_lorebook_exported_to_st_book() -> None:
|
||||
book = Lorebook(name="谱", scan_depth=4, recursive_scanning=True)
|
||||
entries = [
|
||||
LorebookEntry(keys_json='["猫"]', content="喜欢猫", constant=True, position="after_char"),
|
||||
]
|
||||
st_book = lorebook_to_st_book(book, entries)
|
||||
assert st_book["name"] == "谱"
|
||||
assert st_book["scan_depth"] == 4
|
||||
assert st_book["recursive_scanning"] is True
|
||||
assert st_book["entries"][0]["keys"] == ["猫"]
|
||||
assert st_book["entries"][0]["constant"] is True
|
||||
|
||||
|
||||
def test_no_character_book_when_lorebook_none() -> None:
|
||||
char = _character()
|
||||
assert "character_book" not in character_to_card(char)["data"]
|
||||
Reference in new issue
Block a user