import { strict as assert } from "node:assert"; import { test } from "node:test"; import type { StationProps } from "../lib/CommonTypes"; import { getTime, trainTimeFiltering } from "../lib/trainTimeFiltering"; const station = (name: string): StationProps => ({ DispNum: "", MyStation: "", StationMap: "", StationNumber: "Y00", StationTimeTable: "", StationName: name, Station_EN: "", Station_JP: name, jslodApi: "", lat: 0, lng: 0, }); test("station timetable prefers departure time and keeps arrival metadata", () => { const rows = getTime( { "100D": "高松,着,4:00,1#高松,発,4:05,2#坂出,着,4:30,3", }, station("高松"), ); assert.deepEqual(rows, [ { train: "100D", time: "04:05", lastStation: "坂出", isThrough: false, platformNum: "2", se: "発", arrivalTime: "04:00", departureTime: "04:05", isOrigin: false, }, ]); }); test("station timetable sorts after-midnight trains at the end of a service day", () => { const rows = getTime( { "200D": "高松,発,3:30,1#坂出,着,4:00,1", "100D": "高松,発,4:05,2#坂出,着,4:30,2", broken: "高松,発,not-a-time,3", }, station("高松"), ); assert.deepEqual( rows.map(({ train, time }) => ({ train, time })), [ { train: "100D", time: "04:05" }, { train: "200D", time: "03:30" }, ], ); }); test("non-live trains are only shown inside the two-hour window", () => { const base = { currentTrain: [], station: [station("高松")], stationList: [[station("高松")]], now: "2026-09-04T05:00:00", }; const diagram = { train: "100D", lastStation: "坂出", isThrough: false, platformNum: "1", se: "発", isOrigin: true, }; assert.equal(trainTimeFiltering({ ...base, d: { ...diagram, time: "06:00" } }), true); assert.equal(trainTimeFiltering({ ...base, d: { ...diagram, time: "08:00" } }), false); assert.equal( trainTimeFiltering({ ...base, d: { ...diagram, time: "invalid" } }), false, ); });