Files

91 lines
2.6 KiB
JavaScript

import assert from "node:assert/strict";
import { test, afterEach } from "node:test";
import {
getConversation,
listMessagesByConversation,
updateConversationFromMessage,
writeMessages,
closeDmDb,
} from "../js/storage/dmDb.js";
const { indexedDB, IDBKeyRange } = await import("fake-indexeddb");
if (!globalThis.indexedDB) {
globalThis.indexedDB = indexedDB;
globalThis.IDBKeyRange = IDBKeyRange;
}
async function deleteDatabase(name) {
await new Promise((resolve) => {
const request = indexedDB.deleteDatabase(name);
request.onsuccess = () => resolve();
request.onerror = () => resolve();
request.onblocked = () => resolve();
});
}
afterEach(async () => {
await closeDmDb();
await deleteDatabase("bitvidDm");
});
test("writeMessages normalizes records before storing", async () => {
const conversationId = "dm:abcd:efgh";
const result = await writeMessages({
id: "message-1",
conversationId: ` ${conversationId} `,
senderPubkey: "SENDERPUBKEY",
receiverPubkey: "RECEIVERPUBKEY",
createdAt: 1_700_000_500,
kind: 4,
content: "Hello",
tags: [["p", "RECEIVERPUBKEY"]],
status: "published",
seen: true,
encryptionScheme: "nip04",
});
assert.equal(result.length, 1);
const stored = await listMessagesByConversation(conversationId);
assert.equal(stored.length, 1);
assert.equal(stored[0].conversation_id, conversationId);
assert.equal(stored[0].sender_pubkey, "senderpubkey");
assert.equal(stored[0].receiver_pubkey, "receiverpubkey");
assert.equal(stored[0].status, "published");
assert.equal(stored[0].seen, true);
assert.equal(stored[0].encryption_scheme, "nip04");
});
test("updateConversationFromMessage persists metadata updates", async () => {
const conversationId = "dm:meta:updates";
const message = {
id: "message-2",
conversation_id: conversationId,
sender_pubkey: "sender",
receiver_pubkey: "receiver",
created_at: 1_700_000_510,
kind: 4,
content: "Preview payload",
seen: false,
};
const updated = await updateConversationFromMessage(message, {
preview: "Preview payload",
unseenDelta: 1,
downloadedUntil: 1_700_000_510,
});
assert.ok(updated);
assert.equal(updated.conversation_id, conversationId);
assert.equal(updated.last_message_preview, "Preview payload");
assert.equal(updated.unseen_count, 1);
const stored = await getConversation(conversationId);
assert.ok(stored);
assert.equal(stored.conversation_id, conversationId);
assert.equal(stored.last_message_preview, "Preview payload");
assert.equal(stored.unseen_count, 1);
});