46 lines
2.1 KiB
TypeScript
46 lines
2.1 KiB
TypeScript
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 = [];
|
|
}
|
|
});
|