46 lines
1.4 KiB
Python
46 lines
1.4 KiB
Python
"""Decision pinning — DecisionPinned event + projection + service (migration 0012)."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from claire import events as ev
|
|
from claire.db import migrate, open_db
|
|
from claire.domain import DecisionMaker
|
|
from claire.hlc import HLCGenerator
|
|
from claire.web import service
|
|
|
|
|
|
def _conn():
|
|
conn = open_db(":memory:")
|
|
migrate(conn)
|
|
return conn
|
|
|
|
|
|
def test_decision_defaults_unpinned_then_toggles():
|
|
conn = _conn()
|
|
gen = HLCGenerator("m")
|
|
d = service.record_decision(conn, gen, made_by=DecisionMaker.USER, text="ship it")
|
|
assert d.pinned is False
|
|
|
|
pinned = service.pin_decision(conn, gen, decision_id=str(d.id), pinned=True)
|
|
assert pinned.pinned is True
|
|
|
|
unpinned = service.pin_decision(conn, gen, decision_id=str(d.id), pinned=False)
|
|
assert unpinned.pinned is False
|
|
|
|
|
|
def test_pin_unknown_decision_raises():
|
|
conn = _conn()
|
|
gen = HLCGenerator("m")
|
|
import pytest
|
|
|
|
with pytest.raises(service.NotFound):
|
|
service.pin_decision(conn, gen, decision_id="00000000-0000-0000-0000-000000000000", pinned=True)
|
|
|
|
|
|
def test_pinned_survives_replay():
|
|
conn = _conn()
|
|
gen = HLCGenerator("m")
|
|
d = service.record_decision(conn, gen, made_by=DecisionMaker.CLAIRE, text="x")
|
|
service.pin_decision(conn, gen, decision_id=str(d.id), pinned=True)
|
|
ev.replay(conn)
|
|
assert service.read.get_decision(conn, d.id).pinned is True
|