diff options
Diffstat (limited to 'packages/meshbay-node/tests/test_chat_store.py')
| -rw-r--r-- | packages/meshbay-node/tests/test_chat_store.py | 36 |
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 |