Schedule consultation bridges on demand and preserve delivery evidence
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
"""Transport evidence and demand survive storage reopen without resending."""
|
||||
import json
|
||||
import tempfile
|
||||
import time
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
from agent_control.store import Store
|
||||
from agent_control.conversation import project
|
||||
from test_decision_workflow import bind
|
||||
from test_decisions import definition
|
||||
|
||||
|
||||
class DemandTests(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.tmp=tempfile.TemporaryDirectory()
|
||||
self.path=Path(self.tmp.name)/'state.sqlite3'
|
||||
self.store=Store(self.path)
|
||||
self.store.decision(definition())
|
||||
bind(self.store)
|
||||
|
||||
def tearDown(self):
|
||||
self.tmp.cleanup()
|
||||
|
||||
def demand(self):
|
||||
return Store(self.path).decision_bindings()['bindings'][0]['demand']
|
||||
|
||||
def test_persisted_queue_and_expired_claims_have_distinct_demand(self):
|
||||
m=self.store.send(dict(session_id='consult',text='Question',idempotency_key='one'))
|
||||
self.assertEqual(m['delivery_stage'],'queued')
|
||||
self.assertEqual(self.demand()['queued'],1)
|
||||
self.assertEqual(self.demand()['human_queued'],1)
|
||||
self.assertIsNotNone(self.demand()['oldest_queued_at'])
|
||||
claim=self.store.claim(dict(session_id='consult',worker_id='worker',lease_seconds=10))['message']
|
||||
self.assertEqual(self.demand()['inflight'],1)
|
||||
with self.store.db() as db:
|
||||
db.execute('UPDATE messages SET lease_until=? WHERE id=?',(time.time()-1,m['id']))
|
||||
self.assertEqual(self.demand()['queued'],1)
|
||||
with self.store.db() as db:
|
||||
db.execute('UPDATE messages SET started=1 WHERE id=?',(m['id'],))
|
||||
self.assertEqual(self.demand()['uncertain'],1)
|
||||
self.assertEqual(self.demand()['queued'],0)
|
||||
self.assertEqual(Store(self.path).send(dict(session_id='consult',text='Question',idempotency_key='one'))['id'],m['id'])
|
||||
self.assertEqual(len(self.store.messages('consult')),1)
|
||||
|
||||
def test_safe_projection_uses_host_evidence_not_local_start(self):
|
||||
m=self.store.send(dict(session_id='consult',text='Question',idempotency_key='one'))
|
||||
stages=[('claimed',None,None,'queued'),
|
||||
('claimed',dict(state='submitting'),None,'queued'),
|
||||
('claimed',dict(state='accepted',receipt_id='private'),None,'delivered'),
|
||||
('claimed',dict(state='observed',turn_id='private'),None,'processing'),
|
||||
('uncertain',dict(state='accepted'),None,'blocked'),
|
||||
('completed',dict(state='observed'),'reply','replied')]
|
||||
for status,submission,response,expected in stages:
|
||||
with self.store.db() as db:
|
||||
db.execute('UPDATE messages SET status=?,started=1,submission=?,response_id=? WHERE id=?',
|
||||
(status,json.dumps(submission) if submission else None,response,m['id']))
|
||||
view=Store(self.path).conversation('consult')[0]
|
||||
self.assertEqual(view['delivery_stage'],expected)
|
||||
self.assertNotIn('submission',view)
|
||||
self.assertNotIn('private',json.dumps(view))
|
||||
|
||||
def test_mirrored_history_does_not_fabricate_delivery_proof(self):
|
||||
row=dict(id='history',text='Question',source='human',origin='session_history',status='delivered',created=1)
|
||||
self.assertNotIn('delivery_stage',project([row],[])[0])
|
||||
|
||||
|
||||
if __name__=='__main__':
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user