fix(web): preserve route state and cancel stale reads

This commit is contained in:
lingniu
2026-07-16 00:29:47 +08:00
parent 53e1b57e86
commit 6506c0f1f0
21 changed files with 166 additions and 62 deletions

View File

@@ -105,6 +105,34 @@ test('high-volume history, track, and mileage requests forward AbortSignal', asy
for (const [, init] of fetchMock.mock.calls) expect(init).toEqual({ signal: controller.signal });
});
test('route-scoped platform reads forward AbortSignal on navigation cleanup', async () => {
const fetchMock = vi.spyOn(globalThis, 'fetch').mockResolvedValue({ ok: true, json: async () => ({ data: {} }) } as Response);
const controller = new AbortController();
const signal = controller.signal;
await api.session(signal);
await api.metricCatalog(signal);
await api.historyMetricCatalog(signal);
await api.historyExports(signal);
await api.accessSummary({}, signal);
await api.accessVehicles({ limit: 50, offset: 0 }, signal);
await api.accessUnresolvedIdentities({ limit: 20, offset: 0 }, signal);
await api.accessThresholds(signal);
await api.alertSummaryV2({}, signal);
await api.alertEventsV2({ limit: 20, offset: 0 }, signal);
await api.alertEventV2('event-1', signal);
await api.alertRulesV2(signal);
await api.alertNotificationsV2(new URLSearchParams({ limit: '100' }), signal);
await api.vehicleDetail(new URLSearchParams({ keyword: 'VIN001' }), signal);
await api.latestTelemetry('VIN001', signal);
await api.reverseGeocode(new URLSearchParams({ longitude: '113', latitude: '23' }), signal);
await api.opsHealth(signal);
await api.sourceReadiness(signal);
expect(fetchMock).toHaveBeenCalledTimes(18);
for (const [, init] of fetchMock.mock.calls) expect(init?.signal).toBe(signal);
});
test('rawFramesQuery posts structured JSON instead of URL query strings', async () => {
const fetchMock = vi.spyOn(globalThis, 'fetch').mockResolvedValue({
ok: true,