'use strict' const testEarlierLaterJourneys = async (cfg) => { const { test: t, fetchJourneys, fromId, toId, when // todo: validate } = cfg const model = await fetchJourneys(fromId, toId, { results: 3, departure: when }) // todo: move to journeys validator? t.equal(typeof model.earlierRef, 'string') t.ok(model.earlierRef) t.equal(typeof model.laterRef, 'string') t.ok(model.laterRef) // departure/arrival and earlierThan/laterThan should be mutually exclusive await t.rejects(async () => { await fetchJourneys(fromId, toId, { departure: when, earlierThan: model.earlierRef }) }) await t.rejects(async () => { await fetchJourneys(fromId, toId, { departure: when, laterThan: model.laterRef }) }) await t.rejects(async () => { await fetchJourneys(fromId, toId, { arrival: when, earlierThan: model.earlierRef }) }) await t.rejects(async () => { await fetchJourneys(fromId, toId, { arrival: when, laterThan: model.laterRef }) }) let earliestDep = Infinity, latestDep = -Infinity for (let j of model.journeys) { if (j.legs[0].departure === null) continue const dep = Date.parse(j.legs[0].departure) if (dep < earliestDep) earliestDep = dep else if (dep > latestDep) latestDep = dep } const earlier = await fetchJourneys(fromId, toId, { results: 3, // todo: single journey ref? earlierThan: model.earlierRef }) for (let j of earlier.journeys) { const firstLeg = j.legs[0] const dep = Date.parse(firstLeg.departure || firstLeg.plannedDeparture) t.ok(dep < earliestDep) } const later = await fetchJourneys(fromId, toId, { results: 3, // todo: single journey ref? laterThan: model.laterRef }) for (let j of later.journeys) { const firstLeg = j.legs[0] const dep = Date.parse(firstLeg.departure || firstLeg.plannedDeparture) t.ok(dep > latestDep) } } module.exports = testEarlierLaterJourneys