76 lines
2.5 KiB
TypeScript
76 lines
2.5 KiB
TypeScript
import assert from 'node:assert/strict';
|
|
import test from 'node:test';
|
|
import { DatabaseSync } from 'node:sqlite';
|
|
import {
|
|
customerClause,
|
|
dateRangeClause,
|
|
enumerateDateRange,
|
|
resolveDateRange,
|
|
} from './query-model.js';
|
|
|
|
test('外部车辆只取佛山羚牛站未关联车辆的订单,车牌文字和收费不影响分类', () => {
|
|
const db = new DatabaseSync(':memory:');
|
|
try {
|
|
db.exec(`CREATE TABLE orders (
|
|
id INTEGER, station_id INTEGER, vehicle_id INTEGER,
|
|
license_plate TEXT, customer_price REAL, del_flag TEXT
|
|
);
|
|
INSERT INTO orders VALUES
|
|
(1, 341, NULL, '粤A外部', 38, '0'),
|
|
(2, 341, NULL, '', 0, '0'),
|
|
(3, 341, 123, '粤A羚牛', 38, '0'),
|
|
(4, 52, NULL, '粤A其他站', 38, '0'),
|
|
(5, NULL, NULL, '', 0, '0'),
|
|
(6, NULL, 456, '粤A未关联站点', 0, '0'),
|
|
(7, 341, NULL, '粤A已删除', 38, '1');`);
|
|
const ids = (kind: 'external' | 'lingniu' | 'all') => db
|
|
.prepare(`SELECT b.id FROM orders b WHERE b.del_flag = '0' AND ${customerClause(kind)} ORDER BY b.id`)
|
|
.all().map(row => row.id);
|
|
assert.deepEqual(ids('external'), [1, 2]);
|
|
assert.deepEqual(ids('lingniu'), [3, 4, 5, 6]);
|
|
assert.deepEqual(ids('all'), [1, 2, 3, 4, 5, 6]);
|
|
assert.deepEqual([...ids('external'), ...ids('lingniu')].sort(), ids('all'));
|
|
} finally {
|
|
db.close();
|
|
}
|
|
});
|
|
|
|
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)',
|
|
);
|
|
});
|