Files
ai-terminal-assistant/packages/server/tests/mocks/session.mock.ts
T
kurihada 5835799b69 test(server): 添加 server 模块单元测试
- 新增 vitest 配置和测试基础设施
- 添加 adapter.test.ts: 测试 Core 模块初始化和 Agent 管理 (18 tests)
- 添加 token.test.ts: 测试 Token 生成、验证和中间件 (25 tests)
- 添加 handler.test.ts: 测试权限处理器 (18 tests)
- 添加 ws.test.ts: 测试 WebSocket 连接和消息处理 (19 tests)
- 添加 sse.test.ts: 测试 SSE 事件发送 (14 tests)
- 添加 sessions.test.ts: 测试会话路由 (16 tests)
- 添加 config.test.ts: 测试配置路由 (10 tests)
- 添加 context.test.ts: 测试上下文压缩路由 (9 tests)
- 添加 providers.test.ts: 测试 Provider 管理路由 (18 tests)
- 添加 manager.test.ts: 测试 SessionManager (48 tests)

总计 195 个测试,覆盖率从 0% 提升至 29.59%
2025-12-15 00:07:32 +08:00

153 lines
3.5 KiB
TypeScript

/**
* SessionManager Mock 工厂
*
* 提供会话管理器的 mock 实现
*/
import { vi } from 'vitest';
export interface MockSession {
id: string;
name?: string;
status: 'idle' | 'busy';
createdAt: number;
updatedAt: number;
workdir?: string;
}
export interface MockMessage {
id: string;
role: 'user' | 'assistant';
content: string;
timestamp: number;
}
/**
* 创建 Mock SessionManager
*/
export function createMockSessionManager() {
const sessions = new Map<string, MockSession>();
const messages = new Map<string, MockMessage[]>();
let messageIdCounter = 1;
const manager = {
// 初始化
init: vi.fn().mockResolvedValue(undefined),
// Session CRUD
exists: vi.fn((id: string) => sessions.has(id)),
get: vi.fn((id: string) => sessions.get(id)),
create: vi.fn((data?: Partial<MockSession>) => {
const id = data?.id ?? `session-${Date.now()}`;
const session: MockSession = {
id,
name: data?.name,
status: 'idle',
createdAt: Date.now(),
updatedAt: Date.now(),
workdir: data?.workdir ?? process.cwd(),
};
sessions.set(id, session);
messages.set(id, []);
return session;
}),
delete: vi.fn(async (id: string) => {
const existed = sessions.has(id);
sessions.delete(id);
messages.delete(id);
return existed;
}),
list: vi.fn(() => Array.from(sessions.values())),
// 消息管理
addMessage: vi.fn(async (sessionId: string, msg: { role: 'user' | 'assistant'; content: string }) => {
const msgList = messages.get(sessionId) || [];
const newMsg: MockMessage = {
id: `msg-${messageIdCounter++}`,
role: msg.role,
content: msg.content,
timestamp: Date.now(),
};
msgList.push(newMsg);
messages.set(sessionId, msgList);
return newMsg;
}),
getMessages: vi.fn((id: string) => messages.get(id) || []),
// 状态更新
updateStatus: vi.fn((id: string, status: 'idle' | 'busy') => {
const session = sessions.get(id);
if (session) {
session.status = status;
session.updatedAt = Date.now();
}
}),
updateSessionName: vi.fn(async (id: string, name: string) => {
const session = sessions.get(id);
if (session) {
session.name = name;
session.updatedAt = Date.now();
return session;
}
return null;
}),
// 测试辅助方法
_addSession: (session: MockSession) => {
sessions.set(session.id, session);
messages.set(session.id, []);
},
_addMessage: (sessionId: string, message: MockMessage) => {
const msgList = messages.get(sessionId) || [];
msgList.push(message);
messages.set(sessionId, msgList);
},
_clear: () => {
sessions.clear();
messages.clear();
messageIdCounter = 1;
},
_getSessions: () => sessions,
_getMessages: () => messages,
};
return manager;
}
/**
* 创建测试用的 Session 数据
*/
export function createTestSession(overrides: Partial<MockSession> = {}): MockSession {
return {
id: 'test-session-1',
name: 'Test Session',
status: 'idle',
createdAt: Date.now(),
updatedAt: Date.now(),
workdir: '/test/workdir',
...overrides,
};
}
/**
* 创建测试用的 Message 数据
*/
export function createTestMessage(overrides: Partial<MockMessage> = {}): MockMessage {
return {
id: 'test-msg-1',
role: 'user',
content: 'Test message',
timestamp: Date.now(),
...overrides,
};
}