feat(api): origin seed JSON Schema + validator
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
48
api/tests/test_origin_schema.py
Normal file
48
api/tests/test_origin_schema.py
Normal file
@@ -0,0 +1,48 @@
|
||||
import copy
|
||||
|
||||
from app.canon_log import validate_origin
|
||||
|
||||
VALID_ORIGIN = {
|
||||
"schema_version": 1,
|
||||
"id": "deserter",
|
||||
"display_name": "The Deserter",
|
||||
"description": "You walked away from a company that doesn't allow walking away.",
|
||||
"start_location_id": "greywater_docks",
|
||||
"situation": ["Arrived at Greywater by barge before dawn, hood up"],
|
||||
"opening_facts": ["the player deserted the Iron Kettle mercenary company"],
|
||||
"disposition_overrides": {"brannoc_thane": 40, "cadwyn_vell": 15},
|
||||
"inventory_grants": [{"item_id": "worn_shortsword", "qty": 1}],
|
||||
"start_quest_id": "find_the_ledger",
|
||||
"build_constraints": {
|
||||
"allowed_classes": ["sellsword", "assassin", "priest"],
|
||||
"luck_modifier": 0,
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def test_valid_origin_passes():
|
||||
assert validate_origin(VALID_ORIGIN) == []
|
||||
|
||||
|
||||
def test_null_start_quest_is_allowed():
|
||||
doc = copy.deepcopy(VALID_ORIGIN)
|
||||
doc["start_quest_id"] = None
|
||||
assert validate_origin(doc) == []
|
||||
|
||||
|
||||
def test_unknown_class_is_rejected():
|
||||
doc = copy.deepcopy(VALID_ORIGIN)
|
||||
doc["build_constraints"]["allowed_classes"] = ["bard"]
|
||||
assert validate_origin(doc) != []
|
||||
|
||||
|
||||
def test_missing_required_field_is_rejected():
|
||||
doc = copy.deepcopy(VALID_ORIGIN)
|
||||
del doc["start_location_id"]
|
||||
assert validate_origin(doc) != []
|
||||
|
||||
|
||||
def test_extra_field_is_rejected():
|
||||
doc = copy.deepcopy(VALID_ORIGIN)
|
||||
doc["surprise"] = True
|
||||
assert validate_origin(doc) != []
|
||||
Reference in New Issue
Block a user