Files
ln-bi/src/server/routes/energy/query-model.test.ts
T
kkfluous 62efef0ab9
ci/woodpecker/push/woodpecker Pipeline was successful
feat(energy): rebuild hydrogen BI board and drill-through
2026-08-20 13:59:03 +08:00

54 lines
1.6 KiB
TypeScript

import assert from 'node:assert/strict';
import test from 'node:test';
import {
customerClause,
dateRangeClause,
enumerateDateRange,
resolveDateRange,
} from './query-model.js';
test('车辆归属按账本 vehicle_id 区分羚牛和外部车辆', () => {
assert.equal(customerClause('external'), 'vehicle_id IS NULL');
assert.equal(customerClause('lingniu'), 'vehicle_id IS NOT NULL');
assert.equal(customerClause('all'), '1=1');
});
test('能源日期快捷区间继续按本地自然日计算', () => {
const now = new Date(2026, 7, 12, 23, 30);
assert.deepEqual(resolveDateRange('thisWeek', undefined, undefined, now), {
start: '2026-08-10',
end: '2026-08-12',
});
assert.deepEqual(resolveDateRange('thisMonth', undefined, undefined, now), {
start: '2026-08-01',
end: '2026-08-12',
});
assert.deepEqual(resolveDateRange('last15', undefined, undefined, now), {
start: '2026-07-29',
end: '2026-08-12',
});
});
test('合法自定义日期优先并在倒置时交换边界', () => {
assert.deepEqual(resolveDateRange('last15', '2026-08-12', '2026-08-01'), {
start: '2026-08-01',
end: '2026-08-12',
});
assert.deepEqual(resolveDateRange('last15', 'invalid', '2026-08-01', new Date(2026, 7, 12)), {
start: '2026-07-29',
end: '2026-08-12',
});
});
test('补零日期序列包含首尾且 SQL 日期上界保持开区间', () => {
assert.deepEqual(enumerateDateRange('2026-08-10', '2026-08-12'), [
'2026-08-10',
'2026-08-11',
'2026-08-12',
]);
assert.equal(
dateRangeClause('b.refuel_time'),
'b.refuel_time >= ? AND b.refuel_time < DATE_ADD(?, INTERVAL 1 DAY)',
);
});