validateMovement: min/max longitude/latitude config

This commit is contained in:
Jannis R 2018-12-30 13:52:34 +01:00
parent b9282435a5
commit b55c2c1579
No known key found for this signature in database
GPG key ID: 0FE83946296A88A5
2 changed files with 45 additions and 32 deletions

View file

@ -376,40 +376,52 @@ const validateDepartures = (val, deps, name = 'departures') => {
} }
} }
const validateMovement = (val, m, name = 'movement') => { const createValidateMovement = (cfg) => {
a.ok(isObj(m), name + ' must be an object') const { maxLatitude, minLatitude, maxLongitude, minLongitude } = cfg
// todo: let hafas-client add a .type field const validateMovement = (val, m, name = 'movement') => {
a.ok(isObj(m), name + ' must be an object')
// todo: let hafas-client add a .type field
val.line(val, m.line, name + '.line') val.line(val, m.line, name + '.line')
a.strictEqual(typeof m.direction, 'string', name + '.direction must be a string') a.strictEqual(typeof m.direction, 'string', name + '.direction must be a string')
a.ok(m.direction, name + '.direction must not be empty') a.ok(m.direction, name + '.direction must not be empty')
const lName = name + '.location' const lName = name + '.location'
val.location(val, m.location, lName) val.location(val, m.location, lName)
a.ok(m.location.latitude <= 55, lName + '.latitude is too small') if ('number' === typeof maxLatitude) {
a.ok(m.location.latitude >= 45, lName + '.latitude is too large') a.ok(m.location.latitude <= maxLatitude, lName + '.latitude is too large')
a.ok(m.location.longitude >= 9, lName + '.longitude is too small') }
a.ok(m.location.longitude <= 15, lName + '.longitude is too small') if ('number' === typeof minLatitude) {
a.ok(m.location.latitude >= minLatitude, lName + '.latitude is too small')
}
if ('number' === typeof maxLongitude) {
a.ok(m.location.longitude <= maxLongitude, lName + '.longitude is too large')
}
if ('number' === typeof minLongitude) {
a.ok(m.location.longitude >= minLongitude, lName + '.longitude is too small')
}
a.ok(Array.isArray(m.nextStops), name + '.nextStops must be an array') a.ok(Array.isArray(m.nextStops), name + '.nextStops must be an array')
for (let i = 0; i < m.nextStops.length; i++) { for (let i = 0; i < m.nextStops.length; i++) {
const st = m.nextStops[i] const st = m.nextStops[i]
val.stopover(val, st, name + `.nextStops[${i}]`) val.stopover(val, st, name + `.nextStops[${i}]`)
}
a.ok(Array.isArray(m.frames), name + '.frames must be an array')
a.ok(m.frames.length > 0, name + '.frames must not be empty')
for (let i = 0; i < m.frames.length; i++) {
const f = m.frames[i]
const fName = name + `.frames[${i}]`
a.ok(isObj(f), fName + ' must be an object')
anyOf(['location', 'stop', 'station'], val, f.origin, fName + '.origin')
anyOf(['location', 'stop', 'station'], val, f.destination, fName + '.destination')
a.strictEqual(typeof f.t, 'number', fName + '.frames must be a number')
}
// todo: validate polyline
} }
return validateMovement
a.ok(Array.isArray(m.frames), name + '.frames must be an array')
a.ok(m.frames.length > 0, name + '.frames must not be empty')
for (let i = 0; i < m.frames.length; i++) {
const f = m.frames[i]
const fName = name + `.frames[${i}]`
a.ok(isObj(f), fName + ' must be an object')
anyOf(['location', 'stop', 'station'], val, f.origin, fName + '.origin')
anyOf(['location', 'stop', 'station'], val, f.destination, fName + '.destination')
a.strictEqual(typeof f.t, 'number', fName + '.frames must be a number')
}
// todo: validate polyline
} }
const validateMovements = (val, ms, name = 'movements') => { const validateMovements = (val, ms, name = 'movements') => {
@ -437,6 +449,6 @@ module.exports = {
departure: createValidateDeparture, departure: createValidateDeparture,
departures: () => validateDepartures, departures: () => validateDepartures,
arrivals: () => validateArrivals, arrivals: () => validateArrivals,
movement: () => validateMovement, movement: createValidateMovement,
movements: () => validateMovements movements: () => validateMovements
} }

View file

@ -11,7 +11,7 @@ const {
line: createValidateLine, line: createValidateLine,
journeyLeg: createValidateJourneyLeg, journeyLeg: createValidateJourneyLeg,
departure: createValidateDeparture, departure: createValidateDeparture,
movement: _validateMovement movement: createValidateMovement
} = require('./validators') } = require('./validators')
const when = createWhen('Europe/Berlin', 'de-DE') const when = createWhen('Europe/Berlin', 'de-DE')
@ -72,6 +72,7 @@ const validateDeparture = (validate, dep, name) => {
validateDirection(dep.direction, name + '.direction') validateDirection(dep.direction, name + '.direction')
} }
const _validateMovement = createValidateMovement(cfg)
const validateMovement = (validate, m, name) => { const validateMovement = (validate, m, name) => {
_validateMovement(validate, m, name) _validateMovement(validate, m, name)
validateDirection(m.direction, name + '.direction') validateDirection(m.direction, name + '.direction')