import assert from 'node:assert/strict'; import test from 'node:test'; import { buildHydrogenDrillUrl, parseHydrogenDrillContext, } from './hydrogen-drill-context.js'; test('parses a station drill context including station zero', () => { assert.deepEqual( parseHydrogenDrillContext('?hydrogenLevel=station&hydrogenStation=0&hydrogenStationName=%E6%9C%AA%E5%85%B3%E8%81%94%E7%AB%99%E7%82%B9&hydrogenScope=lingniu&hydrogenStart=2026-08-01&hydrogenEnd=2026-08-07'), { level: 'station', stationId: 0, stationName: '未关联站点', vehicleScope: 'lingniu', startDate: '2026-08-01', endDate: '2026-08-07', }, ); }); test('requires a valid entity for station and customer levels', () => { assert.equal(parseHydrogenDrillContext('?hydrogenLevel=station&hydrogenStation=-1').level, 'overview'); assert.equal(parseHydrogenDrillContext('?hydrogenLevel=customer').level, 'overview'); assert.equal( parseHydrogenDrillContext(`?hydrogenLevel=customer&hydrogenCustomer=${'x'.repeat(129)}`).level, 'overview', ); }); test('parses and builds a customer drill context', () => { const context = parseHydrogenDrillContext( '?hydrogenLevel=customer&hydrogenCustomer=%E6%AD%A6%E6%B1%89%E5%AE%A2%E6%88%B7&hydrogenScope=lingniu&hydrogenStart=2026-01-01&hydrogenEnd=2026-08-07', ); assert.deepEqual(context, { level: 'customer', customerName: '武汉客户', vehicleScope: 'lingniu', startDate: '2026-01-01', endDate: '2026-08-07', }); assert.equal( buildHydrogenDrillUrl( { pathname: '/energy', search: '', hash: '#hydrogen' }, { ...context, year: 2026 }, ), '/energy?hydrogenLevel=customer&hydrogenYear=2026&hydrogenCustomer=%E6%AD%A6%E6%B1%89%E5%AE%A2%E6%88%B7&hydrogenScope=lingniu&hydrogenStart=2026-01-01&hydrogenEnd=2026-08-07#hydrogen', ); }); test('builds a namespaced station URL and preserves unrelated parameters', () => { const url = buildHydrogenDrillUrl( { pathname: '/energy', search: '?company=5', hash: '#hydrogen' }, { level: 'station', year: 2026, stationId: 18, stationName: '测试加氢站', vehicleScope: 'lingniu', startDate: '2026-08-01', endDate: '2026-08-07', }, ); assert.equal( url, '/energy?company=5&hydrogenLevel=station&hydrogenYear=2026&hydrogenStation=18&hydrogenStationName=%E6%B5%8B%E8%AF%95%E5%8A%A0%E6%B0%A2%E7%AB%99&hydrogenScope=lingniu&hydrogenStart=2026-08-01&hydrogenEnd=2026-08-07#hydrogen', ); }); test('clears station parameters when returning to overview', () => { const url = buildHydrogenDrillUrl( { pathname: '/energy', search: '?hydrogenLevel=station&hydrogenStation=18&hydrogenStationName=test&company=5', hash: '#hydrogen', }, { level: 'overview', vehicleScope: 'lingniu' }, ); assert.equal(url, '/energy?company=5&hydrogenScope=lingniu#hydrogen'); }); test('preserves a selected order date and page in the hydrogen analysis URL', () => { const context = parseHydrogenDrillContext( '?hydrogenScope=lingniu&hydrogenStart=2026-08-01&hydrogenEnd=2026-08-07&hydrogenDate=2026-08-05&hydrogenPage=3', ); assert.equal(context.selectedDate, '2026-08-05'); assert.equal(context.orderPage, 3); assert.equal( buildHydrogenDrillUrl( { pathname: '/energy', search: '?company=5', hash: '#hydrogen' }, context, ), '/energy?company=5&hydrogenScope=lingniu&hydrogenStart=2026-08-01&hydrogenEnd=2026-08-07&hydrogenDate=2026-08-05&hydrogenPage=3#hydrogen', ); assert.equal( parseHydrogenDrillContext('?hydrogenStart=2026-08-01&hydrogenEnd=2026-08-07&hydrogenDate=2026-08-08').selectedDate, undefined, ); assert.equal(parseHydrogenDrillContext('?hydrogenPage=3').orderPage, undefined); assert.equal(parseHydrogenDrillContext('?hydrogenDate=2026-08-05&hydrogenPage=0').orderPage, undefined); assert.equal( buildHydrogenDrillUrl( { pathname: '/energy', search: '', hash: '#hydrogen' }, { level: 'overview', vehicleScope: 'lingniu', orderPage: 3 }, ), '/energy?hydrogenScope=lingniu#hydrogen', ); });