import json import sqlite3 from tamq.store import Store def test_message_history_and_jsonl(tmp_path): store = Store(tmp_path / "tamq.sqlite3") message_id = store.add("net-kingdom", "railiance-platform", "hello") rows = store.list(target="railiance-platform") assert rows[0]["message_id"] == message_id output = tmp_path / "messages.jsonl" store.export(rows, output) assert json.loads(output.read_text())["body"] == "hello" assert store.db.execute("PRAGMA journal_mode").fetchone()[0] == "wal" store.close() def test_store_migrates_legacy_endpoint_rows_to_manual_delivery(tmp_path): path = tmp_path / "legacy.sqlite3" db = sqlite3.connect(path) db.executescript( """ CREATE TABLE metadata (key TEXT PRIMARY KEY, value TEXT NOT NULL); INSERT INTO metadata VALUES('schema_version', '1'); CREATE TABLE endpoints ( endpoint_id TEXT PRIMARY KEY, pid INTEGER NOT NULL, session TEXT NOT NULL, repos TEXT NOT NULL, connected_at REAL NOT NULL, disconnected_at REAL ); INSERT INTO endpoints VALUES('legacy', 1, 'tamq', '[\"repo\"]', 1, NULL); """ ) db.commit() db.close() store = Store(path) assert store.endpoints()[0]["delivery_mode"] == "manual" assert store.db.execute( "SELECT value FROM metadata WHERE key='schema_version'" ).fetchone()[0] == "6" assert "displayed_at" in { row["name"] for row in store.db.execute("PRAGMA table_info(messages)") } assert store.db.execute( "SELECT COUNT(*) FROM protocol_events" ).fetchone()[0] == 0 def test_protocol_ledger_is_atomic_and_not_duplicated_on_reopen(tmp_path): path = tmp_path / "queue.sqlite3" store = Store(path) message_id = store.add( "source", "target", "first\nsecond", provenance="worker_output" ) event = store.protocol_events(message_id=message_id)[0] assert event["event_type"] == "message.accepted" assert event["repo"] == "source" assert event["peer_repo"] == "target" assert json.loads(event["detail"]) == {"line_count": 2} store.close() reopened = Store(path) assert len(reopened.protocol_events(message_id=message_id)) == 1 reopened.close() def test_schema_v5_backfills_existing_message_lifecycle(tmp_path): path = tmp_path / "legacy-messages.sqlite3" store = Store(path) message_id = store.add("a", "b", "old") store.db.execute("DELETE FROM protocol_events") store.db.execute( "UPDATE messages SET displayed_at=2,injected_at=3,acknowledged_at=4 " "WHERE message_id=?", (message_id,), ) store.db.commit() store.close() migrated = Store(path) assert [row["event_type"] for row in migrated.protocol_events()] == [ "delivery.displayed", "delivery.injected", "message.acknowledged", "message.accepted", ] assert all( json.loads(row["detail"])["backfilled"] is True for row in migrated.protocol_events() ) migrated.close() def test_mark_displayed_releases_lease_without_acknowledging(tmp_path): store = Store(tmp_path / "queue.sqlite3") message_id = store.add("a", "b", "hello") lease_id = store.claim(message_id, "endpoint") assert lease_id is not None assert store.mark_displayed(message_id, lease_id) is True row = store.list()[0] assert row["state"] == "pending" assert row["displayed_at"] is not None assert store.db.execute("SELECT COUNT(*) FROM leases").fetchone()[0] == 0 store.close()