summaryrefslogtreecommitdiffstats
path: root/packages/meshbay-node/tests/test_chat_store.py
diff options
context:
space:
mode:
authorChristophe Besson <cbesson@gmail.com>2026-10-15 12:57:51 +0200
committerChristophe Besson <cbesson@gmail.com>2026-10-15 12:57:51 +0200
commita86bced1640ac1a695b95ac68b95e3fc581e687d (patch)
treefe8ea8af945e139a2308eb19ad572e10a41b05e4 /packages/meshbay-node/tests/test_chat_store.py
parent988a0eecd522431980174910db28e45a63ff2710 (diff)
downloadmeshbay-a86bced1640ac1a695b95ac68b95e3fc581e687d.tar.gz
refactor(chat): no thread_id — chat has no threads
Nothing ever set it (the page and the CLI sent null) and nothing read it (the node's get_thread had no caller). It is no longer sent by the page or the CLI, in clear or in the sealed payload, nor relayed or served by the node; get_thread and its index are gone, and the protocol and design docs no longer name it. The node still accepts a chat_msg carrying one, from the desktop apps and CLIs already installed, and drops it. The column stays, empty, in chat.db: a node downgraded to an older version names it in every query. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'packages/meshbay-node/tests/test_chat_store.py')
-rw-r--r--packages/meshbay-node/tests/test_chat_store.py36
1 files changed, 26 insertions, 10 deletions
diff --git a/packages/meshbay-node/tests/test_chat_store.py b/packages/meshbay-node/tests/test_chat_store.py
index 2533921..c4dff6d 100644
--- a/packages/meshbay-node/tests/test_chat_store.py
+++ b/packages/meshbay-node/tests/test_chat_store.py
@@ -28,7 +28,6 @@ async def test_save_and_retrieve(store):
assert msgs[0].sender_id == "alice"
assert msgs[0].iteration == 0
assert msgs[0].payload == b"hello"
- assert msgs[0].thread_id is None
@pytest.mark.asyncio
@@ -52,15 +51,32 @@ async def test_get_messages_since(store):
@pytest.mark.asyncio
-async def test_thread_messages(store):
- await store.save_message("alice", 0, b"root", thread_id="t1")
- await store.save_message("bob", 1, b"reply", thread_id="t1")
- await store.save_message("carol", 2, b"other")
-
- thread = await store.get_thread("t1")
- assert len(thread) == 2
- assert thread[0].sender_id == "alice"
- assert thread[1].sender_id == "bob"
+async def test_the_thread_column_stays_for_an_older_node_and_its_index_goes(tmp_path):
+ """Chat has no threads; a node downgraded to a version that still names
+ `thread_id` in every query must keep reading its rows."""
+ import sqlite3
+ path = tmp_path / "chat.db"
+ with sqlite3.connect(path) as c: # as an older node left it
+ c.executescript("""
+ CREATE TABLE messages (id INTEGER PRIMARY KEY AUTOINCREMENT,
+ sender_id TEXT NOT NULL, iteration INTEGER NOT NULL,
+ payload BLOB NOT NULL, timestamp REAL NOT NULL,
+ thread_id TEXT DEFAULT NULL, sender_name TEXT DEFAULT '');
+ CREATE INDEX idx_messages_thread ON messages(thread_id);
+ INSERT INTO messages (sender_id, iteration, payload, timestamp, thread_id)
+ VALUES ('alice', 0, X'6869', 1.0, 't1');""")
+ s = ChatStore(path)
+ await s.open()
+ await s.save_message("bob", 1, b"now")
+ assert [m.payload for m in await s.get_recent()] == [b"hi", b"now"]
+ await s.close()
+ with sqlite3.connect(path) as c:
+ assert "thread_id" in [r[1] for r in c.execute("PRAGMA table_info(messages)")]
+ assert not c.execute("SELECT 1 FROM sqlite_master WHERE name = "
+ "'idx_messages_thread'").fetchone()
+ # What an older node selects still answers.
+ assert c.execute("SELECT thread_id FROM messages ORDER BY id").fetchall() == [
+ ("t1",), (None,)]
@pytest.mark.asyncio