Files
jrshikoku/tests/trainTimeFiltering.test.ts

85 lines
2.0 KiB
TypeScript

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