Files
doodle-store/apps/server/test/worksheet-query.test.ts

50 lines
1.5 KiB
TypeScript

import assert from 'node:assert/strict';
import { test } from 'node:test';
import {
parseWorksheetQuery,
WorksheetQueryDto,
} from '../src/worksheets/worksheet-query.dto';
test('题型查询参数:零年级、多个年级去重、false 与组合筛选可准确解析', () => {
const query = parseWorksheetQuery({
grade: '0',
ageBand: '3-4',
tag: ' 数学 ',
isHot: 'false',
});
assert.deepEqual(query.grades, [0]);
assert.equal(query.isHot, false);
assert.equal(query.page, 1);
assert.equal(query.pageSize, 20);
assert.equal(query.tag, '数学');
assert.deepEqual(
parseWorksheetQuery({ grades: '-4,0,6,0' }).grades,
[-4, 0, 6],
);
assert.equal(parseWorksheetQuery({ age: '0' }).age, 0);
});
test('题型查询参数:非法值、重复参数和越权状态字段不能被静默忽略', () => {
const bad: unknown[] = [
{ page: '0' },
{ page: '1e2' },
{ pageSize: '101' },
{ page: ['1', '2'] },
{ grade: '23' },
{ grade: '0', grades: '1' },
{ grades: '0,,1' },
{ grades: '' },
{ ageBand: '3-5' },
{ age: '4', ageBand: '3-4' },
{ isHot: '0' },
{ isNew: 'False' },
{ sort: 'random' },
{ tag: ['a', 'b'] },
{ tag: '' },
{ status: 'draft' },
{ rawStats: 'true' },
];
for (const query of bad)
assert.throws(() => parseWorksheetQuery(query as WorksheetQueryDto));
});