spi / tests /unit /test_state.py
desiree's picture
Fix append test: append model, not dict
897318a verified
Raw History Blame Contribute Delete
2.28 kB
import pytest
from spi.schemas.project_state import Constraint, ProjectState
def test_delta_bumps_version_and_logs():
s = ProjectState(prompt="a lighthouse at dusk")
v0 = s.state_version
s.apply_delta("Test", "set_intent", "goal set",
[{"op": "set", "path": "intent.goal", "value": "lighthouse"}])
assert s.state_version == v0 + 1
assert s.mutations[-1].agent == "Test"
assert s.mutations[-1].version == s.state_version
def test_nested_delta_merge():
s = ProjectState()
s.apply_delta("T", "a", "merge concept",
[{"op": "merge", "path": "concept", "value": {"theme": "memory"}}])
s.apply_delta("T", "a", "merge more",
[{"op": "merge", "path": "concept", "value": {"camera": "slow push"}}])
assert s.concept["theme"] == "memory" and s.concept["camera"] == "slow push"
def test_append_delta():
s = ProjectState()
s.apply_delta("T", "a", "add constraint",
[{"op": "append", "path": "constraints",
"value": Constraint(constraint_id="C_001", text="no dialogue")}])
assert s.constraints[0].constraint_id == "C_001"
assert s.constraints[0].hard is True
def test_unknown_op_raises():
s = ProjectState()
try:
s.apply_delta("T", "a", "bad", [{"op": "delete", "path": "concept", "value": {}}])
raise AssertionError("unknown op must raise")
except ValueError as e:
assert "delete" in str(e)
def test_lazy_get_context():
s = ProjectState(prompt="x")
s.apply_delta("T", "a", "s", [{"op": "set", "path": "intent.goal", "value": "g"}])
ctx = s.get_context(["intent.goal", "concept.missing"])
assert ctx["intent.goal"] == "g" and ctx["concept.missing"] is None
def test_json_roundtrip():
s = ProjectState(prompt="roundtrip")
s.apply_delta("T", "a", "s", [{"op": "set", "path": "intent.goal", "value": "g"}])
s2 = ProjectState.from_json(s.to_json())
assert s2.prompt == "roundtrip" and s2.state_version == s.state_version
assert len(s2.mutations) == 1
def test_validate_assignment_coerces_dicts():
s = ProjectState()
s.plan = {"project_id": "SPI-X", "scenes": [], "shots": [], "jobs": []}
assert hasattr(s.plan, "shots") # dict coerced into ProductionPlan