import assert from 'node:assert/strict'; import test from 'node:test'; import pool from '../../db/mysql.js'; import monitoring from './monitoring.js'; import { clearOneOsMileageCache } from './oneos-api.js'; test('single-day monitoring merges all target rows and handles an empty target table', async (t) => { const previousUrl = process.env.ONEOS_MILEAGE_API_BASE_URL; const previousKey = process.env.ONEOS_MILEAGE_API_KEY; process.env.ONEOS_MILEAGE_API_BASE_URL = 'https://oneos.test'; process.env.ONEOS_MILEAGE_API_KEY = 'test-key'; t.after(() => { if (previousUrl === undefined) delete process.env.ONEOS_MILEAGE_API_BASE_URL; else process.env.ONEOS_MILEAGE_API_BASE_URL = previousUrl; if (previousKey === undefined) delete process.env.ONEOS_MILEAGE_API_KEY; else process.env.ONEOS_MILEAGE_API_KEY = previousKey; clearOneOsMileageCache(); }); let targets = [ { id: 1, target_name: '目标A', plate_number: '粤A10001' }, { id: 2, target_name: '目标B', plate_number: '粤A10001' }, ]; t.mock.method(pool, 'query', async (sql: string) => { if (sql.includes('tab_mileage_assessment_target')) return [targets, []]; assert.ok(sql.includes('FROM vehicle_info vi')); return [[{ plate: '粤A10001', vin: 'test-vin' }], []]; }); t.mock.method(globalThis, 'fetch', async (_url: unknown, init: RequestInit) => { const { date } = JSON.parse(String(init.body)); return Response.json({ code: 'SUCCESS', data: [{ plateNumber: '粤A10001', date, status: 'NORMAL', dailyMileageKm: 12, totalMileageKm: 100, sourceProtocol: 'GB32960', }] }); }); for (const expectedTargets of [['目标A', '目标B'], []]) { clearOneOsMileageCache(); const response = await monitoring.request('/?startDate=2026-09-16&endDate=2026-09-16&sourcePriority=instrument'); assert.equal(response.status, 200); const payload = await response.json(); assert.equal(payload.total, 1); assert.equal(payload.vehicles[0].dailyKm, 12); assert.deepEqual(payload.vehicles[0].targetNames, expectedTargets); targets = []; } });