parseLeg: use remarks without fIdx/tIdx 🐛

This commit is contained in:
Jannis R 2020-07-11 20:39:28 +02:00 committed by Jannis Redmann
parent 82de7409e8
commit 25fb25c18d
5 changed files with 353 additions and 3 deletions

View file

@ -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)

105
test/fixtures/rejseplanen-trip.js vendored Normal file
View file

@ -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'
}

207
test/fixtures/rejseplanen-trip.json vendored Normal file
View file

@ -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"
}

View file

@ -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')

29
test/rejseplanen-trip.js Normal file
View file

@ -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()
})