import isRoughlyEqual from 'is-roughly-equal'; import {hour} from './util.js'; const testLegCycleAlternatives = async (cfg) => { const { test: t, fetchJourneys, fromId, toId, } = cfg; // Apparently HAFAS doesn't return the leg cycle or alternatives more // than ~2 hours in advance. This is why we don't pass `when` here. const journeys = await fetchJourneys(fromId, toId, {results: 3}); for (let i = 0; i < journeys.length; i++) { const journey = journeys[i]; for (let j = 0; j < journey.legs.length; j++) { const leg = journey.legs[j]; const name = `journeys[${i}].legs[${j}]`; if (!leg.line) { continue; } t.ok(leg.cycle, name + '.cycle is missing'); t.equal(typeof leg.cycle.min, 'number', name + '.cycle.min is not a number'); t.equal(typeof leg.cycle.max, 'number', name + '.cycle.max is not a number'); t.equal(typeof leg.cycle.nr, 'number', name + '.cycle.nr is not a number'); const lineWhen = Number(new Date(leg.departure)); t.ok(Array.isArray(leg.alternatives), name + '.alternatives must be an array'); for (let k = 0; k < leg.alternatives.length; k++) { const a = leg.alternatives[k]; const n = name + `.alternatives[${k}]`; let alternativeWhen = Number(new Date(a.when)); if ('number' === typeof a.delay) { alternativeWhen -= a.delay * 1000; } t.ok(isRoughlyEqual(2 * hour, alternativeWhen, lineWhen), n + '.when seems invalid'); } } } }; export { testLegCycleAlternatives, };