hyperchat/packages/core/tests/basic.test.ts

152 lines
4.6 KiB
TypeScript

import { describe, it, expect, beforeEach, afterEach } from 'vitest';
import * as fs from 'fs';
import * as path from 'path';
import * as os from 'os';
// 基础测试,不导入目标模块
describe('基础测试', () => {
let tempDir: string;
beforeEach(() => {
tempDir = path.join(os.tmpdir(), 'hyperchat-basic-test', Date.now().toString());
fs.mkdirSync(tempDir, { recursive: true });
});
afterEach(() => {
if (fs.existsSync(tempDir)) {
fs.rmSync(tempDir, { recursive: true, force: true });
}
});
it('应该能够创建和管理文件系统', () => {
expect(fs.existsSync(tempDir)).toBe(true);
const testFile = path.join(tempDir, 'test.txt');
fs.writeFileSync(testFile, 'test content');
expect(fs.existsSync(testFile)).toBe(true);
expect(fs.readFileSync(testFile, 'utf-8')).toBe('test content');
});
it('应该能够处理JSON数据', () => {
const testData = {
name: 'test-agent',
key: 'agent-123',
prompt: 'You are a test agent.',
allowMCPs: ['test-mcp'],
isConfirmCallTool: false,
created: Date.now(),
lastModified: Date.now(),
};
const testFile = path.join(tempDir, 'agent.json');
fs.writeFileSync(testFile, JSON.stringify(testData, null, 2));
const loadedData = JSON.parse(fs.readFileSync(testFile, 'utf-8'));
expect(loadedData).toEqual(testData);
});
it('应该能够创建目录结构', async () => {
const agentsDir = path.join(tempDir, 'agents');
const agent1Dir = path.join(agentsDir, 'agent1');
const chatLogsDir = path.join(agent1Dir, 'chatlogs');
await fs.promises.mkdir(chatLogsDir, { recursive: true });
expect(fs.existsSync(agentsDir)).toBe(true);
expect(fs.existsSync(agent1Dir)).toBe(true);
expect(fs.existsSync(chatLogsDir)).toBe(true);
});
it('应该能够扫描目录', async () => {
// 创建测试目录结构
const subDir1 = path.join(tempDir, 'subdir1');
const subDir2 = path.join(tempDir, 'subdir2');
await fs.promises.mkdir(subDir1);
await fs.promises.mkdir(subDir2);
await fs.promises.writeFile(path.join(tempDir, 'file1.txt'), 'content1');
await fs.promises.writeFile(path.join(subDir1, 'file2.json'), '{}');
await fs.promises.writeFile(path.join(subDir2, 'file3.md'), '# Test');
const entries = await fs.promises.readdir(tempDir, { withFileTypes: true });
expect(entries).toHaveLength(3);
const dirs = entries.filter(entry => entry.isDirectory()).map(entry => entry.name);
const files = entries.filter(entry => entry.isFile()).map(entry => entry.name);
expect(dirs).toContain('subdir1');
expect(dirs).toContain('subdir2');
expect(files).toContain('file1.txt');
});
it('应该能够处理并发文件操作', async () => {
const operations = Array.from({ length: 10 }, (_, i) =>
fs.promises.writeFile(
path.join(tempDir, `file${i}.txt`),
`content ${i}`
)
);
await Promise.all(operations);
// 验证所有文件都被创建
for (let i = 0; i < 10; i++) {
const filePath = path.join(tempDir, `file${i}.txt`);
expect(fs.existsSync(filePath)).toBe(true);
const content = fs.readFileSync(filePath, 'utf-8');
expect(content).toBe(`content ${i}`);
}
});
it('应该能够处理错误情况', async () => {
const nonExistentFile = path.join(tempDir, 'non-existent.txt');
expect(() => {
fs.readFileSync(nonExistentFile);
}).toThrow();
expect(fs.existsSync(nonExistentFile)).toBe(false);
});
it('应该能够处理复杂的数据结构', () => {
const complexData = {
workspace: {
key: 'workspace-123',
name: 'Test Workspace',
path: tempDir,
settings: {
enableMCP: true,
enableAgents: true,
autoSave: true,
},
agents: [
{
key: 'agent1',
name: 'Agent 1',
chatLogs: [
{
key: 'chat1',
messages: [
{ role: 'user', content: 'Hello' },
{ role: 'assistant', content: 'Hi there!' }
]
}
]
}
]
}
};
const dataFile = path.join(tempDir, 'complex-data.json');
fs.writeFileSync(dataFile, JSON.stringify(complexData, null, 2));
const loaded = JSON.parse(fs.readFileSync(dataFile, 'utf-8'));
expect(loaded).toEqual(complexData);
expect(loaded.workspace.agents).toHaveLength(1);
expect(loaded.workspace.agents[0].chatLogs[0].messages).toHaveLength(2);
});
});