parse product bitmasks

This commit is contained in:
Jannis R 2017-11-13 00:30:14 +01:00
parent 4356032308
commit 6b1f22cc65
No known key found for this signature in database
GPG key ID: 0FE83946296A88A5
4 changed files with 28 additions and 9 deletions

View file

@ -82,6 +82,14 @@ const defaultProducts = {
regional: true,
regionalExp: true
}
const formatProducts = (products) => {
products = Object.assign(Object.create(null), defaultProducts, products)
return {
type: 'PROD',
mode: 'INC',
value: modes.stringifyBitmask(products) + ''
}
}
// todo: find option for absolute number of results
@ -94,16 +102,10 @@ const dbProfile = {
// todo: parseLocation
parseLine,
parseProducts: modes.parseBitmask,
formatStation,
formatProducts: (products) => {
products = Object.assign(Object.create(null), defaultProducts, products)
return {
type: 'PROD',
mode: 'INC',
value: modes.stringifyBitmask(products) + ''
}
}
formatProducts
}
module.exports = dbProfile

View file

@ -19,7 +19,7 @@ const parseLocation = (profile, l) => {
}
if (type === 'poi' || type === 'station') res.id = l.extId
if ('pCls' in l) res.products = l.pCls
if ('pCls' in l) res.products = profile.parseProducts(l.pCls)
return res
}

View file

@ -6,6 +6,7 @@ const isRoughlyEqual = require('is-roughly-equal')
const createClient = require('..')
const dbProfile = require('../p/db')
const modes = require('../p/db/modes')
const {
findStation,
assertValidStation,
@ -35,6 +36,12 @@ const assertIsJungfernheide = (t, s) => {
t.ok(isRoughlyEqual(s.coordinates.longitude, 13.299424, .0005))
}
const assertValidProducts = (t, p) => {
for (let k of Object.keys(modes)) {
t.ok('boolean', typeof modes[k], 'mode ' + k + ' must be a boolean')
}
}
const test = tapePromise(tape)
const client = createClient(dbProfile)
@ -50,12 +57,18 @@ test('Berlin Jungfernheide to München Hbf', async (t) => {
if (!await findStation(journey.origin.id)) {
console.error('unknown station', journey.origin.id, journey.origin.name)
}
if (journey.origin.products) {
assertValidProducts(t, journey.origin.products)
}
t.ok(isValidWhen(journey.departure))
assertValidStation(t, journey.destination)
if (!await findStation(journey.origin.id)) {
console.error('unknown station', journey.destination.id, journey.destination.name)
}
if (journey.destination.products) {
assertValidProducts(t, journey.destination.products)
}
t.ok(isValidWhen(journey.arrival))
t.ok(Array.isArray(journey.parts))
@ -100,6 +113,7 @@ test('Berlin Jungfernheide to Torfstraße 17', async (t) => {
if (!await findStation(part.origin.id)) {
console.error('unknown station', part.origin.id, part.origin.name)
}
if (part.origin.products) assertValidProducts(t, part.origin.products)
t.ok(isValidWhen(part.departure))
t.ok(isValidWhen(part.arrival))
@ -127,6 +141,7 @@ test('Berlin Jungfernheide to ATZE Musiktheater', async (t) => {
if (!await findStation(part.origin.id)) {
console.error('unknown station', part.origin.id, part.origin.name)
}
if (part.origin.products) assertValidProducts(t, part.origin.products)
t.ok(isValidWhen(part.departure))
t.ok(isValidWhen(part.arrival))
@ -150,6 +165,7 @@ test('departures at Berlin Jungfernheide', async (t) => {
if (!await findStation(dep.station.id)) {
console.error('unknown station', dep.station.id, dep.station.name)
}
if (dep.station.products) assertValidProducts(t, dep.station.products)
t.ok(isValidWhen(dep.when))
}

View file

@ -57,6 +57,7 @@ const isValidMode = (m) => {
const assertValidLine = (t, l) => {
t.equal(l.type, 'line')
t.equal(typeof l.name, 'string')
if (!isValidMode(l.mode)) console.error(l)
t.ok(isValidMode(l.mode), 'invalid mode ' + l.mode)
t.equal(typeof l.product, 'string')
}