db-vendo-client/test/e2e/lib/reachable-from.js

51 lines
1.3 KiB
JavaScript
Raw Normal View History

import isPlainObject from 'lodash/isPlainObject.js';
2018-11-21 19:07:37 +01:00
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');
};
2022-05-07 16:17:37 +02:00
export {
testReachableFrom,
};