claire/tests/test_decision_pin.py
Natalie c6bd77cc5b feat(@projects/@claire): add pinned decision feature
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-06-01 02:36:07 -06:00

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