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)', ); });