refactor: persist mileage drill context in URL
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
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');
|
||||
});
|
||||
Reference in New Issue
Block a user