51 lines
1.8 KiB
Python
51 lines
1.8 KiB
Python
import pytest
|
|
|
|
from content_build.errors import BuildError
|
|
from content_build.model import Entry, entry_from_raw
|
|
from content_build.parse import RawEntry
|
|
|
|
|
|
def _raw(**over) -> RawEntry:
|
|
data = {"id": "town.a", "type": "town", "status": "canon",
|
|
"secrecy": 0, "related": []}
|
|
data.update(over)
|
|
return RawEntry(data=data, source="t:1")
|
|
|
|
|
|
def test_namespace_and_slug():
|
|
e = entry_from_raw(_raw(id="npc.mera-fenn", type="person",
|
|
start_disposition="cold",
|
|
knows=[{"fact": "rumor.x", "gate": "warm"}]))
|
|
assert e.namespace == "npc"
|
|
assert e.slug == "mera-fenn"
|
|
|
|
|
|
def test_category_predicates():
|
|
npc = entry_from_raw(_raw(id="npc.t", type="person",
|
|
start_disposition="cold",
|
|
knows=[{"fact": "rumor.x", "gate": "warm"}]))
|
|
person = entry_from_raw(_raw(id="person.p", type="person"))
|
|
rumor = entry_from_raw(_raw(id="rumor.x", type="rumor", secrecy=1))
|
|
assert npc.is_npc_layer and not npc.is_canon_entity
|
|
assert person.is_canon_entity and not person.is_npc_layer
|
|
assert rumor.is_knowledge and not rumor.is_canon_entity
|
|
|
|
|
|
def test_knows_parsed_into_links():
|
|
e = entry_from_raw(_raw(id="npc.t", type="person", start_disposition="cold",
|
|
knows=[{"fact": "rumor.x", "gate": "neutral"}]))
|
|
assert e.knows[0].fact_id == "rumor.x"
|
|
assert e.knows[0].gate == "neutral"
|
|
|
|
|
|
def test_missing_required_field_raises():
|
|
bad = RawEntry(data={"id": "town.a", "type": "town"}, source="t:1")
|
|
with pytest.raises(BuildError):
|
|
entry_from_raw(bad)
|
|
|
|
|
|
def test_knows_missing_gate_raises():
|
|
with pytest.raises(BuildError):
|
|
entry_from_raw(_raw(id="npc.t", type="person", start_disposition="cold",
|
|
knows=[{"fact": "rumor.x"}]))
|