54 lines
1.8 KiB
TypeScript
54 lines
1.8 KiB
TypeScript
import assert from 'node:assert/strict';
|
|
import test from 'node:test';
|
|
import { buildMileageDrillUrl, parseMileageDrillContext } from './drill-context.js';
|
|
|
|
test('parses a vehicle drill context', () => {
|
|
const context = parseMileageDrillContext(
|
|
'?mileageLevel=vehicle&mileagePlate=%E7%B2%A4A08190F&mileageStart=2026-08-01&mileageEnd=2026-08-07&mileageSource=instrument,gps',
|
|
);
|
|
|
|
assert.deepEqual(context, {
|
|
level: 'vehicle',
|
|
plate: '粤A08190F',
|
|
startDate: '2026-08-01',
|
|
endDate: '2026-08-07',
|
|
sourcePriority: ['instrument', 'gps'],
|
|
});
|
|
});
|
|
|
|
test('requires complete context for breakdown and vehicle levels', () => {
|
|
assert.equal(parseMileageDrillContext('?mileageLevel=vehicle').level, 'overview');
|
|
assert.equal(parseMileageDrillContext('?mileageLevel=breakdown&mileageDimension=region').level, 'overview');
|
|
});
|
|
|
|
test('builds a namespaced URL and preserves unrelated parameters', () => {
|
|
const url = buildMileageDrillUrl(
|
|
{ pathname: '/asset', search: '?company=5&legacy=1', hash: '#mileage' },
|
|
{
|
|
level: 'vehicle',
|
|
plate: '粤A08190F',
|
|
startDate: '2026-08-01',
|
|
endDate: '2026-08-07',
|
|
sourcePriority: ['instrument'],
|
|
},
|
|
);
|
|
|
|
assert.equal(
|
|
url,
|
|
'/asset?company=5&legacy=1&mileageLevel=vehicle&mileagePlate=%E7%B2%A4A08190F&mileageStart=2026-08-01&mileageEnd=2026-08-07&mileageSource=instrument#mileage',
|
|
);
|
|
});
|
|
|
|
test('clears entity drill parameters when returning to overview', () => {
|
|
const url = buildMileageDrillUrl(
|
|
{
|
|
pathname: '/asset',
|
|
search: '?mileageLevel=vehicle&mileagePlate=%E7%B2%A4A08190F&company=5',
|
|
hash: '#mileage',
|
|
},
|
|
{ level: 'overview', sourcePriority: ['instrument'] },
|
|
);
|
|
|
|
assert.equal(url, '/asset?company=5&mileageSource=instrument#mileage');
|
|
});
|