48 lines
1.5 KiB
Python
48 lines
1.5 KiB
Python
import copy
|
|
import json
|
|
from pathlib import Path
|
|
|
|
from app.canon_log import validate_origin
|
|
from app.content import load_world, load_origin, unresolved_refs
|
|
|
|
REPO_ROOT = Path(__file__).resolve().parents[2]
|
|
CONTENT_ROOT = REPO_ROOT / "content"
|
|
DESERTER = CONTENT_ROOT / "origins" / "deserter.json"
|
|
|
|
|
|
def test_deserter_origin_matches_schema():
|
|
assert validate_origin(load_origin(DESERTER)) == []
|
|
|
|
|
|
def test_deserter_ids_all_resolve():
|
|
world = load_world(CONTENT_ROOT)
|
|
assert unresolved_refs(load_origin(DESERTER), world) == []
|
|
|
|
|
|
def test_broken_location_ref_is_detected():
|
|
world = load_world(CONTENT_ROOT)
|
|
origin = copy.deepcopy(load_origin(DESERTER))
|
|
origin["start_location_id"] = "nowhere"
|
|
assert "location:nowhere" in unresolved_refs(origin, world)
|
|
|
|
|
|
def test_broken_item_ref_is_detected():
|
|
world = load_world(CONTENT_ROOT)
|
|
origin = copy.deepcopy(load_origin(DESERTER))
|
|
origin["inventory_grants"].append({"item_id": "ghost_blade", "qty": 1})
|
|
assert "item:ghost_blade" in unresolved_refs(origin, world)
|
|
|
|
|
|
def test_null_quest_ref_resolves():
|
|
world = load_world(CONTENT_ROOT)
|
|
origin = copy.deepcopy(load_origin(DESERTER))
|
|
origin["start_quest_id"] = None
|
|
assert unresolved_refs(origin, world) == []
|
|
|
|
|
|
def test_broken_disposition_npc_ref_is_detected():
|
|
world = load_world(CONTENT_ROOT)
|
|
origin = copy.deepcopy(load_origin(DESERTER))
|
|
origin["disposition_overrides"]["ghost_npc"] = 10
|
|
assert "npc:ghost_npc" in unresolved_refs(origin, world)
|