feat: add scoreline dynamic filters

This commit is contained in:
Codex
2026-06-30 18:49:32 +08:00
parent 2f9763d352
commit ba737d41f5
14 changed files with 795 additions and 43 deletions

View File

@@ -3134,6 +3134,29 @@ async function testScoreline() {
assert.ok(records.total >= 1, 'scoreline records should have data');
assert.ok(records.items?.some(item => item.fieldValues?.minScore === 188), 'scoreline record should include dynamic field values');
const filteredRecords = await request('/api/scoreline/records', {
query: { regionId: ids.region, 'field.minScore': 188, pageSize: 5 },
});
assert.ok(filteredRecords.total >= 1, 'scoreline dynamic exact field filter should return records');
assert.ok(filteredRecords.items?.every(item => item.fieldValues?.minScore === 188), 'scoreline exact field filter should only return matching records');
const rangeFilteredRecords = await request('/api/scoreline/records', {
query: { regionId: ids.region, 'min.minScore': 180, 'max.minScore': 190, pageSize: 5 },
});
assert.ok(rangeFilteredRecords.items?.some(item => item.fieldValues?.minScore === 188), 'scoreline dynamic range filter should return matching records');
const unknownField = await request('/api/scoreline/records', {
query: { regionId: ids.region, 'field.unknownScore': 188 },
expectStatus: 400,
});
assert.equal(unknownField.code, 'SCORELINE_FIELD_FILTER_NOT_ALLOWED', 'scoreline records should reject unknown dynamic field filters');
const unsafeField = await request('/api/scoreline/records', {
query: { regionId: ids.region, 'field.minScore);drop': 188 },
expectStatus: 400,
});
assert.equal(unsafeField.code, 'SCORELINE_FIELD_FILTER_KEY_INVALID', 'scoreline records should reject unsafe dynamic field filter keys');
const years = await request('/api/scoreline/years', { query: { regionId: ids.region } });
assert.ok(years.items?.includes(2026), 'scoreline years should include 2026');
}