Files
code_of_conquest_dnd/api/tests/test_content_npc.py

42 lines
1.4 KiB
Python

import json
import app.content as content
def test_load_npc_returns_parsed_file(tmp_path, monkeypatch):
root = tmp_path / "content"
(root / "world" / "npcs").mkdir(parents=True)
(root / "world" / "npcs" / "fenn.json").write_text(
json.dumps({"id": "fenn", "name": "Fenn", "persona": "clerk",
"knowledge": ["a"], "capabilities": {}})
)
monkeypatch.setenv("CONTENT_ROOT", str(root))
npc = content.load_npc("fenn")
assert npc["name"] == "Fenn"
assert npc["knowledge"] == ["a"]
def test_load_npc_unknown_returns_none(tmp_path, monkeypatch):
(tmp_path / "content" / "world").mkdir(parents=True)
monkeypatch.setenv("CONTENT_ROOT", str(tmp_path / "content"))
assert content.load_npc("nobody") is None
def test_content_root_env_override(tmp_path, monkeypatch):
monkeypatch.setenv("CONTENT_ROOT", str(tmp_path))
assert content._content_root() == tmp_path
def test_fenn_resolves_from_repo_content():
# No CONTENT_ROOT env — exercises the walk-up resolver against real content.
npc = content.load_npc("fenn")
assert npc is not None
assert npc["capabilities"]["offerable_quests"] == ["find_the_ledger"]
assert npc["knowledge"] # non-empty authored knowledge list
def test_npc_prompt_body_is_authored():
from app import prompts
body = prompts.system_prompt("npc")
assert "MOVE" in body and len(body) > 200