54 lines
1.6 KiB
TypeScript
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)',
|
|
);
|
|
});
|