Files
cinny/src/app/state/room/thread.test.ts
T

44 lines
1.7 KiB
TypeScript
Raw Normal View History

import { test } from 'node:test';
import assert from 'node:assert/strict';
import { createStore } from 'jotai';
import { getThreadDraftKey, roomIdToActiveThreadIdAtomFamily } from './thread';
// ---------------------------------------------------------------------------
// getThreadDraftKey
// ---------------------------------------------------------------------------
test('getThreadDraftKey joins roomId and threadRootId with "::"', () => {
assert.equal(getThreadDraftKey('!room:server', '$root'), '!room:server::$root');
});
test('getThreadDraftKey keeps the two ids distinguishable', () => {
assert.notEqual(getThreadDraftKey('!a:server', '$b'), getThreadDraftKey('!a:server', '$c'));
});
// ---------------------------------------------------------------------------
// roomIdToActiveThreadIdAtomFamily
// ---------------------------------------------------------------------------
test('returns the same atom instance for the same roomId', () => {
const a = roomIdToActiveThreadIdAtomFamily('!room:server');
const b = roomIdToActiveThreadIdAtomFamily('!room:server');
assert.equal(a, b);
});
test('returns different atoms for different roomIds', () => {
const a = roomIdToActiveThreadIdAtomFamily('!a:server');
const b = roomIdToActiveThreadIdAtomFamily('!b:server');
assert.notEqual(a, b);
});
test('the active-thread atom defaults to null and is writable', () => {
const store = createStore();
const activeThreadIdAtom = roomIdToActiveThreadIdAtomFamily('!store:server');
assert.equal(store.get(activeThreadIdAtom), null);
store.set(activeThreadIdAtom, '$root');
assert.equal(store.get(activeThreadIdAtom), '$root');
store.set(activeThreadIdAtom, null);
assert.equal(store.get(activeThreadIdAtom), null);
});