50 lines
1.5 KiB
TypeScript
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));
|
|
});
|