44 lines
1.7 KiB
TypeScript
44 lines
1.7 KiB
TypeScript
|
|
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);
|
||
|
|
});
|