Files
d1kt/server/utils/vocabularyAuditFilters.test.ts
2026-06-13 10:58:53 +08:00

49 lines
1.3 KiB
TypeScript

import assert from 'node:assert/strict';
import {
applyVocabularySummaryItemFilters,
buildVocabularySummaryFilters
} from './vocabularyAuditFilters';
const uniqueWordFilter = buildVocabularySummaryFilters({ minUniqueWords: '40' });
assert.deepEqual(uniqueWordFilter, {
minUniqueWords: 40,
userMatchStages: [],
baseMatch: {}
});
const legacyFilter = buildVocabularySummaryFilters({ minCorrectWords: '35' });
assert.deepEqual(legacyFilter, {
minUniqueWords: 35,
userMatchStages: [],
baseMatch: {}
});
const emptyFilter = buildVocabularySummaryFilters({});
assert.deepEqual(emptyFilter, {
minUniqueWords: undefined,
userMatchStages: [],
baseMatch: {}
});
const studentFilter = buildVocabularySummaryFilters({ studentNo: 'A.12' });
assert.deepEqual(studentFilter.userMatchStages, [{
$match: {
'user.username': {
$regex: 'A\\.12',
$options: 'i'
}
}
}]);
const invalidFilter = buildVocabularySummaryFilters({ minUniqueWords: '4.5' });
assert.deepEqual(invalidFilter, { error: '去重单词数量必须是正整数' });
const filteredItems = applyVocabularySummaryItemFilters([
{ userId: 'below', uniqueWords: 39 },
{ userId: 'equal', uniqueWords: 40 },
{ userId: 'above', uniqueWords: 41 }
], 40);
assert.deepEqual(filteredItems.map(item => item.userId), ['equal', 'above']);
console.log('vocabularyAuditFilters tests passed');