10c848ca2a
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
66 lines
2.0 KiB
TypeScript
66 lines
2.0 KiB
TypeScript
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
import { SessionStore } from './store.js';
|
|
import { unlinkSync, existsSync } from 'fs';
|
|
import { join } from 'path';
|
|
import { tmpdir } from 'os';
|
|
|
|
describe('SessionStore', () => {
|
|
const dbPath = join(tmpdir(), 'flynn-test-sessions.db');
|
|
let store: SessionStore;
|
|
|
|
beforeEach(() => {
|
|
store = new SessionStore(dbPath);
|
|
});
|
|
|
|
afterEach(() => {
|
|
store.close();
|
|
if (existsSync(dbPath)) {
|
|
unlinkSync(dbPath);
|
|
}
|
|
});
|
|
|
|
it('saves and retrieves messages', () => {
|
|
const sessionId = 'test-session';
|
|
|
|
store.addMessage(sessionId, { role: 'user', content: 'Hello' });
|
|
store.addMessage(sessionId, { role: 'assistant', content: 'Hi there!' });
|
|
|
|
const messages = store.getMessages(sessionId);
|
|
|
|
expect(messages).toHaveLength(2);
|
|
expect(messages[0].role).toBe('user');
|
|
expect(messages[0].content).toBe('Hello');
|
|
expect(messages[1].role).toBe('assistant');
|
|
expect(messages[1].content).toBe('Hi there!');
|
|
});
|
|
|
|
it('clears session messages', () => {
|
|
const sessionId = 'test-session';
|
|
|
|
store.addMessage(sessionId, { role: 'user', content: 'Hello' });
|
|
store.clearSession(sessionId);
|
|
|
|
const messages = store.getMessages(sessionId);
|
|
expect(messages).toHaveLength(0);
|
|
});
|
|
|
|
it('handles multiple sessions independently', () => {
|
|
store.addMessage('session-1', { role: 'user', content: 'Session 1' });
|
|
store.addMessage('session-2', { role: 'user', content: 'Session 2' });
|
|
|
|
expect(store.getMessages('session-1')).toHaveLength(1);
|
|
expect(store.getMessages('session-2')).toHaveLength(1);
|
|
expect(store.getMessages('session-1')[0].content).toBe('Session 1');
|
|
});
|
|
|
|
it('lists all sessions', () => {
|
|
store.addMessage('session-a', { role: 'user', content: 'A' });
|
|
store.addMessage('session-b', { role: 'user', content: 'B' });
|
|
|
|
const sessions = store.listSessions();
|
|
|
|
expect(sessions).toContain('session-a');
|
|
expect(sessions).toContain('session-b');
|
|
});
|
|
});
|