49 lines
1.3 KiB
TypeScript
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');
|