From 25fb25c18d5e208f660d9a4727314e86c79397b2 Mon Sep 17 00:00:00 2001 From: Jannis R Date: Sat, 11 Jul 2020 20:39:28 +0200 Subject: [PATCH] parseLeg: use remarks without fIdx/tIdx :bug: --- parse/journey-leg.js | 14 +- test/fixtures/rejseplanen-trip.js | 105 ++++++++++++++ test/fixtures/rejseplanen-trip.json | 207 ++++++++++++++++++++++++++++ test/index.js | 1 + test/rejseplanen-trip.js | 29 ++++ 5 files changed, 353 insertions(+), 3 deletions(-) create mode 100644 test/fixtures/rejseplanen-trip.js create mode 100644 test/fixtures/rejseplanen-trip.json create mode 100644 test/rejseplanen-trip.js diff --git a/parse/journey-leg.js b/parse/journey-leg.js index 792a68ff..e750f9b7 100644 --- a/parse/journey-leg.js +++ b/parse/journey-leg.js @@ -13,9 +13,17 @@ const applyRemarks = (leg, refs) => { for (let [remark, ref] of findRemarks(refs)) { const {fromLocation, toLocation} = ref - const fromI = fromLocation ? leg.stopovers.findIndex(s => s.stop === fromLocation) : -1 - const toI = toLocation ? leg.stopovers.findIndex(s => s.stop === toLocation) : -1 - if (fromI < 0 || toI < 0) continue + let fromI = 0, toI = leg.stopovers.length - 1 + // this fails if `s.stop` is a new object (not reference-equal) + // todo: do this index- or ID-based + if (fromLocation) { + fromI = leg.stopovers.findIndex(s => s.stop === fromLocation) + if (fromI < 0) continue + } + if (toLocation) { + toI = leg.stopovers.findIndex(s => s.stop === toLocation) + if (toI < 0) continue + } const wholeLeg = fromI === 0 && toI === (leg.stopovers.length - 1) if (wholeLeg) addRemark(leg, remark) diff --git a/test/fixtures/rejseplanen-trip.js b/test/fixtures/rejseplanen-trip.js new file mode 100644 index 00000000..d732d0a9 --- /dev/null +++ b/test/fixtures/rejseplanen-trip.js @@ -0,0 +1,105 @@ +'use strict' + +const aalborg = { + type: 'stop', + id: '8600020', + name: 'Aalborg St.', + location: { + type: 'location', + id: '8600020', + latitude: 57.043037, + longitude: 9.917044 + }, + products: { + 'national-train': true, + 'national-train-2': true, + 'local-train': true, + o: true, + 's-tog': false, + } +} + +const hobro = { + type: 'stop', + id: '8600032', + name: 'Hobro St.', + location: { + type: 'location', + id: '8600032', + latitude: 56.643539, + longitude: 9.78279 + }, + products: { + 'national-train': true, + 'national-train-2': true, + 'local-train': true, + o: true, + 's-tog': false, + } +} + +module.exports = { + origin: aalborg, + destination: hobro, + arrival: '2020-07-13T11:25:00+02:00', + plannedArrival: '2020-07-13T11:25:00+02:00', + arrivalDelay: null, + departure: '2020-07-13T10:35:00+02:00', + plannedDeparture: '2020-07-13T10:35:00+02:00', + departureDelay: null, + reachable: true, + line: { + type: 'line', + id: 'replacement-bus-rod', + fahrtNr: '20002', + name: 'Replacement bus RØD', + public: true, + adminCode: '000001', + mode: 'train', + product: 'o', + operator: {type: 'operator', id: 'dsb', name: 'DSB'}, + }, + direction: null, + arrivalPlatform: null, + plannedArrivalPlatform: null, + departurePlatform: null, + plannedDeparturePlatform: null, + stopovers: [ + { + stop: aalborg, + arrival: null, + plannedArrival: null, + arrivalDelay: null, + arrivalPlatform: null, + plannedArrivalPlatform: null, + departure: '2020-07-13T10:35:00+02:00', + plannedDeparture: '2020-07-13T10:35:00+02:00', + departureDelay: null, + departurePlatform: null, + plannedDeparturePlatform: null + }, + { + stop: hobro, + arrival: '2020-07-13T11:25:00+02:00', + plannedArrival: '2020-07-13T11:25:00+02:00', + arrivalDelay: null, + arrivalPlatform: null, + plannedArrivalPlatform: null, + departure: null, + plannedDeparture: null, + departureDelay: null, + departurePlatform: null, + plannedDeparturePlatform: null + } + ], + remarks: [{ + type: 'hint', + code: 'NO', + text: 'Vi kører med Togbusser på denne tur, som derfor varer længere end normalt. Tiderne, du ser i Rejseplanen, er kun vejledende. Togbusserne kører i pendulfart mellem stationerne. Det skyldes akutte driftsforstyrrelser. I Togbussen kan du ikke tage din cykel med.', + }, { + type: 'status', + code: 'text.realtime.journey.additional.service', + text: 'Extra bus or train', + }], + id: '1|51255|0|86|13072020' +} diff --git a/test/fixtures/rejseplanen-trip.json b/test/fixtures/rejseplanen-trip.json new file mode 100644 index 00000000..9af6bd56 --- /dev/null +++ b/test/fixtures/rejseplanen-trip.json @@ -0,0 +1,207 @@ +{ + "common": { + "locL": [ + { + "lid": "A=1@O=Aalborg St.@X=9917044@Y=57043037@U=86@L=8600020@", + "type": "S", + "name": "Aalborg St.", + "icoX": 2, + "extId": "8600020", + "state": "F", + "crd": { + "x": 9917044, + "y": 57043037, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 239 + }, + { + "lid": "A=1@O=Hobro St.@X=9782790@Y=56643539@U=86@L=8600032@", + "type": "S", + "name": "Hobro St.", + "icoX": 2, + "extId": "8600032", + "state": "F", + "crd": { + "x": 9782790, + "y": 56643539, + "layerX": 0, + "crdSysX": 0 + }, + "pCls": 303 + } + ], + "prodL": [ + { + "name": "Replacement bus RØD", + "nameS": "RØD", + "number": "RØD", + "icoX": 0, + "cls": 8, + "oprX": 0, + "prodCtx": { + "name": "Replacement bus RØD", + "num": "20002", + "line": "RØD", + "matchId": "RØD", + "catOut": "Togbus ", + "catOutS": "018", + "catOutL": "Replacement bus", + "catIn": "018", + "catCode": "3", + "admin": "000001" + } + } + ], + "polyL": [], + "layerL": [ + { + "id": "standard", + "name": "standard", + "index": 0, + "annoCnt": 0 + } + ], + "crdSysL": [ + { + "id": "standard", + "index": 0, + "type": "WGS84" + } + ], + "opL": [ + { + "name": "DSB", + "icoX": 1 + } + ], + "remL": [ + { + "type": "I", + "code": "NO", + "icoX": 3, + "txtN": "Vi kører med Togbusser på denne tur, som derfor varer længere end normalt. Tiderne, du ser i Rejseplanen, er kun vejledende. Togbusserne kører i pendulfart mellem stationerne. Det skyldes akutte driftsforstyrrelser. I Togbussen kan du ikke tage din cykel med." + }, + { + "type": "R", + "code": "text.realtime.journey.additional.service", + "icoX": 4, + "txtN": "Extra bus or train" + } + ], + "icoL": [ + { + "res": "prod_gen", + "fg": { + "r": 255, + "g": 255, + "b": 255 + }, + "bg": { + "r": 80, + "g": 183, + "b": 72 + } + }, + { + "res": "DSB", + "txt": "DSB" + }, + { + "res": "prod_ic", + "fg": { + "r": 255, + "g": 255, + "b": 255 + }, + "bg": { + "r": 239, + "g": 65, + "b": 48 + } + }, + { + "res": "INFO" + }, + { + "res": "rt_warn" + } + ] + }, + "journey": { + "jid": "1|51255|0|86|13072020", + "date": "20200713", + "prodX": 0, + "status": "A", + "isRchbl": true, + "stopL": [ + { + "locX": 0, + "idx": 0, + "dProdX": 0, + "dInR": true, + "dTimeS": "103500", + "dProgType": "PROGNOSED", + "type": "N" + }, + { + "locX": 1, + "idx": 1, + "aProdX": 0, + "aOutR": true, + "aTimeS": "112500", + "aProgType": "PROGNOSED", + "type": "N" + } + ], + "sDaysL": [ + { + "sDaysR": "not every day", + "sDaysI": "13. Jul", + "sDaysB": "10000000000000000000", + "fLocX": 0, + "tLocX": 1, + "fLocIdx": 0, + "tLocIdx": 1 + } + ], + "msgL": [ + { + "type": "REM", + "remX": 0, + "dspl": "U", + "fLocX": 0, + "tLocX": 1, + "tagL": [ + "RES_JNY_DTL" + ], + "sort": 684195840, + "persist": false + }, + { + "type": "REM", + "remX": 1, + "dspl": "U", + "tagL": [ + "RES_JNY_H3" + ], + "sort": 13107200, + "persist": false + } + ], + "subscr": "F", + "prodL": [ + { + "prodX": 0, + "fLocX": 0, + "tLocX": 1, + "fIdx": 0, + "tIdx": 1 + } + ] + }, + "fpB": "20200710", + "fpE": "20200923", + "planrtTS": "1594478912" +} \ No newline at end of file diff --git a/test/index.js b/test/index.js index 3deaa3ba..74a7bf41 100644 --- a/test/index.js +++ b/test/index.js @@ -12,6 +12,7 @@ require('./db-arrivals') require('./vbb-departures') require('./bvg-radar') require('./oebb-trip') +require('./rejseplanen-trip') require('./db-netz-remarks') require('./vsn-departures') diff --git a/test/rejseplanen-trip.js b/test/rejseplanen-trip.js new file mode 100644 index 00000000..b1a6a975 --- /dev/null +++ b/test/rejseplanen-trip.js @@ -0,0 +1,29 @@ +'use strict' + +const test = require('tape') + +const createClient = require('..') +const rawProfile = require('../p/rejseplanen') +const res = require('./fixtures/rejseplanen-trip.json') +const expected = require('./fixtures/rejseplanen-trip.js') + +const client = createClient(rawProfile, 'public-transport/hafas-client:test') +const {profile} = client + +const opt = { + stopovers: true, + polyline: true, + subStops: false, + entrances: true, + remarks: true, + when: '2020-07-11T16:49:00+02:00', +} + +test('parses a trip correctly (Rejseplanen)', (t) => { + const common = profile.parseCommon({profile, opt, res}) + const ctx = {profile, opt, common, res} + const trip = profile.parseTrip(ctx, res.journey) + + t.deepEqual(trip, expected) + t.end() +})