import isPlainObject from 'lodash/isPlainObject.js' const testReachableFrom = async (cfg) => { const { test: t, reachableFrom, address, when, maxDuration, validate } = cfg const res = await reachableFrom(address, { when, maxDuration }) const { reachable: results, realtimeDataUpdatedAt, } = res if (realtimeDataUpdatedAt !== null) { // todo: move this check into validators validate(t, realtimeDataUpdatedAt, 'realtimeDataUpdatedAt', 'res.realtimeDataUpdatedAt') } t.ok(Array.isArray(results), 'results must an array') t.ok(results.length > 0, 'results must have >0 items') for (let i = 0; i < results.length; i++) { const res = results[i] const name = `results[${i}]` t.ok(isPlainObject(res), name + ' must be an object') t.equal(typeof res.duration, 'number', name + '.duration must be a number') t.ok(res.duration > 0, name + '.duration must be >0') t.ok(Array.isArray(res.stations), name + '.stations must be an array') t.ok(res.stations.length > 0, name + '.stations must have >0 items') for (let j = 0; j < res.stations.length; j++) { validate(t, res.stations[j], ['stop', 'station'], `${name}.stations[${j}]`) } } const sorted = results.sort((a, b) => a.duration - b.duration) t.same(results, sorted, 'results must be sorted by res.duration') } export { testReachableFrom, }