Add the my-decisions overview store queries and controller (INFD-WP-0003 T01, T02)
Store.memos_for / dispositions_by list the signed-in person's memos and their own dispositions. ReviewController.overview classifies each row after its own fresh PDP read and a live get-by-id engine status; refused rows keep only the memo id, and no presentation is created. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Assistant: claude-code Assistant-Model: opus Assistant-Process: 359683@bnt-lap001 Assistant-Session: eebdc939-7a9b-4e50-9d39-c8437e8a14ec
This commit is contained in:
parent
1e94835c07
commit
f0a9bb1d4c
5 changed files with 208 additions and 3 deletions
|
|
@ -316,3 +316,28 @@ def test_heartbeats_do_not_mask_backlog_and_are_per_class(storage):
|
|||
beats = [json.loads(r["envelope"]) for r in store.evidence() if r["class"] == EventClass.HEARTBEAT.value]
|
||||
assert {b["data"]["class"] for b in beats} == {EventClass.DISPOSITION.value, EventClass.STANCE_APPLICATION.value}
|
||||
assert all(b["data"]["assertion"] == "nothing-to-report" for b in beats)
|
||||
|
||||
|
||||
def test_overview_lists_latest_memos_for_subject_and_their_dispositions(storage):
|
||||
store, memo = storage
|
||||
mine = replace(memo, id="memo-mine", binding=replace(memo.binding,
|
||||
principal=replace(memo.binding.principal, id=HUMAN.sub)))
|
||||
store.save_memo(mine)
|
||||
store.save_memo(replace(mine, version=2, brief="revised"))
|
||||
other_kind = replace(mine, id="memo-group", binding=replace(mine.binding,
|
||||
principal=replace(mine.binding.principal, kind="group")))
|
||||
store.save_memo(other_kind)
|
||||
listed = store.memos_for(HUMAN.sub)
|
||||
assert [(m.id, m.version) for m in listed] == [("memo-mine", 2)]
|
||||
assert store.memos_for("nobody") == []
|
||||
|
||||
old = store.present("memo-mine", principal_sub=HUMAN.sub, expected_version=2,
|
||||
tenant=Claim("tenant:platform", Route.REGISTRATION), principal_type=Claim("human", Route.AUTHENTICATION))
|
||||
store.acknowledge(old.id, HUMAN, ["h-1"])
|
||||
store.record_disposition(old.id, HUMAN, Verb.DISCUSS, operation_id="talk")
|
||||
store.record_disposition(old.id, HUMAN, Verb.ACCEPT, operation_id="yes")
|
||||
history = store.dispositions_by(HUMAN.sub, "memo-mine")
|
||||
assert [(d.verb, s) for d, s in history] == [
|
||||
(Verb.DISCUSS, None), (Verb.ACCEPT, {"state": "prepared", "approved_at": None})]
|
||||
assert store.dispositions_by("someone-else", "memo-mine") == []
|
||||
assert store.dispositions_by(HUMAN.sub, memo.id) == []
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue