Files
im_webapp/web/tests/unread-cursor.test.mjs
T

36 lines
1.5 KiB
JavaScript

import assert from 'node:assert/strict';
import test from 'node:test';
import { fileURLToPath } from 'node:url';
import { createJiti } from 'jiti';
globalThis.__APP_VERSION__ = 'test';
globalThis.window = { addEventListener() {}, removeEventListener() {} };
const jiti = createJiti(import.meta.url, { alias: { '@': fileURLToPath(new URL('../src', import.meta.url)) } });
const { getConfirmedRead, markConfirmedRead, repairContactReadState } = await jiti.import('../src/lib/tinode/topics.ts');
const LOCAL_SEQID = 0xfffffff;
test('optimistic local sequence never advances the confirmed read cursor', () => {
markConfirmedRead('unread-cursor-test', 260);
markConfirmedRead('unread-cursor-test', LOCAL_SEQID);
assert.equal(getConfirmedRead('unread-cursor-test'), 260);
markConfirmedRead('unread-cursor-test', 267);
assert.equal(getConfirmedRead('unread-cursor-test'), 267);
});
test('repairs existing negative unread counts caused by local sequence IDs', () => {
for (const seq of [260, 267]) {
const contact = { seq, read: LOCAL_SEQID, recv: LOCAL_SEQID, unread: seq - LOCAL_SEQID };
assert.equal(contact.unread, seq === 260 ? -268435195 : -268435188);
repairContactReadState(contact);
assert.deepEqual(contact, { seq, read: seq, recv: seq, unread: 0 });
}
});
test('keeps valid read and unread state unchanged', () => {
const contact = { seq: 267, read: 260, recv: 265, unread: 7 };
repairContactReadState(contact);
assert.deepEqual(contact, { seq: 267, read: 260, recv: 265, unread: 7 });
});