59 lines
2.0 KiB
TypeScript
59 lines
2.0 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import { CanvasStore } from './canvas-store.js';
|
|
|
|
describe('CanvasStore', () => {
|
|
it('stores and retrieves artifacts per session', () => {
|
|
const store = new CanvasStore();
|
|
const artifact = store.put('ws:1', {
|
|
id: 'a1',
|
|
type: 'note',
|
|
content: { text: 'hello' },
|
|
});
|
|
|
|
expect(artifact.id).toBe('a1');
|
|
expect(store.get('ws:1', 'a1')?.type).toBe('note');
|
|
expect(store.list('ws:1')).toHaveLength(1);
|
|
});
|
|
|
|
it('updates existing artifacts while preserving createdAt', async () => {
|
|
const store = new CanvasStore();
|
|
const first = store.put('ws:1', {
|
|
id: 'a1',
|
|
type: 'note',
|
|
content: { text: 'one' },
|
|
});
|
|
await new Promise((resolve) => setTimeout(resolve, 2));
|
|
const second = store.put('ws:1', {
|
|
id: 'a1',
|
|
type: 'note',
|
|
content: { text: 'two' },
|
|
});
|
|
|
|
expect(second.createdAt).toBe(first.createdAt);
|
|
expect(second.updatedAt).toBeGreaterThanOrEqual(first.updatedAt);
|
|
expect(store.get('ws:1', 'a1')?.content).toEqual({ text: 'two' });
|
|
});
|
|
|
|
it('deletes and clears session artifacts', () => {
|
|
const store = new CanvasStore();
|
|
store.put('ws:1', { id: 'a1', type: 'note', content: 'x' });
|
|
store.put('ws:1', { id: 'a2', type: 'note', content: 'y' });
|
|
|
|
expect(store.delete('ws:1', 'a1')).toBe(true);
|
|
expect(store.delete('ws:1', 'missing')).toBe(false);
|
|
expect(store.list('ws:1')).toHaveLength(1);
|
|
expect(store.clear('ws:1')).toBe(1);
|
|
expect(store.list('ws:1')).toEqual([]);
|
|
});
|
|
|
|
it('evicts oldest artifact when per-session cap is exceeded', () => {
|
|
const store = new CanvasStore(2);
|
|
store.put('ws:1', { id: 'a1', type: 'note', content: 1 });
|
|
store.put('ws:1', { id: 'a2', type: 'note', content: 2 });
|
|
store.put('ws:1', { id: 'a3', type: 'note', content: 3 });
|
|
|
|
expect(store.get('ws:1', 'a1')).toBeUndefined();
|
|
expect(store.list('ws:1').map((a) => a.id).sort()).toEqual(['a2', 'a3']);
|
|
});
|
|
});
|