85 lines
2.0 KiB
TypeScript
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,
|
|
);
|
|
});
|