后台基本功能完成,待完善:普通用户前端页面

This commit is contained in:
2025-12-25 16:55:32 +08:00
parent dc9fc169ec
commit de0c7377c9
9 changed files with 360 additions and 82 deletions

View File

@@ -260,3 +260,71 @@ test('前端文本解析支持 | 分隔格式', async () => {
assert.equal(judgment.answer, '正确');
assert.equal(judgment.analysis, '地球接近球体');
});
test('题目类别列表应返回题库数量统计', async () => {
const { initDatabase, run } = await import('../api/database');
await initDatabase();
const { app } = await import('../api/server');
const server = app.listen(0);
try {
const addr = server.address();
assert.ok(addr && typeof addr === 'object');
const baseUrl = `http://127.0.0.1:${addr.port}`;
await run(`DELETE FROM quiz_answers`);
await run(`DELETE FROM quiz_records`);
await run(`DELETE FROM questions`);
await run(`DELETE FROM question_categories`);
await run(`INSERT INTO question_categories (id, name) VALUES (?, ?)`, [randomUUID(), '空类别']);
const q1 = randomUUID();
const q2 = randomUUID();
const q3 = randomUUID();
const q4 = randomUUID();
const q5 = randomUUID();
await run(
`INSERT INTO questions (id, content, type, options, answer, score, category)
VALUES (?, ?, ?, ?, ?, ?, ?)`,
[q1, '数学题1', 'single', JSON.stringify(['A', 'B']), 'A', 5, '数学'],
);
await run(
`INSERT INTO questions (id, content, type, options, answer, score, category)
VALUES (?, ?, ?, ?, ?, ?, ?)`,
[q2, '数学题2', 'single', JSON.stringify(['A', 'B']), 'A', 5, '数学'],
);
await run(
`INSERT INTO questions (id, content, type, options, answer, score, category)
VALUES (?, ?, ?, ?, ?, ?, ?)`,
[q3, '英语题1', 'single', JSON.stringify(['A', 'B']), 'A', 5, '英语'],
);
await run(
`INSERT INTO questions (id, content, type, options, answer, score, category)
VALUES (?, ?, ?, ?, ?, ?, ?)`,
[q4, '通用题1', 'single', JSON.stringify(['A', 'B']), 'A', 5, '通用'],
);
await run(
`INSERT INTO questions (id, content, type, options, answer, score, category)
VALUES (?, ?, ?, ?, ?, ?, ?)`,
[q5, '空类别题(旧数据)', 'single', JSON.stringify(['A', 'B']), 'A', 5, ''],
);
const res = await jsonFetch(baseUrl, '/api/question-categories');
assert.equal(res.status, 200);
assert.equal(res.json?.success, true);
assert.equal(Array.isArray(res.json?.data), true);
const list = res.json?.data as any[];
const findByName = (name: string) => list.find((c) => c?.name === name);
assert.equal(findByName('数学')?.questionCount, 2);
assert.equal(findByName('英语')?.questionCount, 1);
assert.equal(findByName('通用')?.questionCount, 2);
assert.equal(findByName('空类别')?.questionCount, 0);
} finally {
await new Promise<void>((resolve) => server.close(() => resolve()));
}
});