diff --git a/index.js b/index.js index b94c4c8a..3177fb05 100644 --- a/index.js +++ b/index.js @@ -322,7 +322,7 @@ const createClient = (profile, userAgent, opt = {}) => { const {res} = await profile.request({profile, opt}, userAgent, req); const ctx = {profile, opt, common, res}; - const trip = profile.parseTrip(ctx, res); + const trip = profile.parseTrip(ctx, res, id); return { trip, diff --git a/parse/line.js b/parse/line.js index c8abb657..b9c3e631 100644 --- a/parse/line.js +++ b/parse/line.js @@ -2,12 +2,12 @@ import slugg from 'slugg'; const parseLine = (ctx, p) => { const profile = ctx.profile; - const fahrtNr = p.verkehrsmittel?.nummer || p.transport?.number || p.train?.no || ((p.risZuglaufId || '') + '_').split('_')[1] || p.verkehrsmittelNummer || ((p.mitteltext || '') + ' ').split(' ')[1]; + const fahrtNr = p.verkehrsmittel?.nummer || p.transport?.number || p.train?.no || ((p.risZuglaufId || '') + '_').split('_')[1] || p.verkehrsmittelNummer || ((p.mitteltext || '') + ' ').split(' ')[1] || ((p.zugName || '') + ' ').split(' ')[1]; const res = { type: 'line', - id: slugg(p.verkehrsmittel?.langText || p.transport?.journeyDescription || p.train && p.train.category + ' ' + p.train.lineName + ' ' + p.train.no || p.langtext || p.mitteltext), // TODO terrible + id: slugg(p.verkehrsmittel?.langText || p.transport?.journeyDescription || p.risZuglaufId || p.train && p.train.category + ' ' + p.train.lineName + ' ' + p.train.no || p.langtext || p.mitteltext || p.zugName), // TODO terrible fahrtNr: String(fahrtNr), - name: p.verkehrsmittel?.langText || p.verkehrsmittel?.name || p.zugName || p.transport?.journeyDescription || p.train && p.train.category + ' ' + p.train.lineName || p.langtext || p.mitteltext, + name: p.verkehrsmittel?.langText || p.verkehrsmittel?.name || p.zugName || p.transport && p.transport.category + ' ' + p.transport.line || p.train && p.train.category + ' ' + p.train.lineName || p.mitteltext || p.langtext, public: true, }; diff --git a/parse/trip.js b/parse/trip.js index 594f3afa..b0aa30bb 100644 --- a/parse/trip.js +++ b/parse/trip.js @@ -1,9 +1,9 @@ -const parseTrip = (ctx, t) => { // t = raw trip +const parseTrip = (ctx, t, id) => { // t = raw trip const {profile} = ctx; // pretend the trip is a leg in a journey const trip = profile.parseJourneyLeg(ctx, t); - trip.id = trip.tripId; // TODO journeyId + trip.id = trip.tripId || id; // TODO journeyId delete trip.tripId; delete trip.reachable; trip.cancelled = profile.parseCancelled(t); diff --git a/readme.md b/readme.md index 6bbb7326..9dddbc7a 100644 --- a/readme.md +++ b/readme.md @@ -31,8 +31,8 @@ Depending on the configured profile, db-vendo-client will use multiple different | tickets | only for `refreshJourney()` | only for `refreshJourney()`, mutually exclusive with polylines | | polylines | only for `trip()` | only for `refreshJourney()/trip()`, mutually exclusive with tickets | | trip ids used | HAFAS trip ids for journeys, RIS trip ids for boards (static on train splits?) | HAFAS trip ids | -| line.id/fahrtNr used | unreliable/route id for journeys, actual fahrtNr for boards | unreliable/route id | -| adminCode/operator | adminCode only for boards | only for `journeys()` | +| line.id/fahrtNr used | unreliable/route id for journeys/`trip()`, actual fahrtNr for boards | actual fahrtNr for journeys, unreliable/route id for boards and `trip()` | +| adminCode/operator | adminCode only for boards | only for journeys | | `stop()` | ❌ | ✅ | | assumed backend API stability | less stable | more stable | diff --git a/test/db-trip.js b/test/db-trip.js new file mode 100644 index 00000000..2365d582 --- /dev/null +++ b/test/db-trip.js @@ -0,0 +1,28 @@ +// todo: use import assertions once they're supported by Node.js & ESLint +// https://github.com/tc39/proposal-import-assertions +import {createRequire} from 'module'; +const require = createRequire(import.meta.url); + +import tap from 'tap'; + +import {createClient} from '../index.js'; +import {profile as rawProfile} from '../p/db/index.js'; +const res = require('./fixtures/db-trip.json'); +import {dbTrip as expected} from './fixtures/db-trip.js'; + +const client = createClient(rawProfile, 'public-transport/hafas-client:test', {enrichStations: false}); +const {profile} = client; + +const opt = { + stopovers: true, + remarks: true, + products: {}, +}; + +tap.test('parses a trip correctly (DB)', (t) => { + const ctx = {profile, opt, common: null, res}; + const trip = profile.parseTrip(ctx, res, 'foo'); + + t.same(trip, expected.trip); + t.end(); +}); diff --git a/test/dbnav-trip.js b/test/dbnav-trip.js new file mode 100644 index 00000000..62ef9684 --- /dev/null +++ b/test/dbnav-trip.js @@ -0,0 +1,30 @@ +// todo: use import assertions once they're supported by Node.js & ESLint +// https://github.com/tc39/proposal-import-assertions +import {createRequire} from 'module'; +const require = createRequire(import.meta.url); + +import tap from 'tap'; + +import {createClient} from '../index.js'; +import {profile as rawProfile} from '../p/dbnav/index.js'; +const res = require('./fixtures/dbnav-trip.json'); +import {dbTrip as expected} from './fixtures/dbnav-trip.js'; + +const client = createClient(rawProfile, 'public-transport/hafas-client:test', {enrichStations: false}); +const {profile} = client; + +const opt = { + stopovers: true, + remarks: true, + + products: {}, +}; + +tap.test('parses a trip correctly (DBnav)', (t) => { + const ctx = {profile, opt, common: null, res}; + const trip = profile.parseTrip(ctx, res, 'foo'); + + t.same(trip, expected.trip); + // console.log(JSON.stringify(trip, function(k, v) { return v === undefined ? "undefined" : v; })); + t.end(); +}); diff --git a/test/fixtures/db-arrivals.js b/test/fixtures/db-arrivals.js index 49843f42..e4092440 100644 --- a/test/fixtures/db-arrivals.js +++ b/test/fixtures/db-arrivals.js @@ -17,7 +17,7 @@ const dbArrivals = [ type: 'line', id: 's-42-42323', fahrtNr: '42323', - name: 'S 42 (42323)', + name: 'S 42', public: true, productName: 'S', mode: 'train', @@ -62,7 +62,7 @@ const dbArrivals = [ type: 'line', id: 'u-7-15421', fahrtNr: '15421', - name: 'U 7 (15421)', + name: 'U 7', public: true, productName: 'U', mode: 'train', @@ -113,7 +113,7 @@ const dbArrivals = [ type: 'line', id: 'bus-m21-93424', fahrtNr: '93424', - name: 'Bus M21 (93424)', + name: 'Bus M21', public: true, productName: 'Bus', mode: 'bus', @@ -164,7 +164,7 @@ const dbArrivals = [ type: 'line', id: 's-41-41254', fahrtNr: '41254', - name: 'S 41 (41254)', + name: 'S 41', public: true, productName: 'S', mode: 'train', @@ -209,7 +209,7 @@ const dbArrivals = [ type: 'line', id: 'u-7-15422', fahrtNr: '15422', - name: 'U 7 (15422)', + name: 'U 7', public: true, productName: 'U', mode: 'train', @@ -260,7 +260,7 @@ const dbArrivals = [ type: 'line', id: 's-42-42325', fahrtNr: '42325', - name: 'S 42 (42325)', + name: 'S 42', public: true, productName: 'S', mode: 'train', @@ -305,7 +305,7 @@ const dbArrivals = [ type: 'line', id: 'u-7-15752', fahrtNr: '15752', - name: 'U 7 (15752)', + name: 'U 7', public: true, productName: 'U', mode: 'train', diff --git a/test/fixtures/db-trip.js b/test/fixtures/db-trip.js new file mode 100644 index 00000000..8a933533 --- /dev/null +++ b/test/fixtures/db-trip.js @@ -0,0 +1,474 @@ +const dbTrip = { + trip: { + id: 'foo', + origin: { + type: 'station', + id: '8004168', + name: 'München Flughafen Terminal', + location: { + type: 'location', + id: '8004168', + latitude: 48.353732, + longitude: 11.785973, + }, + }, + destination: { + type: 'station', + id: '8000284', + name: 'Nürnberg Hbf', + location: { + type: 'location', + id: '8000284', + latitude: 49.445615, + longitude: 11.082989, + }, + }, + departure: '2025-01-17T15:16:00+01:00', + plannedDeparture: '2025-01-17T15:16:00+01:00', + departureDelay: null, + arrival: '2025-01-17T17:49:00+01:00', + plannedArrival: '2025-01-17T17:49:00+01:00', + arrivalDelay: null, + line: { + type: 'line', + id: 'ag-84100', + fahrtNr: '84100', + name: 'ag 84100', + productName: undefined, + product: undefined, + mode: undefined, + public: true, + operator: null, + }, + direction: null, + arrivalPlatform: '13', + plannedArrivalPlatform: '13', + departurePlatform: '1', + plannedDeparturePlatform: '1', + stopovers: [ + { + stop: { + type: 'station', + id: '8004168', + name: 'München Flughafen Terminal', + location: { + type: 'location', + id: '8004168', + latitude: 48.353732, + longitude: 11.785973, + }, + }, + arrival: null, + plannedArrival: null, + arrivalDelay: null, + arrivalPlatform: '1', + arrivalPrognosisType: null, + plannedArrivalPlatform: '1', + departure: '2025-01-17T15:16:00+01:00', + plannedDeparture: '2025-01-17T15:16:00+01:00', + departureDelay: null, + departurePlatform: '1', + departurePrognosisType: null, + plannedDeparturePlatform: '1', + remarks: [], + }, + { + stop: { + type: 'station', + id: '8004167', + name: 'München Flughafen Besucherpark', + location: { + type: 'location', + id: '8004167', + latitude: 48.352095, + longitude: 11.764183, + }, + }, + arrival: '2025-01-17T15:18:00+01:00', + plannedArrival: '2025-01-17T15:18:00+01:00', + arrivalDelay: null, + arrivalPlatform: '1', + arrivalPrognosisType: null, + plannedArrivalPlatform: '1', + departure: '2025-01-17T15:18:00+01:00', + plannedDeparture: '2025-01-17T15:18:00+01:00', + departureDelay: null, + departurePlatform: '1', + departurePrognosisType: null, + plannedDeparturePlatform: '1', + remarks: [], + }, + { + stop: { + type: 'station', + id: '8002078', + name: 'Freising', + location: { + type: 'location', + id: '8002078', + latitude: 48.395199, + longitude: 11.744542, + }, + }, + arrival: '2025-01-17T15:28:00+01:00', + plannedArrival: '2025-01-17T15:28:00+01:00', + arrivalDelay: null, + arrivalPlatform: '4', + arrivalPrognosisType: null, + plannedArrivalPlatform: '4', + departure: '2025-01-17T15:29:00+01:00', + plannedDeparture: '2025-01-17T15:29:00+01:00', + departureDelay: null, + departurePlatform: '4', + departurePrognosisType: null, + plannedDeparturePlatform: '4', + remarks: [], + }, + { + stop: { + type: 'station', + id: '8004084', + name: 'Moosburg', + location: { + type: 'location', + id: '8004084', + latitude: 48.470331, + longitude: 11.930385, + }, + }, + arrival: '2025-01-17T15:37:00+01:00', + plannedArrival: '2025-01-17T15:37:00+01:00', + arrivalDelay: null, + arrivalPlatform: '1', + arrivalPrognosisType: null, + plannedArrivalPlatform: '1', + departure: '2025-01-17T15:38:00+01:00', + plannedDeparture: '2025-01-17T15:38:00+01:00', + departureDelay: null, + departurePlatform: '1', + departurePrognosisType: null, + plannedDeparturePlatform: '1', + remarks: [], + }, + { + stop: { + type: 'station', + id: '8000217', + name: 'Landshut(Bay)Hbf', + location: { + type: 'location', + id: '8000217', + latitude: 48.547494, + longitude: 12.135932, + }, + }, + arrival: '2025-01-17T15:50:00+01:00', + plannedArrival: '2025-01-17T15:50:00+01:00', + arrivalDelay: null, + arrivalPlatform: '5', + arrivalPrognosisType: null, + plannedArrivalPlatform: '5', + departure: '2025-01-17T15:53:00+01:00', + plannedDeparture: '2025-01-17T15:53:00+01:00', + departureDelay: null, + departurePlatform: '5', + departurePrognosisType: null, + plannedDeparturePlatform: '5', + remarks: [], + }, + { + stop: { + type: 'station', + id: '8001835', + name: 'Ergoldsbach', + location: { + type: 'location', + id: '8001835', + latitude: 48.693865, + longitude: 12.201877, + }, + }, + arrival: '2025-01-17T16:05:00+01:00', + plannedArrival: '2025-01-17T16:05:00+01:00', + arrivalDelay: null, + arrivalPlatform: '1', + arrivalPrognosisType: null, + plannedArrivalPlatform: '1', + departure: '2025-01-17T16:06:00+01:00', + plannedDeparture: '2025-01-17T16:06:00+01:00', + departureDelay: null, + departurePlatform: '1', + departurePrognosisType: null, + plannedDeparturePlatform: '1', + remarks: [], + }, + { + stop: { + type: 'station', + id: '8000688', + name: 'Neufahrn(Niederbay)', + location: { + type: 'location', + id: '8000688', + latitude: 48.729885, + longitude: 12.19046, + }, + }, + arrival: '2025-01-17T16:09:00+01:00', + plannedArrival: '2025-01-17T16:09:00+01:00', + arrivalDelay: null, + arrivalPlatform: '2', + arrivalPrognosisType: null, + plannedArrivalPlatform: '2', + departure: '2025-01-17T16:10:00+01:00', + plannedDeparture: '2025-01-17T16:10:00+01:00', + departureDelay: null, + departurePlatform: '2', + departurePrognosisType: null, + plannedDeparturePlatform: '2', + remarks: [], + }, + { + stop: { + type: 'station', + id: '8001679', + name: 'Eggmühl', + location: { + type: 'location', + id: '8001679', + latitude: 48.836497, + longitude: 12.18219, + }, + }, + arrival: '2025-01-17T16:19:00+01:00', + plannedArrival: '2025-01-17T16:19:00+01:00', + arrivalDelay: null, + arrivalPlatform: '3', + arrivalPrognosisType: null, + plannedArrivalPlatform: '3', + departure: '2025-01-17T16:20:00+01:00', + plannedDeparture: '2025-01-17T16:20:00+01:00', + departureDelay: null, + departurePlatform: '3', + departurePrognosisType: null, + plannedDeparturePlatform: '3', + remarks: [], + }, + { + stop: { + type: 'station', + id: '8002506', + name: 'Hagelstadt', + location: { + type: 'location', + id: '8002506', + latitude: 48.895862, + longitude: 12.21483, + }, + }, + arrival: '2025-01-17T16:25:00+01:00', + plannedArrival: '2025-01-17T16:25:00+01:00', + arrivalDelay: null, + arrivalPlatform: '2', + arrivalPrognosisType: null, + plannedArrivalPlatform: '2', + departure: '2025-01-17T16:26:00+01:00', + plannedDeparture: '2025-01-17T16:26:00+01:00', + departureDelay: null, + departurePlatform: '2', + departurePrognosisType: null, + plannedDeparturePlatform: '2', + remarks: [], + }, + { + stop: { + type: 'station', + id: '8003357', + name: 'Köfering', + location: { + type: 'location', + id: '8003357', + latitude: 48.93172, + longitude: 12.208753, + }, + }, + arrival: '2025-01-17T16:29:00+01:00', + plannedArrival: '2025-01-17T16:29:00+01:00', + arrivalDelay: null, + arrivalPlatform: '2', + arrivalPrognosisType: null, + plannedArrivalPlatform: '2', + departure: '2025-01-17T16:30:00+01:00', + plannedDeparture: '2025-01-17T16:30:00+01:00', + departureDelay: null, + departurePlatform: '2', + departurePrognosisType: null, + plannedDeparturePlatform: '2', + remarks: [], + }, + { + stop: { + type: 'station', + id: '8004592', + name: 'Obertraubling', + location: { + type: 'location', + id: '8004592', + latitude: 48.967533, + longitude: 12.169992, + }, + }, + arrival: '2025-01-17T16:33:00+01:00', + plannedArrival: '2025-01-17T16:33:00+01:00', + arrivalDelay: null, + arrivalPlatform: '2', + arrivalPrognosisType: null, + plannedArrivalPlatform: '2', + departure: '2025-01-17T16:34:00+01:00', + plannedDeparture: '2025-01-17T16:34:00+01:00', + departureDelay: null, + departurePlatform: '2', + departurePrognosisType: null, + plannedDeparturePlatform: '2', + remarks: [], + }, + { + stop: { + type: 'station', + id: '8000309', + name: 'Regensburg Hbf', + location: { + type: 'location', + id: '8000309', + latitude: 49.01167, + longitude: 12.099615, + }, + }, + arrival: '2025-01-17T16:41:00+01:00', + plannedArrival: '2025-01-17T16:41:00+01:00', + arrivalDelay: null, + arrivalPlatform: '5', + arrivalPrognosisType: null, + plannedArrivalPlatform: '5', + departure: '2025-01-17T16:45:00+01:00', + plannedDeparture: '2025-01-17T16:45:00+01:00', + departureDelay: null, + departurePlatform: '5', + departurePrognosisType: null, + plannedDeparturePlatform: '5', + remarks: [], + }, + { + stop: { + type: 'station', + id: '8000882', + name: 'Beratzhausen', + location: { + type: 'location', + id: '8000882', + latitude: 49.092843, + longitude: 11.807853, + }, + }, + arrival: '2025-01-17T17:02:00+01:00', + plannedArrival: '2025-01-17T17:02:00+01:00', + arrivalDelay: null, + arrivalPlatform: '2', + arrivalPrognosisType: null, + plannedArrivalPlatform: '2', + departure: '2025-01-17T17:02:00+01:00', + plannedDeparture: '2025-01-17T17:02:00+01:00', + departureDelay: null, + departurePlatform: '2', + departurePrognosisType: null, + plannedDeparturePlatform: '2', + remarks: [], + }, + { + stop: { + type: 'station', + id: '8004755', + name: 'Parsberg', + location: { + type: 'location', + id: '8004755', + latitude: 49.164352, + longitude: 11.723354, + }, + }, + arrival: '2025-01-17T17:08:00+01:00', + plannedArrival: '2025-01-17T17:08:00+01:00', + arrivalDelay: null, + arrivalPlatform: '2', + arrivalPrognosisType: null, + plannedArrivalPlatform: '2', + departure: '2025-01-17T17:09:00+01:00', + plannedDeparture: '2025-01-17T17:09:00+01:00', + departureDelay: null, + departurePlatform: '2', + departurePrognosisType: null, + plannedDeparturePlatform: '2', + remarks: [], + }, + { + stop: { + type: 'station', + id: '8004305', + name: 'Neumarkt(Oberpf)', + location: { + type: 'location', + id: '8004305', + latitude: 49.27322, + longitude: 11.456986, + }, + }, + arrival: '2025-01-17T17:25:00+01:00', + plannedArrival: '2025-01-17T17:25:00+01:00', + arrivalDelay: null, + arrivalPlatform: '1', + arrivalPrognosisType: null, + plannedArrivalPlatform: '1', + departure: '2025-01-17T17:26:00+01:00', + plannedDeparture: '2025-01-17T17:26:00+01:00', + departureDelay: null, + departurePlatform: '1', + departurePrognosisType: null, + plannedDeparturePlatform: '1', + remarks: [], + }, + { + stop: { + type: 'station', + id: '8000284', + name: 'Nürnberg Hbf', + location: { + type: 'location', + id: '8000284', + latitude: 49.445615, + longitude: 11.082989, + }, + }, + arrival: '2025-01-17T17:49:00+01:00', + plannedArrival: '2025-01-17T17:49:00+01:00', + arrivalDelay: null, + arrivalPlatform: '13', + arrivalPrognosisType: null, + plannedArrivalPlatform: '13', + departure: null, + plannedDeparture: null, + departureDelay: null, + departurePlatform: '13', + departurePrognosisType: null, + plannedDeparturePlatform: '13', + remarks: [], + }, + ], + remarks: [], + cancelled: false, + }, + realtimeDataUpdatedAt: null, +}; + +export { + dbTrip, +}; diff --git a/test/fixtures/db-trip.json b/test/fixtures/db-trip.json new file mode 100644 index 00000000..308859ba --- /dev/null +++ b/test/fixtures/db-trip.json @@ -0,0 +1 @@ +{"reisetag":"2025-01-17","regulaereVerkehrstage":"daily","zugName":"ag 84100","halte":[{"id":"A=1@O=München Flughafen Terminal@X=11785973@Y=48353732@U=81@L=8004168@i=U×008020658@","abfahrtsZeitpunkt":"2025-01-17T15:16:00","auslastungsmeldungen":[{"klasse":"KLASSE_1","stufe":0},{"klasse":"KLASSE_2","stufe":0}],"gleis":"1","name":"München Flughafen Terminal","risNotizen":[],"bahnhofsInfoId":"1822","extId":"8004168","routeIdx":0,"priorisierteMeldungen":[],"adminID":"S9","kategorie":"ag","nummer":"84100"},{"id":"A=1@O=München Flughafen Besucherpark@X=11764183@Y=48352095@U=81@L=8004167@i=U×008020657@","abfahrtsZeitpunkt":"2025-01-17T15:18:00","ankunftsZeitpunkt":"2025-01-17T15:18:00","auslastungsmeldungen":[{"klasse":"KLASSE_1","stufe":0},{"klasse":"KLASSE_2","stufe":0}],"gleis":"1","name":"München Flughafen Besucherpark","risNotizen":[],"bahnhofsInfoId":"1823","extId":"8004167","routeIdx":1,"priorisierteMeldungen":[],"adminID":"S9","kategorie":"ag","nummer":"84100"},{"id":"A=1@O=Freising@X=11744542@Y=48395199@U=81@L=8002078@i=U×008020487@","abfahrtsZeitpunkt":"2025-01-17T15:29:00","ankunftsZeitpunkt":"2025-01-17T15:28:00","auslastungsmeldungen":[{"klasse":"KLASSE_1","stufe":0},{"klasse":"KLASSE_2","stufe":0}],"gleis":"4","name":"Freising","risNotizen":[],"bahnhofsInfoId":"1908","extId":"8002078","routeIdx":2,"priorisierteMeldungen":[],"adminID":"S9","kategorie":"ag","nummer":"84100"},{"id":"A=1@O=Moosburg@X=11930385@Y=48470331@U=81@L=8004084@i=U×008020471@","abfahrtsZeitpunkt":"2025-01-17T15:38:00","ankunftsZeitpunkt":"2025-01-17T15:37:00","auslastungsmeldungen":[{"klasse":"KLASSE_1","stufe":0},{"klasse":"KLASSE_2","stufe":0}],"gleis":"1","name":"Moosburg","risNotizen":[],"bahnhofsInfoId":"4172","extId":"8004084","routeIdx":3,"priorisierteMeldungen":[],"adminID":"S9","kategorie":"ag","nummer":"84100"},{"id":"A=1@O=Landshut(Bay)Hbf@X=12135932@Y=48547494@U=81@L=8000217@i=U×008026353@","abfahrtsZeitpunkt":"2025-01-17T15:53:00","ankunftsZeitpunkt":"2025-01-17T15:50:00","auslastungsmeldungen":[{"klasse":"KLASSE_1","stufe":0},{"klasse":"KLASSE_2","stufe":0}],"gleis":"5","name":"Landshut(Bay)Hbf","risNotizen":[],"bahnhofsInfoId":"3513","extId":"8000217","routeIdx":4,"priorisierteMeldungen":[],"adminID":"S9","kategorie":"ag","nummer":"84100"},{"id":"A=1@O=Ergoldsbach@X=12201877@Y=48693865@U=81@L=8001835@i=U×008026349@","abfahrtsZeitpunkt":"2025-01-17T16:06:00","ankunftsZeitpunkt":"2025-01-17T16:05:00","auslastungsmeldungen":[{"klasse":"KLASSE_1","stufe":0},{"klasse":"KLASSE_2","stufe":0}],"gleis":"1","name":"Ergoldsbach","risNotizen":[],"bahnhofsInfoId":"1640","extId":"8001835","routeIdx":5,"priorisierteMeldungen":[],"adminID":"S9","kategorie":"ag","nummer":"84100"},{"id":"A=1@O=Neufahrn(Niederbay)@X=12190460@Y=48729885@U=81@L=8000688@i=U×008026340@","abfahrtsZeitpunkt":"2025-01-17T16:10:00","ankunftsZeitpunkt":"2025-01-17T16:09:00","auslastungsmeldungen":[{"klasse":"KLASSE_1","stufe":0},{"klasse":"KLASSE_2","stufe":0}],"gleis":"2","name":"Neufahrn(Niederbay)","risNotizen":[],"bahnhofsInfoId":"4390","extId":"8000688","routeIdx":6,"priorisierteMeldungen":[],"adminID":"S9","kategorie":"ag","nummer":"84100"},{"id":"A=1@O=Eggmühl@X=12182190@Y=48836497@U=81@L=8001679@i=U×008026334@","abfahrtsZeitpunkt":"2025-01-17T16:20:00","ankunftsZeitpunkt":"2025-01-17T16:19:00","auslastungsmeldungen":[{"klasse":"KLASSE_1","stufe":0},{"klasse":"KLASSE_2","stufe":0}],"gleis":"3","name":"Eggmühl","risNotizen":[],"bahnhofsInfoId":"1478","extId":"8001679","routeIdx":7,"priorisierteMeldungen":[],"adminID":"S9","kategorie":"ag","nummer":"84100"},{"id":"A=1@O=Hagelstadt@X=12214830@Y=48895862@U=81@L=8002506@i=U×008026333@","abfahrtsZeitpunkt":"2025-01-17T16:26:00","ankunftsZeitpunkt":"2025-01-17T16:25:00","auslastungsmeldungen":[{"klasse":"KLASSE_1","stufe":0},{"klasse":"KLASSE_2","stufe":0}],"gleis":"2","name":"Hagelstadt","risNotizen":[],"bahnhofsInfoId":"2455","extId":"8002506","routeIdx":8,"priorisierteMeldungen":[],"adminID":"S9","kategorie":"ag","nummer":"84100"},{"id":"A=1@O=Köfering@X=12208753@Y=48931720@U=81@L=8003357@i=U×008026332@","abfahrtsZeitpunkt":"2025-01-17T16:30:00","ankunftsZeitpunkt":"2025-01-17T16:29:00","auslastungsmeldungen":[{"klasse":"KLASSE_1","stufe":0},{"klasse":"KLASSE_2","stufe":0}],"gleis":"2","name":"Köfering","risNotizen":[],"bahnhofsInfoId":"3308","extId":"8003357","routeIdx":9,"priorisierteMeldungen":[],"adminID":"S9","kategorie":"ag","nummer":"84100"},{"id":"A=1@O=Obertraubling@X=12169992@Y=48967533@U=81@L=8004592@i=U×008026331@","abfahrtsZeitpunkt":"2025-01-17T16:34:00","ankunftsZeitpunkt":"2025-01-17T16:33:00","auslastungsmeldungen":[{"klasse":"KLASSE_1","stufe":0},{"klasse":"KLASSE_2","stufe":0}],"gleis":"2","name":"Obertraubling","risNotizen":[],"bahnhofsInfoId":"4699","extId":"8004592","routeIdx":10,"priorisierteMeldungen":[],"adminID":"S9","kategorie":"ag","nummer":"84100"},{"id":"A=1@O=Regensburg Hbf@X=12099615@Y=49011670@U=81@L=8000309@i=U×008026294@","abfahrtsZeitpunkt":"2025-01-17T16:45:00","ankunftsZeitpunkt":"2025-01-17T16:41:00","auslastungsmeldungen":[{"klasse":"KLASSE_1","stufe":0},{"klasse":"KLASSE_2","stufe":0}],"gleis":"5","name":"Regensburg Hbf","risNotizen":[],"bahnhofsInfoId":"5169","extId":"8000309","routeIdx":11,"priorisierteMeldungen":[],"adminID":"S9","kategorie":"ag","nummer":"63070"},{"id":"A=1@O=Beratzhausen@X=11807853@Y=49092843@U=81@L=8000882@i=U×008026302@","abfahrtsZeitpunkt":"2025-01-17T17:02:00","ankunftsZeitpunkt":"2025-01-17T17:02:00","auslastungsmeldungen":[{"klasse":"KLASSE_1","stufe":0},{"klasse":"KLASSE_2","stufe":0}],"gleis":"2","name":"Beratzhausen","risNotizen":[],"bahnhofsInfoId":"0491","extId":"8000882","routeIdx":12,"priorisierteMeldungen":[],"adminID":"S9","kategorie":"ag","nummer":"63070"},{"id":"A=1@O=Parsberg@X=11723354@Y=49164352@U=81@L=8004755@i=U×008026304@","abfahrtsZeitpunkt":"2025-01-17T17:09:00","ankunftsZeitpunkt":"2025-01-17T17:08:00","auslastungsmeldungen":[{"klasse":"KLASSE_1","stufe":0},{"klasse":"KLASSE_2","stufe":0}],"gleis":"2","name":"Parsberg","risNotizen":[],"bahnhofsInfoId":"4868","extId":"8004755","routeIdx":13,"priorisierteMeldungen":[],"adminID":"S9","kategorie":"ag","nummer":"63070"},{"id":"A=1@O=Neumarkt(Oberpf)@X=11456986@Y=49273220@U=81@L=8004305@i=U×008022353@","abfahrtsZeitpunkt":"2025-01-17T17:26:00","ankunftsZeitpunkt":"2025-01-17T17:25:00","auslastungsmeldungen":[{"klasse":"KLASSE_1","stufe":0},{"klasse":"KLASSE_2","stufe":0}],"gleis":"1","name":"Neumarkt(Oberpf)","risNotizen":[],"bahnhofsInfoId":"4416","extId":"8004305","routeIdx":14,"priorisierteMeldungen":[],"adminID":"S9","kategorie":"ag","nummer":"63070"},{"id":"A=1@O=Nürnberg Hbf@X=11082989@Y=49445615@U=81@L=8000284@i=U×008022193@","ankunftsZeitpunkt":"2025-01-17T17:49:00","auslastungsmeldungen":[{"klasse":"KLASSE_1","stufe":0},{"klasse":"KLASSE_2","stufe":0}],"gleis":"13","name":"Nürnberg Hbf","risNotizen":[],"bahnhofsInfoId":"4593","extId":"8000284","routeIdx":15,"priorisierteMeldungen":[],"adminID":"S9","kategorie":"ag","nummer":"63070"}],"himMeldungen":[],"risNotizen":[],"zugattribute":[{"kategorie":"BARRIEREFREI","key":"EA","value":"Behindertengerechte Ausstattung"},{"kategorie":"FAHRRADMITNAHME","key":"FB","value":"Number of bicycles conveyed limited"},{"kategorie":"INFORMATION","key":"ZR","value":"vertraglicher Beförderer DB Regio","teilstreckenHinweis":"(München Flughafen Terminal - Regensburg Hbf)"},{"kategorie":"INFORMATION","key":"LS","value":"power sockets for laptop"},{"kategorie":"INFORMATION","key":"KL","value":"air conditioning"},{"kategorie":"INFORMATION","key":"WV","value":"Wifi available"}],"priorisierteMeldungen":[],"abfahrtsZeitpunkt":"2025-01-17T15:16:00","ankunftsZeitpunkt":"2025-01-17T17:49:00","cancelled":false} \ No newline at end of file diff --git a/test/fixtures/dbnav-refresh-journey.js b/test/fixtures/dbnav-refresh-journey.js index 5ec74937..646bee94 100644 --- a/test/fixtures/dbnav-refresh-journey.js +++ b/test/fixtures/dbnav-refresh-journey.js @@ -34,9 +34,9 @@ const dbNavJourney = { tripId: '2|#VN#1#ST#1735585219#PI#1#ZI#888642#TA#1#DA#30125#1S#8000105#1T#1756#LS#8000007#LT#1921#PU#81#RT#1#CA#DPN#ZE#29266#ZB#RB 29266#PC#3#FR#8000105#FT#1756#TO#8000007#TT#1921#', line: { type: 'line', - id: 'rb-31-29266', + id: 'rb-29266', fahrtNr: '29266', - name: 'RB 31 (29266)', + name: 'RB 31', public: true, productName: 'RB', mode: 'train', diff --git a/test/fixtures/dbnav-trip.js b/test/fixtures/dbnav-trip.js new file mode 100644 index 00000000..e2b205e9 --- /dev/null +++ b/test/fixtures/dbnav-trip.js @@ -0,0 +1,529 @@ +const dbTrip = { + trip: { + id: 'foo', + origin: { + type: 'station', + id: '8004168', + name: 'München Flughafen Terminal', + location: { + type: 'location', + id: '8004168', + latitude: 48.353733, + longitude: 11.785973, + }, + }, + destination: { + type: 'station', + id: '8000284', + name: 'Nürnberg Hbf', + location: { + type: 'location', + id: '8000284', + latitude: 49.445435, + longitude: 11.08227, + }, + }, + departure: '2025-01-17T15:16:00+01:00', + plannedDeparture: '2025-01-17T15:16:00+01:00', + departureDelay: null, + arrival: '2025-01-17T17:49:00+01:00', + plannedArrival: '2025-01-17T17:49:00+01:00', + arrivalDelay: null, + line: { + type: 'line', + id: 'ag-re22', + fahrtNr: '84100', + name: 'ag RE22', + public: true, + productName: 'ag', + mode: 'train', + product: 'regional', + operator: { + type: 'operator', + id: 'agilis', + name: 'agilis', + }, + }, + direction: 'Nürnberg Hbf', + arrivalPlatform: '13', + plannedArrivalPlatform: '13', + departurePlatform: '1', + plannedDeparturePlatform: '1', + stopovers: [ + { + stop: { + type: 'station', + id: '8004168', + name: 'München Flughafen Terminal', + location: { + type: 'location', + id: '8004168', + latitude: 48.353733, + longitude: 11.785973, + }, + }, + arrival: null, + plannedArrival: null, + arrivalDelay: null, + arrivalPlatform: '1', + arrivalPrognosisType: null, + plannedArrivalPlatform: '1', + departure: '2025-01-17T15:16:00+01:00', + plannedDeparture: '2025-01-17T15:16:00+01:00', + departureDelay: null, + departurePlatform: '1', + departurePrognosisType: null, + plannedDeparturePlatform: '1', + remarks: [ + { + code: 'text.journeystop.product.or.direction.changes.stop.message', + summary: 'As ag 84100 heading towards Nürnberg Hbf from here', + text: 'As ag 84100 heading towards Nürnberg Hbf from here', + type: 'hint', + }, + ], + }, + { + stop: { + type: 'station', + id: '8004167', + name: 'München Flughafen Besucherpark', + location: { + type: 'location', + id: '8004167', + latitude: 48.352097, + longitude: 11.764174, + }, + }, + arrival: '2025-01-17T15:18:00+01:00', + plannedArrival: '2025-01-17T15:18:00+01:00', + arrivalDelay: null, + arrivalPlatform: '1', + arrivalPrognosisType: null, + plannedArrivalPlatform: '1', + departure: '2025-01-17T15:18:00+01:00', + plannedDeparture: '2025-01-17T15:18:00+01:00', + departureDelay: null, + departurePlatform: '1', + departurePrognosisType: null, + plannedDeparturePlatform: '1', + remarks: [], + }, + { + stop: { + type: 'station', + id: '8002078', + name: 'Freising', + location: { + type: 'location', + id: '8002078', + latitude: 48.39498, + longitude: 11.744551, + }, + }, + arrival: '2025-01-17T15:28:00+01:00', + plannedArrival: '2025-01-17T15:28:00+01:00', + arrivalDelay: null, + arrivalPlatform: '4', + arrivalPrognosisType: null, + plannedArrivalPlatform: '4', + departure: '2025-01-17T15:29:00+01:00', + plannedDeparture: '2025-01-17T15:29:00+01:00', + departureDelay: null, + departurePlatform: '4', + departurePrognosisType: null, + plannedDeparturePlatform: '4', + remarks: [], + }, + { + stop: { + type: 'station', + id: '8004084', + name: 'Moosburg', + location: { + type: 'location', + id: '8004084', + latitude: 48.46998, + longitude: 11.930492, + }, + }, + arrival: '2025-01-17T15:37:00+01:00', + plannedArrival: '2025-01-17T15:37:00+01:00', + arrivalDelay: null, + arrivalPlatform: '1', + arrivalPrognosisType: null, + plannedArrivalPlatform: '1', + departure: '2025-01-17T15:38:00+01:00', + plannedDeparture: '2025-01-17T15:38:00+01:00', + departureDelay: null, + departurePlatform: '1', + departurePrognosisType: null, + plannedDeparturePlatform: '1', + remarks: [], + }, + { + stop: { + type: 'station', + id: '8000217', + name: 'Landshut(Bay)Hbf', + location: { + type: 'location', + id: '8000217', + latitude: 48.547512, + longitude: 12.135878, + }, + }, + arrival: '2025-01-17T15:50:00+01:00', + plannedArrival: '2025-01-17T15:50:00+01:00', + arrivalDelay: null, + arrivalPlatform: '5', + arrivalPrognosisType: null, + plannedArrivalPlatform: '5', + departure: '2025-01-17T15:53:00+01:00', + plannedDeparture: '2025-01-17T15:53:00+01:00', + departureDelay: null, + departurePlatform: '5', + departurePrognosisType: null, + plannedDeparturePlatform: '5', + remarks: [], + }, + { + stop: { + type: 'station', + id: '8001835', + name: 'Ergoldsbach', + location: { + type: 'location', + id: '8001835', + latitude: 48.69383, + longitude: 12.201877, + }, + }, + arrival: '2025-01-17T16:05:00+01:00', + plannedArrival: '2025-01-17T16:05:00+01:00', + arrivalDelay: null, + arrivalPlatform: '1', + arrivalPrognosisType: null, + plannedArrivalPlatform: '1', + departure: '2025-01-17T16:06:00+01:00', + plannedDeparture: '2025-01-17T16:06:00+01:00', + departureDelay: null, + departurePlatform: '1', + departurePrognosisType: null, + plannedDeparturePlatform: '1', + remarks: [], + }, + { + stop: { + type: 'station', + id: '8000688', + name: 'Neufahrn(Niederbay)', + location: { + type: 'location', + id: '8000688', + latitude: 48.729866, + longitude: 12.19046, + }, + }, + arrival: '2025-01-17T16:09:00+01:00', + plannedArrival: '2025-01-17T16:09:00+01:00', + arrivalDelay: null, + arrivalPlatform: '2', + arrivalPrognosisType: null, + plannedArrivalPlatform: '2', + departure: '2025-01-17T16:10:00+01:00', + plannedDeparture: '2025-01-17T16:10:00+01:00', + departureDelay: null, + departurePlatform: '2', + departurePrognosisType: null, + plannedDeparturePlatform: '2', + remarks: [], + }, + { + stop: { + type: 'station', + id: '8001679', + name: 'Eggmühl', + location: { + type: 'location', + id: '8001679', + latitude: 48.8365, + longitude: 12.182217, + }, + }, + arrival: '2025-01-17T16:19:00+01:00', + plannedArrival: '2025-01-17T16:19:00+01:00', + arrivalDelay: null, + arrivalPlatform: '3', + arrivalPrognosisType: null, + plannedArrivalPlatform: '3', + departure: '2025-01-17T16:20:00+01:00', + plannedDeparture: '2025-01-17T16:20:00+01:00', + departureDelay: null, + departurePlatform: '3', + departurePrognosisType: null, + plannedDeparturePlatform: '3', + remarks: [], + }, + { + stop: { + type: 'station', + id: '8002506', + name: 'Hagelstadt', + location: { + type: 'location', + id: '8002506', + latitude: 48.896034, + longitude: 12.214812, + }, + }, + arrival: '2025-01-17T16:25:00+01:00', + plannedArrival: '2025-01-17T16:25:00+01:00', + arrivalDelay: null, + arrivalPlatform: '2', + arrivalPrognosisType: null, + plannedArrivalPlatform: '2', + departure: '2025-01-17T16:26:00+01:00', + plannedDeparture: '2025-01-17T16:26:00+01:00', + departureDelay: null, + departurePlatform: '2', + departurePrognosisType: null, + plannedDeparturePlatform: '2', + remarks: [], + }, + { + stop: { + type: 'station', + id: '8003357', + name: 'Köfering', + location: { + type: 'location', + id: '8003357', + latitude: 48.931694, + longitude: 12.208736, + }, + }, + arrival: '2025-01-17T16:29:00+01:00', + plannedArrival: '2025-01-17T16:29:00+01:00', + arrivalDelay: null, + arrivalPlatform: '2', + arrivalPrognosisType: null, + plannedArrivalPlatform: '2', + departure: '2025-01-17T16:30:00+01:00', + plannedDeparture: '2025-01-17T16:30:00+01:00', + departureDelay: null, + departurePlatform: '2', + departurePrognosisType: null, + plannedDeparturePlatform: '2', + remarks: [], + }, + { + stop: { + type: 'station', + id: '8004592', + name: 'Obertraubling', + location: { + type: 'location', + id: '8004592', + latitude: 48.967514, + longitude: 12.169974, + }, + }, + arrival: '2025-01-17T16:33:00+01:00', + plannedArrival: '2025-01-17T16:33:00+01:00', + arrivalDelay: null, + arrivalPlatform: '2', + arrivalPrognosisType: null, + plannedArrivalPlatform: '2', + departure: '2025-01-17T16:34:00+01:00', + plannedDeparture: '2025-01-17T16:34:00+01:00', + departureDelay: null, + departurePlatform: '2', + departurePrognosisType: null, + plannedDeparturePlatform: '2', + remarks: [], + }, + { + stop: { + type: 'station', + id: '8000309', + name: 'Regensburg Hbf', + location: { + type: 'location', + id: '8000309', + latitude: 49.01175, + longitude: 12.099669, + }, + }, + arrival: '2025-01-17T16:41:00+01:00', + plannedArrival: '2025-01-17T16:41:00+01:00', + arrivalDelay: null, + arrivalPlatform: '5', + arrivalPrognosisType: null, + plannedArrivalPlatform: '5', + departure: '2025-01-17T16:45:00+01:00', + plannedDeparture: '2025-01-17T16:45:00+01:00', + departureDelay: null, + departurePlatform: '5', + departurePrognosisType: null, + plannedDeparturePlatform: '5', + remarks: [ + { + code: 'text.journeystop.product.or.direction.changes.stop.message', + summary: 'As ag 63070 heading towards Nürnberg Hbf from here', + text: 'As ag 63070 heading towards Nürnberg Hbf from here', + type: 'hint', + }, + ], + }, + { + stop: { + type: 'station', + id: '8000882', + name: 'Beratzhausen', + location: { + type: 'location', + id: '8000882', + latitude: 49.09251, + longitude: 11.808527, + }, + }, + arrival: '2025-01-17T17:02:00+01:00', + plannedArrival: '2025-01-17T17:02:00+01:00', + arrivalDelay: null, + arrivalPlatform: '2', + arrivalPrognosisType: null, + plannedArrivalPlatform: '2', + departure: '2025-01-17T17:02:00+01:00', + plannedDeparture: '2025-01-17T17:02:00+01:00', + departureDelay: null, + departurePlatform: '2', + departurePrognosisType: null, + plannedDeparturePlatform: '2', + remarks: [], + }, + { + stop: { + type: 'station', + id: '8004755', + name: 'Parsberg', + location: { + type: 'location', + id: '8004755', + latitude: 49.16416, + longitude: 11.724136, + }, + }, + arrival: '2025-01-17T17:08:00+01:00', + plannedArrival: '2025-01-17T17:08:00+01:00', + arrivalDelay: null, + arrivalPlatform: '2', + arrivalPrognosisType: null, + plannedArrivalPlatform: '2', + departure: '2025-01-17T17:09:00+01:00', + plannedDeparture: '2025-01-17T17:09:00+01:00', + departureDelay: null, + departurePlatform: '2', + departurePrognosisType: null, + plannedDeparturePlatform: '2', + remarks: [], + }, + { + stop: { + type: 'station', + id: '8004305', + name: 'Neumarkt(Oberpf)', + location: { + type: 'location', + id: '8004305', + latitude: 49.273193, + longitude: 11.456986, + }, + }, + arrival: '2025-01-17T17:25:00+01:00', + plannedArrival: '2025-01-17T17:25:00+01:00', + arrivalDelay: null, + arrivalPlatform: '1', + arrivalPrognosisType: null, + plannedArrivalPlatform: '1', + departure: '2025-01-17T17:26:00+01:00', + plannedDeparture: '2025-01-17T17:26:00+01:00', + departureDelay: null, + departurePlatform: '1', + departurePrognosisType: null, + plannedDeparturePlatform: '1', + remarks: [], + }, + { + stop: { + type: 'station', + id: '8000284', + name: 'Nürnberg Hbf', + location: { + type: 'location', + id: '8000284', + latitude: 49.445435, + longitude: 11.08227, + }, + }, + arrival: '2025-01-17T17:49:00+01:00', + plannedArrival: '2025-01-17T17:49:00+01:00', + arrivalDelay: null, + arrivalPlatform: '13', + arrivalPrognosisType: null, + plannedArrivalPlatform: '13', + departure: null, + plannedDeparture: null, + departureDelay: null, + departurePlatform: '13', + departurePrognosisType: null, + plannedDeparturePlatform: '13', + remarks: [], + }, + ], + remarks: [ + { + code: 'ZR', + summary: 'vertraglicher Beförderer DB Regio (München Flughafen Terminal - Regensburg Hbf)', + text: 'vertraglicher Beförderer DB Regio (München Flughafen Terminal - Regensburg Hbf)', + type: 'hint', + }, + { + text: 'Number of bicycles conveyed limited', + type: 'hint', + code: 'bicycle-conveyance', + summary: 'bicycles conveyed', + }, + { + code: 'EA', + summary: 'Behindertengerechte Ausstattung', + text: 'Behindertengerechte Ausstattung', + type: 'hint', + }, + { + text: 'power sockets for laptop', + type: 'hint', + code: 'power-sockets', + summary: 'power sockets available', + }, + { + text: 'air conditioning', + type: 'hint', + code: 'air-conditioned', + summary: 'air-conditioned vehicle', + }, + { + text: 'Wifi available', + type: 'hint', + code: 'wifi', + summary: 'WiFi available', + }, + ], + cancelled: false, + }, + realtimeDataUpdatedAt: null, +}; + +export { + dbTrip, +}; diff --git a/test/fixtures/dbnav-trip.json b/test/fixtures/dbnav-trip.json new file mode 100644 index 00000000..9f3725b1 --- /dev/null +++ b/test/fixtures/dbnav-trip.json @@ -0,0 +1 @@ +{"fahrplan":{"regulaererFahrplan":"daily"},"kurztext":"ag","mitteltext":"ag RE22","langtext":"ag RE22","halte":[{"abgangsDatum":"2025-01-17T15:16:00+01:00","ort":{"name":"München Flughafen Terminal","locationId":"A=1@O=München Flughafen Terminal@X=11785973@Y=48353732@U=81@L=8004168@i=U×008020658@","evaNr":"8004168","position":{"latitude":48.353733,"longitude":11.785973},"stationId":"1822"},"gleis":"1","attributNotizen":[{"text":"As ag 84100 heading towards Nürnberg Hbf from here","key":"text.journeystop.product.or.direction.changes.stop.message","priority":100}],"echtzeitNotizen":[],"himNotizen":[],"auslastungsInfos":[{"klasse":"KLASSE_1","stufe":0,"anzeigeTextKurz":"No occupancy information available"},{"klasse":"KLASSE_2","stufe":0,"anzeigeTextKurz":"No occupancy information available"}]},{"ankunftsDatum":"2025-01-17T15:18:00+01:00","abgangsDatum":"2025-01-17T15:18:00+01:00","ort":{"name":"München Flughafen Besucherpark","locationId":"A=1@O=München Flughafen Besucherpark@X=11764183@Y=48352095@U=81@L=8004167@i=U×008020657@","evaNr":"8004167","position":{"latitude":48.352097,"longitude":11.764174},"stationId":"1823"},"gleis":"1","attributNotizen":[],"echtzeitNotizen":[],"himNotizen":[],"auslastungsInfos":[{"klasse":"KLASSE_1","stufe":0,"anzeigeTextKurz":"No occupancy information available"},{"klasse":"KLASSE_2","stufe":0,"anzeigeTextKurz":"No occupancy information available"}]},{"ankunftsDatum":"2025-01-17T15:28:00+01:00","abgangsDatum":"2025-01-17T15:29:00+01:00","ort":{"name":"Freising","locationId":"A=1@O=Freising@X=11744542@Y=48395199@U=81@L=8002078@i=U×008020487@","evaNr":"8002078","position":{"latitude":48.39498,"longitude":11.744551},"stationId":"1908"},"gleis":"4","attributNotizen":[],"echtzeitNotizen":[],"himNotizen":[],"auslastungsInfos":[{"klasse":"KLASSE_1","stufe":0,"anzeigeTextKurz":"No occupancy information available"},{"klasse":"KLASSE_2","stufe":0,"anzeigeTextKurz":"No occupancy information available"}]},{"ankunftsDatum":"2025-01-17T15:37:00+01:00","abgangsDatum":"2025-01-17T15:38:00+01:00","ort":{"name":"Moosburg","locationId":"A=1@O=Moosburg@X=11930385@Y=48470331@U=81@L=8004084@i=U×008020471@","evaNr":"8004084","position":{"latitude":48.46998,"longitude":11.930492},"stationId":"4172"},"gleis":"1","attributNotizen":[],"echtzeitNotizen":[],"himNotizen":[],"auslastungsInfos":[{"klasse":"KLASSE_1","stufe":0,"anzeigeTextKurz":"No occupancy information available"},{"klasse":"KLASSE_2","stufe":0,"anzeigeTextKurz":"No occupancy information available"}]},{"ankunftsDatum":"2025-01-17T15:50:00+01:00","abgangsDatum":"2025-01-17T15:53:00+01:00","ort":{"name":"Landshut(Bay)Hbf","locationId":"A=1@O=Landshut(Bay)Hbf@X=12135932@Y=48547494@U=81@L=8000217@i=U×008026353@","evaNr":"8000217","position":{"latitude":48.547512,"longitude":12.135878},"stationId":"3513"},"gleis":"5","attributNotizen":[],"echtzeitNotizen":[],"himNotizen":[],"auslastungsInfos":[{"klasse":"KLASSE_1","stufe":0,"anzeigeTextKurz":"No occupancy information available"},{"klasse":"KLASSE_2","stufe":0,"anzeigeTextKurz":"No occupancy information available"}]},{"ankunftsDatum":"2025-01-17T16:05:00+01:00","abgangsDatum":"2025-01-17T16:06:00+01:00","ort":{"name":"Ergoldsbach","locationId":"A=1@O=Ergoldsbach@X=12201877@Y=48693865@U=81@L=8001835@i=U×008026349@","evaNr":"8001835","position":{"latitude":48.69383,"longitude":12.201877},"stationId":"1640"},"gleis":"1","attributNotizen":[],"echtzeitNotizen":[],"himNotizen":[],"auslastungsInfos":[{"klasse":"KLASSE_1","stufe":0,"anzeigeTextKurz":"No occupancy information available"},{"klasse":"KLASSE_2","stufe":0,"anzeigeTextKurz":"No occupancy information available"}]},{"ankunftsDatum":"2025-01-17T16:09:00+01:00","abgangsDatum":"2025-01-17T16:10:00+01:00","ort":{"name":"Neufahrn(Niederbay)","locationId":"A=1@O=Neufahrn(Niederbay)@X=12190460@Y=48729885@U=81@L=8000688@i=U×008026340@","evaNr":"8000688","position":{"latitude":48.729866,"longitude":12.19046},"stationId":"4390"},"gleis":"2","attributNotizen":[],"echtzeitNotizen":[],"himNotizen":[],"auslastungsInfos":[{"klasse":"KLASSE_1","stufe":0,"anzeigeTextKurz":"No occupancy information available"},{"klasse":"KLASSE_2","stufe":0,"anzeigeTextKurz":"No occupancy information available"}]},{"ankunftsDatum":"2025-01-17T16:19:00+01:00","abgangsDatum":"2025-01-17T16:20:00+01:00","ort":{"name":"Eggmühl","locationId":"A=1@O=Eggmühl@X=12182190@Y=48836497@U=81@L=8001679@i=U×008026334@","evaNr":"8001679","position":{"latitude":48.8365,"longitude":12.182217},"stationId":"1478"},"gleis":"3","attributNotizen":[],"echtzeitNotizen":[],"himNotizen":[],"auslastungsInfos":[{"klasse":"KLASSE_1","stufe":0,"anzeigeTextKurz":"No occupancy information available"},{"klasse":"KLASSE_2","stufe":0,"anzeigeTextKurz":"No occupancy information available"}]},{"ankunftsDatum":"2025-01-17T16:25:00+01:00","abgangsDatum":"2025-01-17T16:26:00+01:00","ort":{"name":"Hagelstadt","locationId":"A=1@O=Hagelstadt@X=12214830@Y=48895862@U=81@L=8002506@i=U×008026333@","evaNr":"8002506","position":{"latitude":48.896034,"longitude":12.214812},"stationId":"2455"},"gleis":"2","attributNotizen":[],"echtzeitNotizen":[],"himNotizen":[],"auslastungsInfos":[{"klasse":"KLASSE_1","stufe":0,"anzeigeTextKurz":"No occupancy information available"},{"klasse":"KLASSE_2","stufe":0,"anzeigeTextKurz":"No occupancy information available"}]},{"ankunftsDatum":"2025-01-17T16:29:00+01:00","abgangsDatum":"2025-01-17T16:30:00+01:00","ort":{"name":"Köfering","locationId":"A=1@O=Köfering@X=12208753@Y=48931720@U=81@L=8003357@i=U×008026332@","evaNr":"8003357","position":{"latitude":48.931694,"longitude":12.208736},"stationId":"3308"},"gleis":"2","attributNotizen":[],"echtzeitNotizen":[],"himNotizen":[],"auslastungsInfos":[{"klasse":"KLASSE_1","stufe":0,"anzeigeTextKurz":"No occupancy information available"},{"klasse":"KLASSE_2","stufe":0,"anzeigeTextKurz":"No occupancy information available"}]},{"ankunftsDatum":"2025-01-17T16:33:00+01:00","abgangsDatum":"2025-01-17T16:34:00+01:00","ort":{"name":"Obertraubling","locationId":"A=1@O=Obertraubling@X=12169992@Y=48967533@U=81@L=8004592@i=U×008026331@","evaNr":"8004592","position":{"latitude":48.967514,"longitude":12.169974},"stationId":"4699"},"gleis":"2","attributNotizen":[],"echtzeitNotizen":[],"himNotizen":[],"auslastungsInfos":[{"klasse":"KLASSE_1","stufe":0,"anzeigeTextKurz":"No occupancy information available"},{"klasse":"KLASSE_2","stufe":0,"anzeigeTextKurz":"No occupancy information available"}]},{"ankunftsDatum":"2025-01-17T16:41:00+01:00","abgangsDatum":"2025-01-17T16:45:00+01:00","ort":{"name":"Regensburg Hbf","locationId":"A=1@O=Regensburg Hbf@X=12099615@Y=49011670@U=81@L=8000309@i=U×008026294@","evaNr":"8000309","position":{"latitude":49.01175,"longitude":12.099669},"stationId":"5169"},"gleis":"5","attributNotizen":[{"text":"As ag 63070 heading towards Nürnberg Hbf from here","key":"text.journeystop.product.or.direction.changes.stop.message","priority":100}],"echtzeitNotizen":[],"himNotizen":[],"auslastungsInfos":[{"klasse":"KLASSE_1","stufe":0,"anzeigeTextKurz":"No occupancy information available"},{"klasse":"KLASSE_2","stufe":0,"anzeigeTextKurz":"No occupancy information available"}]},{"ankunftsDatum":"2025-01-17T17:02:00+01:00","abgangsDatum":"2025-01-17T17:02:00+01:00","ort":{"name":"Beratzhausen","locationId":"A=1@O=Beratzhausen@X=11807853@Y=49092843@U=81@L=8000882@i=U×008026302@","evaNr":"8000882","position":{"latitude":49.09251,"longitude":11.808527},"stationId":"0491"},"gleis":"2","attributNotizen":[],"echtzeitNotizen":[],"himNotizen":[],"auslastungsInfos":[{"klasse":"KLASSE_1","stufe":0,"anzeigeTextKurz":"No occupancy information available"},{"klasse":"KLASSE_2","stufe":0,"anzeigeTextKurz":"No occupancy information available"}]},{"ankunftsDatum":"2025-01-17T17:08:00+01:00","abgangsDatum":"2025-01-17T17:09:00+01:00","ort":{"name":"Parsberg","locationId":"A=1@O=Parsberg@X=11723354@Y=49164352@U=81@L=8004755@i=U×008026304@","evaNr":"8004755","position":{"latitude":49.16416,"longitude":11.724136},"stationId":"4868"},"gleis":"2","attributNotizen":[],"echtzeitNotizen":[],"himNotizen":[],"auslastungsInfos":[{"klasse":"KLASSE_1","stufe":0,"anzeigeTextKurz":"No occupancy information available"},{"klasse":"KLASSE_2","stufe":0,"anzeigeTextKurz":"No occupancy information available"}]},{"ankunftsDatum":"2025-01-17T17:25:00+01:00","abgangsDatum":"2025-01-17T17:26:00+01:00","ort":{"name":"Neumarkt(Oberpf)","locationId":"A=1@O=Neumarkt(Oberpf)@X=11456986@Y=49273220@U=81@L=8004305@i=U×008022353@","evaNr":"8004305","position":{"latitude":49.273193,"longitude":11.456986},"stationId":"4416"},"gleis":"1","attributNotizen":[],"echtzeitNotizen":[],"himNotizen":[],"auslastungsInfos":[{"klasse":"KLASSE_1","stufe":0,"anzeigeTextKurz":"No occupancy information available"},{"klasse":"KLASSE_2","stufe":0,"anzeigeTextKurz":"No occupancy information available"}]},{"ankunftsDatum":"2025-01-17T17:49:00+01:00","ort":{"name":"Nürnberg Hbf","locationId":"A=1@O=Nürnberg Hbf@X=11082989@Y=49445615@U=81@L=8000284@i=U×008022193@","evaNr":"8000284","position":{"latitude":49.445435,"longitude":11.08227},"stationId":"4593"},"gleis":"13","attributNotizen":[],"echtzeitNotizen":[],"himNotizen":[],"auslastungsInfos":[{"klasse":"KLASSE_1","stufe":0,"anzeigeTextKurz":"No occupancy information available"},{"klasse":"KLASSE_2","stufe":0,"anzeigeTextKurz":"No occupancy information available"}]}],"himNotizen":[],"echtzeitNotizen":[],"attributNotizen":[{"text":"vertraglicher Beförderer DB Regio (München Flughafen Terminal - Regensburg Hbf)","key":"ZR","priority":150},{"text":"Number of bicycles conveyed limited","key":"FB","priority":260},{"text":"Behindertengerechte Ausstattung","key":"EA","priority":560},{"text":"power sockets for laptop","key":"LS","priority":605},{"text":"air conditioning","key":"KL","priority":610},{"text":"Wifi available","key":"WV","priority":710},{"text":"agilis","key":"OP"}],"verkehrsmittelNummer":"84100","richtung":"Nürnberg Hbf","produktGattung":"RB","reisetag":"2025-01-17","polylineGroup":{"polylineDesc":[{"coordinates":[{"longitude":11.760255,"latitude":48.35179},{"longitude":11.764183,"latitude":48.352095},{"longitude":11.764183,"latitude":48.352095},{"longitude":11.760255,"latitude":48.35179},{"longitude":11.760255,"latitude":48.35179},{"longitude":11.758376,"latitude":48.351646},{"longitude":11.758421,"latitude":48.351421},{"longitude":11.758421,"latitude":48.351421},{"longitude":11.755616,"latitude":48.351313},{"longitude":11.748775,"latitude":48.350783},{"longitude":11.744919,"latitude":48.350603},{"longitude":11.744919,"latitude":48.350603},{"longitude":11.744919,"latitude":48.350603},{"longitude":11.742645,"latitude":48.350432},{"longitude":11.738474,"latitude":48.350154},{"longitude":11.731732,"latitude":48.350082},{"longitude":11.729089,"latitude":48.349731},{"longitude":11.727201,"latitude":48.349246},{"longitude":11.725439,"latitude":48.348581},{"longitude":11.722078,"latitude":48.34708},{"longitude":11.718886,"latitude":48.345425},{"longitude":11.7161,"latitude":48.343466},{"longitude":11.712099,"latitude":48.339852},{"longitude":11.710796,"latitude":48.338818},{"longitude":11.707875,"latitude":48.336958},{"longitude":11.705142,"latitude":48.335636},{"longitude":11.701627,"latitude":48.334315},{"longitude":11.699757,"latitude":48.333784},{"longitude":11.698472,"latitude":48.333524},{"longitude":11.695173,"latitude":48.333065},{"longitude":11.692503,"latitude":48.332805},{"longitude":11.689815,"latitude":48.332634},{"longitude":11.686705,"latitude":48.332562},{"longitude":11.680619,"latitude":48.332526},{"longitude":11.67901,"latitude":48.332445},{"longitude":11.676907,"latitude":48.33213},{"longitude":11.674938,"latitude":48.331546},{"longitude":11.673203,"latitude":48.330746},{"longitude":11.672115,"latitude":48.330045},{"longitude":11.66674,"latitude":48.325164},{"longitude":11.670533,"latitude":48.328409},{"longitude":11.674174,"latitude":48.332193},{"longitude":11.686642,"latitude":48.344005},{"longitude":11.70711,"latitude":48.363341},{"longitude":11.70711,"latitude":48.363341},{"longitude":11.726293,"latitude":48.381427},{"longitude":11.740604,"latitude":48.392205},{"longitude":11.744551,"latitude":48.394983},{"longitude":11.744551,"latitude":48.394983},{"longitude":11.749522,"latitude":48.398956},{"longitude":11.753594,"latitude":48.40195},{"longitude":11.756156,"latitude":48.403415},{"longitude":11.759607,"latitude":48.404817},{"longitude":11.761459,"latitude":48.405366},{"longitude":11.763374,"latitude":48.405797},{"longitude":11.773837,"latitude":48.407604},{"longitude":11.777181,"latitude":48.407883},{"longitude":11.784615,"latitude":48.407972},{"longitude":11.784615,"latitude":48.407972},{"longitude":11.791366,"latitude":48.408053},{"longitude":11.794036,"latitude":48.408269},{"longitude":11.795969,"latitude":48.408674},{"longitude":11.797191,"latitude":48.409069},{"longitude":11.800742,"latitude":48.410705},{"longitude":11.800742,"latitude":48.410705},{"longitude":11.846767,"latitude":48.43325},{"longitude":11.848798,"latitude":48.434428},{"longitude":11.850884,"latitude":48.436082},{"longitude":11.852907,"latitude":48.438086},{"longitude":11.852907,"latitude":48.438086},{"longitude":11.856952,"latitude":48.44214},{"longitude":11.858705,"latitude":48.443507},{"longitude":11.860206,"latitude":48.444415},{"longitude":11.861293,"latitude":48.444945},{"longitude":11.863037,"latitude":48.445637},{"longitude":11.86488,"latitude":48.446195},{"longitude":11.866804,"latitude":48.446617},{"longitude":11.86879,"latitude":48.446878},{"longitude":11.895587,"latitude":48.449269},{"longitude":11.8969,"latitude":48.449476},{"longitude":11.898158,"latitude":48.449808},{"longitude":11.902958,"latitude":48.451462},{"longitude":11.905107,"latitude":48.452559},{"longitude":11.917467,"latitude":48.459544},{"longitude":11.919445,"latitude":48.460766},{"longitude":11.927382,"latitude":48.466294},{"longitude":11.928704,"latitude":48.467319},{"longitude":11.929719,"latitude":48.468488},{"longitude":11.930492,"latitude":48.46998},{"longitude":11.930492,"latitude":48.46998},{"longitude":11.935481,"latitude":48.482817},{"longitude":11.936425,"latitude":48.484974},{"longitude":11.938394,"latitude":48.487833},{"longitude":11.942412,"latitude":48.493028},{"longitude":11.94385,"latitude":48.494557},{"longitude":11.945603,"latitude":48.495923},{"longitude":11.948192,"latitude":48.497361},{"longitude":11.954251,"latitude":48.499941},{"longitude":11.965191,"latitude":48.505964},{"longitude":11.967429,"latitude":48.50698},{"longitude":11.997965,"latitude":48.516014},{"longitude":11.997965,"latitude":48.516014},{"longitude":12.016888,"latitude":48.521605},{"longitude":12.033931,"latitude":48.526235},{"longitude":12.033931,"latitude":48.526235},{"longitude":12.106807,"latitude":48.545876},{"longitude":12.108551,"latitude":48.546128},{"longitude":12.110645,"latitude":48.546191},{"longitude":12.119311,"latitude":48.545489},{"longitude":12.120659,"latitude":48.545444},{"longitude":12.128084,"latitude":48.54584},{"longitude":12.129433,"latitude":48.545939},{"longitude":12.130736,"latitude":48.546164},{"longitude":12.135869,"latitude":48.54753},{"longitude":12.135869,"latitude":48.54753},{"longitude":12.139411,"latitude":48.548537},{"longitude":12.140669,"latitude":48.549022},{"longitude":12.142188,"latitude":48.549903},{"longitude":12.143015,"latitude":48.550622},{"longitude":12.143645,"latitude":48.551413},{"longitude":12.144076,"latitude":48.552267},{"longitude":12.144283,"latitude":48.553193},{"longitude":12.144571,"latitude":48.557643},{"longitude":12.145317,"latitude":48.559369},{"longitude":12.158027,"latitude":48.575756},{"longitude":12.171116,"latitude":48.599389},{"longitude":12.177192,"latitude":48.606922},{"longitude":12.17837,"latitude":48.608018},{"longitude":12.183197,"latitude":48.611794},{"longitude":12.184132,"latitude":48.61298},{"longitude":12.184375,"latitude":48.614311},{"longitude":12.184141,"latitude":48.615201},{"longitude":12.183611,"latitude":48.616028},{"longitude":12.177354,"latitude":48.621331},{"longitude":12.170846,"latitude":48.627642},{"longitude":12.170199,"latitude":48.628433},{"longitude":12.169758,"latitude":48.629287},{"longitude":12.169561,"latitude":48.630177},{"longitude":12.169623,"latitude":48.631255},{"longitude":12.169848,"latitude":48.631948},{"longitude":12.170325,"latitude":48.632793},{"longitude":12.172797,"latitude":48.635471},{"longitude":12.173327,"latitude":48.636775},{"longitude":12.173354,"latitude":48.638114},{"longitude":12.172284,"latitude":48.64118},{"longitude":12.172275,"latitude":48.642079},{"longitude":12.172689,"latitude":48.643391},{"longitude":12.1733,"latitude":48.644272},{"longitude":12.174469,"latitude":48.645288},{"longitude":12.178082,"latitude":48.647319},{"longitude":12.179521,"latitude":48.648272},{"longitude":12.180554,"latitude":48.649432},{"longitude":12.181103,"latitude":48.650726},{"longitude":12.181139,"latitude":48.652075},{"longitude":12.180878,"latitude":48.652955},{"longitude":12.177318,"latitude":48.660713},{"longitude":12.176878,"latitude":48.662035},{"longitude":12.176815,"latitude":48.663823},{"longitude":12.177022,"latitude":48.664713},{"longitude":12.177453,"latitude":48.665738},{"longitude":12.178505,"latitude":48.667212},{"longitude":12.180968,"latitude":48.6699},{"longitude":12.182244,"latitude":48.670952},{"longitude":12.183269,"latitude":48.671545},{"longitude":12.185624,"latitude":48.672426},{"longitude":12.198659,"latitude":48.676247},{"longitude":12.1998,"latitude":48.676732},{"longitude":12.200825,"latitude":48.677325},{"longitude":12.201724,"latitude":48.677999},{"longitude":12.20247,"latitude":48.678746},{"longitude":12.203054,"latitude":48.679555},{"longitude":12.203459,"latitude":48.680417},{"longitude":12.203693,"latitude":48.681298},{"longitude":12.203729,"latitude":48.682197},{"longitude":12.202066,"latitude":48.690665},{"longitude":12.201877,"latitude":48.693829},{"longitude":12.201877,"latitude":48.693829},{"longitude":12.201814,"latitude":48.700553},{"longitude":12.201445,"latitude":48.702333},{"longitude":12.200771,"latitude":48.703601},{"longitude":12.200133,"latitude":48.704401},{"longitude":12.197112,"latitude":48.707394},{"longitude":12.19616,"latitude":48.708581},{"longitude":12.192375,"latitude":48.716275},{"longitude":12.191863,"latitude":48.717588},{"longitude":12.191566,"latitude":48.718909},{"longitude":12.191108,"latitude":48.724249},{"longitude":12.19038,"latitude":48.729867},{"longitude":12.19038,"latitude":48.729867},{"longitude":12.190245,"latitude":48.731944},{"longitude":12.190496,"latitude":48.733733},{"longitude":12.19109,"latitude":48.735288},{"longitude":12.192276,"latitude":48.736996},{"longitude":12.196825,"latitude":48.743036},{"longitude":12.198227,"latitude":48.744708},{"longitude":12.199854,"latitude":48.746147},{"longitude":12.204978,"latitude":48.749751},{"longitude":12.206075,"latitude":48.750884},{"longitude":12.20674,"latitude":48.751873},{"longitude":12.207216,"latitude":48.752996},{"longitude":12.207414,"latitude":48.753886},{"longitude":12.208205,"latitude":48.761051},{"longitude":12.208025,"latitude":48.761941},{"longitude":12.207333,"latitude":48.763208},{"longitude":12.206165,"latitude":48.764341},{"longitude":12.205185,"latitude":48.764961},{"longitude":12.204088,"latitude":48.765455},{"longitude":12.2022,"latitude":48.765959},{"longitude":12.196843,"latitude":48.766597},{"longitude":12.194919,"latitude":48.76702},{"longitude":12.193759,"latitude":48.767487},{"longitude":12.192735,"latitude":48.76808},{"longitude":12.191863,"latitude":48.768772},{"longitude":12.191153,"latitude":48.76959},{"longitude":12.19055,"latitude":48.770822},{"longitude":12.18869,"latitude":48.780189},{"longitude":12.18869,"latitude":48.781537},{"longitude":12.188878,"latitude":48.782427},{"longitude":12.19038,"latitude":48.785879},{"longitude":12.190721,"latitude":48.787209},{"longitude":12.190694,"latitude":48.788108},{"longitude":12.190451,"latitude":48.788989},{"longitude":12.190002,"latitude":48.789834},{"longitude":12.189364,"latitude":48.790634},{"longitude":12.188087,"latitude":48.791677},{"longitude":12.186478,"latitude":48.792504},{"longitude":12.184662,"latitude":48.793124},{"longitude":12.175368,"latitude":48.795911},{"longitude":12.173615,"latitude":48.796594},{"longitude":12.172051,"latitude":48.797547},{"longitude":12.170909,"latitude":48.79859},{"longitude":12.170298,"latitude":48.79939},{"longitude":12.169704,"latitude":48.800684},{"longitude":12.16752,"latitude":48.811831},{"longitude":12.167394,"latitude":48.81362},{"longitude":12.167799,"latitude":48.816307},{"longitude":12.170423,"latitude":48.827409},{"longitude":12.170918,"latitude":48.828722},{"longitude":12.171421,"latitude":48.829549},{"longitude":12.172069,"latitude":48.830349},{"longitude":12.173264,"latitude":48.831436},{"longitude":12.175754,"latitude":48.832964},{"longitude":12.182271,"latitude":48.836452},{"longitude":12.182271,"latitude":48.836452},{"longitude":12.189759,"latitude":48.840821},{"longitude":12.190667,"latitude":48.841585},{"longitude":12.19126,"latitude":48.842313},{"longitude":12.191836,"latitude":48.843608},{"longitude":12.191908,"latitude":48.844947},{"longitude":12.191476,"latitude":48.846268},{"longitude":12.190919,"latitude":48.847086},{"longitude":12.187782,"latitude":48.850556},{"longitude":12.187332,"latitude":48.85141},{"longitude":12.187107,"latitude":48.852291},{"longitude":12.186739,"latitude":48.862179},{"longitude":12.187081,"latitude":48.863959},{"longitude":12.188015,"latitude":48.866117},{"longitude":12.189157,"latitude":48.867753},{"longitude":12.196726,"latitude":48.876814},{"longitude":12.197283,"latitude":48.877632},{"longitude":12.199054,"latitude":48.881021},{"longitude":12.200025,"latitude":48.882207},{"longitude":12.201562,"latitude":48.883196},{"longitude":12.202713,"latitude":48.883664},{"longitude":12.203971,"latitude":48.884005},{"longitude":12.209787,"latitude":48.885255},{"longitude":12.211037,"latitude":48.885614},{"longitude":12.212097,"latitude":48.886073},{"longitude":12.213176,"latitude":48.886693},{"longitude":12.214381,"latitude":48.887808},{"longitude":12.214893,"latitude":48.888608},{"longitude":12.215298,"latitude":48.889902},{"longitude":12.215244,"latitude":48.8917},{"longitude":12.214812,"latitude":48.896033},{"longitude":12.214812,"latitude":48.896033},{"longitude":12.214219,"latitude":48.90202},{"longitude":12.2143,"latitude":48.904267},{"longitude":12.214776,"latitude":48.906038},{"longitude":12.218408,"latitude":48.914703},{"longitude":12.218678,"latitude":48.916043},{"longitude":12.218642,"latitude":48.917382},{"longitude":12.218291,"latitude":48.918713},{"longitude":12.217635,"latitude":48.919989},{"longitude":12.208736,"latitude":48.931693},{"longitude":12.208736,"latitude":48.931693},{"longitude":12.203567,"latitude":48.93848},{"longitude":12.202209,"latitude":48.940035},{"longitude":12.18513,"latitude":48.95351},{"longitude":12.173147,"latitude":48.96498},{"longitude":12.169974,"latitude":48.967515},{"longitude":12.169974,"latitude":48.967515},{"longitude":12.169884,"latitude":48.967578},{"longitude":12.165983,"latitude":48.97041},{"longitude":12.164455,"latitude":48.971668},{"longitude":12.15018,"latitude":48.986725},{"longitude":12.15018,"latitude":48.986725},{"longitude":12.15018,"latitude":48.986725},{"longitude":12.146701,"latitude":48.990428},{"longitude":12.146701,"latitude":48.990428},{"longitude":12.141469,"latitude":48.995993},{"longitude":12.13968,"latitude":48.998078},{"longitude":12.134152,"latitude":49.003912},{"longitude":12.13408,"latitude":49.003885},{"longitude":12.134008,"latitude":49.003849},{"longitude":12.131662,"latitude":49.00633},{"longitude":12.129172,"latitude":49.008901},{"longitude":12.128246,"latitude":49.009683},{"longitude":12.126664,"latitude":49.010555},{"longitude":12.125388,"latitude":49.011014},{"longitude":12.124372,"latitude":49.011265},{"longitude":12.122349,"latitude":49.011499},{"longitude":12.118906,"latitude":49.011499},{"longitude":12.114547,"latitude":49.011661},{"longitude":12.103921,"latitude":49.011643},{"longitude":12.099678,"latitude":49.011598},{"longitude":12.099678,"latitude":49.011598},{"longitude":12.094887,"latitude":49.011553},{"longitude":12.092253,"latitude":49.011436},{"longitude":12.080549,"latitude":49.011265},{"longitude":12.059901,"latitude":49.011976},{"longitude":12.05991,"latitude":49.011976},{"longitude":12.059901,"latitude":49.011976},{"longitude":12.057007,"latitude":49.012075},{"longitude":12.054624,"latitude":49.012254},{"longitude":12.049393,"latitude":49.012434},{"longitude":12.049339,"latitude":49.01176},{"longitude":12.043586,"latitude":49.011041},{"longitude":12.040125,"latitude":49.011095},{"longitude":12.038381,"latitude":49.01123},{"longitude":12.036367,"latitude":49.011481},{"longitude":12.034426,"latitude":49.011913},{"longitude":12.02825,"latitude":49.013836},{"longitude":12.026722,"latitude":49.014187},{"longitude":12.025625,"latitude":49.014304},{"longitude":12.024259,"latitude":49.014295},{"longitude":12.020897,"latitude":49.013917},{"longitude":12.018847,"latitude":49.013935},{"longitude":12.014856,"latitude":49.014538},{"longitude":12.009759,"latitude":49.015832},{"longitude":12.007305,"latitude":49.016632},{"longitude":12.003476,"latitude":49.018511},{"longitude":12.000572,"latitude":49.019688},{"longitude":11.995556,"latitude":49.021118},{"longitude":11.990666,"latitude":49.022727},{"longitude":11.988904,"latitude":49.02341},{"longitude":11.98788,"latitude":49.024012},{"longitude":11.987035,"latitude":49.024713},{"longitude":11.984913,"latitude":49.027536},{"longitude":11.983682,"latitude":49.028606},{"longitude":11.982648,"latitude":49.02919},{"longitude":11.981749,"latitude":49.029568},{"longitude":11.979627,"latitude":49.030242},{"longitude":11.978315,"latitude":49.030547},{"longitude":11.978315,"latitude":49.030547},{"longitude":11.975681,"latitude":49.03097},{"longitude":11.973659,"latitude":49.031195},{"longitude":11.971618,"latitude":49.031213},{"longitude":11.970261,"latitude":49.031087},{"longitude":11.95977,"latitude":49.029037},{"longitude":11.948992,"latitude":49.026179},{"longitude":11.947024,"latitude":49.02581},{"longitude":11.945666,"latitude":49.025738},{"longitude":11.944309,"latitude":49.025828},{"longitude":11.942835,"latitude":49.026125},{"longitude":11.939095,"latitude":49.027122},{"longitude":11.939095,"latitude":49.027122},{"longitude":11.936677,"latitude":49.027788},{"longitude":11.935517,"latitude":49.028264},{"longitude":11.91913,"latitude":49.037802},{"longitude":11.91726,"latitude":49.039114},{"longitude":11.914914,"latitude":49.041631},{"longitude":11.914914,"latitude":49.041631},{"longitude":11.913098,"latitude":49.043761},{"longitude":11.912649,"latitude":49.044606},{"longitude":11.912415,"latitude":49.045487},{"longitude":11.912424,"latitude":49.046386},{"longitude":11.912649,"latitude":49.047276},{"longitude":11.913943,"latitude":49.050243},{"longitude":11.91406,"latitude":49.051196},{"longitude":11.913943,"latitude":49.052085},{"longitude":11.913341,"latitude":49.053371},{"longitude":11.9113,"latitude":49.055708},{"longitude":11.910491,"latitude":49.056949},{"longitude":11.910177,"latitude":49.057821},{"longitude":11.909628,"latitude":49.060949},{"longitude":11.909206,"latitude":49.061803},{"longitude":11.908172,"latitude":49.062962},{"longitude":11.907246,"latitude":49.063628},{"longitude":11.906177,"latitude":49.064185},{"longitude":11.902176,"latitude":49.06592},{"longitude":11.899686,"latitude":49.066792},{"longitude":11.895408,"latitude":49.067978},{"longitude":11.891425,"latitude":49.068751},{"longitude":11.887812,"latitude":49.069785},{"longitude":11.886418,"latitude":49.069983},{"longitude":11.88436,"latitude":49.07001},{"longitude":11.88436,"latitude":49.07001},{"longitude":11.881528,"latitude":49.070001},{"longitude":11.880171,"latitude":49.070127},{"longitude":11.878876,"latitude":49.070423},{"longitude":11.877132,"latitude":49.071116},{"longitude":11.873348,"latitude":49.073048},{"longitude":11.871271,"latitude":49.074217},{"longitude":11.859559,"latitude":49.082415},{"longitude":11.857976,"latitude":49.083269},{"longitude":11.856763,"latitude":49.083683},{"longitude":11.855459,"latitude":49.083952},{"longitude":11.854102,"latitude":49.084069},{"longitude":11.852736,"latitude":49.084033},{"longitude":11.851405,"latitude":49.083844},{"longitude":11.849536,"latitude":49.083287},{"longitude":11.844394,"latitude":49.081058},{"longitude":11.842542,"latitude":49.080482},{"longitude":11.841212,"latitude":49.080276},{"longitude":11.839845,"latitude":49.080222},{"longitude":11.837823,"latitude":49.080437},{"longitude":11.835953,"latitude":49.080977},{"longitude":11.830892,"latitude":49.083287},{"longitude":11.829103,"latitude":49.083943},{"longitude":11.827143,"latitude":49.08433},{"longitude":11.821687,"latitude":49.084734},{"longitude":11.820366,"latitude":49.084968},{"longitude":11.819125,"latitude":49.085346},{"longitude":11.818001,"latitude":49.085858},{"longitude":11.817004,"latitude":49.086469},{"longitude":11.808527,"latitude":49.09251},{"longitude":11.808527,"latitude":49.09251},{"longitude":11.806405,"latitude":49.093436},{"longitude":11.803259,"latitude":49.094326},{"longitude":11.80209,"latitude":49.094784},{"longitude":11.795115,"latitude":49.098416},{"longitude":11.793578,"latitude":49.099405},{"longitude":11.791924,"latitude":49.100753},{"longitude":11.784795,"latitude":49.1079},{"longitude":11.783168,"latitude":49.109347},{"longitude":11.766574,"latitude":49.121293},{"longitude":11.766574,"latitude":49.121293},{"longitude":11.764228,"latitude":49.122956},{"longitude":11.762691,"latitude":49.123855},{"longitude":11.749126,"latitude":49.130714},{"longitude":11.74767,"latitude":49.131667},{"longitude":11.746034,"latitude":49.133105},{"longitude":11.745054,"latitude":49.134292},{"longitude":11.744308,"latitude":49.135541},{"longitude":11.742735,"latitude":49.139919},{"longitude":11.742007,"latitude":49.141178},{"longitude":11.74135,"latitude":49.141969},{"longitude":11.735274,"latitude":49.147955},{"longitude":11.734285,"latitude":49.149133},{"longitude":11.733485,"latitude":49.150374},{"longitude":11.732604,"latitude":49.152549},{"longitude":11.731363,"latitude":49.159102},{"longitude":11.731067,"latitude":49.160109},{"longitude":11.730599,"latitude":49.160954},{"longitude":11.729512,"latitude":49.162086},{"longitude":11.72801,"latitude":49.163012},{"longitude":11.726213,"latitude":49.16366},{"longitude":11.724136,"latitude":49.164163},{"longitude":11.724136,"latitude":49.164163},{"longitude":11.719731,"latitude":49.165107},{"longitude":11.717709,"latitude":49.165341},{"longitude":11.71565,"latitude":49.165413},{"longitude":11.712926,"latitude":49.165269},{"longitude":11.706203,"latitude":49.164379},{"longitude":11.696638,"latitude":49.163884},{"longitude":11.693896,"latitude":49.163839},{"longitude":11.688431,"latitude":49.164136},{"longitude":11.685698,"latitude":49.164091},{"longitude":11.68301,"latitude":49.163741},{"longitude":11.681069,"latitude":49.163282},{"longitude":11.673743,"latitude":49.160846},{"longitude":11.672115,"latitude":49.160576},{"longitude":11.670372,"latitude":49.16054},{"longitude":11.668358,"latitude":49.160801},{"longitude":11.666506,"latitude":49.161385},{"longitude":11.665418,"latitude":49.161934},{"longitude":11.6614,"latitude":49.16437},{"longitude":11.660214,"latitude":49.164828},{"longitude":11.658937,"latitude":49.165152},{"longitude":11.657598,"latitude":49.165323},{"longitude":11.656223,"latitude":49.165359},{"longitude":11.654874,"latitude":49.165242},{"longitude":11.650919,"latitude":49.164496},{"longitude":11.649553,"latitude":49.164415},{"longitude":11.648186,"latitude":49.164487},{"longitude":11.632122,"latitude":49.166824},{"longitude":11.629372,"latitude":49.167318},{"longitude":11.628131,"latitude":49.167642},{"longitude":11.628131,"latitude":49.167642},{"longitude":11.62636,"latitude":49.168217},{"longitude":11.625219,"latitude":49.168712},{"longitude":11.623637,"latitude":49.169583},{"longitude":11.621704,"latitude":49.170851},{"longitude":11.620167,"latitude":49.172343},{"longitude":11.611987,"latitude":49.18118},{"longitude":11.610764,"latitude":49.182267},{"longitude":11.609838,"latitude":49.182923},{"longitude":11.608831,"latitude":49.183535},{"longitude":11.607177,"latitude":49.184344},{"longitude":11.599761,"latitude":49.187032},{"longitude":11.597694,"latitude":49.187948},{"longitude":11.596139,"latitude":49.188829},{"longitude":11.594736,"latitude":49.189809},{"longitude":11.592696,"latitude":49.191706},{"longitude":11.592696,"latitude":49.191706},{"longitude":11.589621,"latitude":49.195643},{"longitude":11.588471,"latitude":49.196758},{"longitude":11.587482,"latitude":49.197378},{"longitude":11.586349,"latitude":49.197891},{"longitude":11.584453,"latitude":49.198403},{"longitude":11.582421,"latitude":49.198592},{"longitude":11.581055,"latitude":49.198529},{"longitude":11.579724,"latitude":49.198313},{"longitude":11.575203,"latitude":49.197243},{"longitude":11.573872,"latitude":49.197055},{"longitude":11.565674,"latitude":49.196533},{"longitude":11.563616,"latitude":49.196542},{"longitude":11.562267,"latitude":49.196695},{"longitude":11.560299,"latitude":49.197082},{"longitude":11.551148,"latitude":49.199032},{"longitude":11.549808,"latitude":49.19923},{"longitude":11.545709,"latitude":49.199491},{"longitude":11.54437,"latitude":49.199679},{"longitude":11.542509,"latitude":49.200237},{"longitude":11.53921,"latitude":49.201855},{"longitude":11.538005,"latitude":49.202277},{"longitude":11.525618,"latitude":49.204938},{"longitude":11.523578,"latitude":49.2051},{"longitude":11.52222,"latitude":49.20501},{"longitude":11.515604,"latitude":49.203994},{"longitude":11.515604,"latitude":49.203994},{"longitude":11.512152,"latitude":49.203653},{"longitude":11.509411,"latitude":49.203707},{"longitude":11.507379,"latitude":49.203913},{"longitude":11.506049,"latitude":49.204147},{"longitude":11.504754,"latitude":49.204435},{"longitude":11.502894,"latitude":49.204992},{"longitude":11.502894,"latitude":49.204992},{"longitude":11.496934,"latitude":49.20723},{"longitude":11.494947,"latitude":49.207572},{"longitude":11.490165,"latitude":49.207869},{"longitude":11.487459,"latitude":49.208147},{"longitude":11.485571,"latitude":49.208669},{"longitude":11.483935,"latitude":49.209487},{"longitude":11.482659,"latitude":49.210547},{"longitude":11.482057,"latitude":49.211356},{"longitude":11.481553,"latitude":49.21266},{"longitude":11.48105,"latitude":49.21533},{"longitude":11.480214,"latitude":49.216714},{"longitude":11.479576,"latitude":49.217343},{"longitude":11.478641,"latitude":49.217999},{"longitude":11.477562,"latitude":49.218557},{"longitude":11.474685,"latitude":49.219779},{"longitude":11.473661,"latitude":49.220373},{"longitude":11.472789,"latitude":49.221074},{"longitude":11.471863,"latitude":49.222269},{"longitude":11.470946,"latitude":49.224894},{"longitude":11.470487,"latitude":49.225739},{"longitude":11.469804,"latitude":49.226521},{"longitude":11.468222,"latitude":49.227986},{"longitude":11.467584,"latitude":49.228786},{"longitude":11.466209,"latitude":49.231798},{"longitude":11.463862,"latitude":49.235043},{"longitude":11.46353,"latitude":49.235915},{"longitude":11.46344,"latitude":49.236814},{"longitude":11.463746,"latitude":49.238144},{"longitude":11.464564,"latitude":49.239376},{"longitude":11.468366,"latitude":49.242567},{"longitude":11.469481,"latitude":49.243691},{"longitude":11.470236,"latitude":49.244949},{"longitude":11.470586,"latitude":49.24627},{"longitude":11.470595,"latitude":49.247169},{"longitude":11.470424,"latitude":49.248068},{"longitude":11.466218,"latitude":49.264761},{"longitude":11.465435,"latitude":49.266218},{"longitude":11.464303,"latitude":49.267512},{"longitude":11.456878,"latitude":49.27313},{"longitude":11.456878,"latitude":49.27313},{"longitude":11.454702,"latitude":49.274757},{"longitude":11.452599,"latitude":49.275998},{"longitude":11.449857,"latitude":49.276996},{"longitude":11.443897,"latitude":49.278874},{"longitude":11.413685,"latitude":49.288268},{"longitude":11.413685,"latitude":49.288268},{"longitude":11.391256,"latitude":49.295226},{"longitude":11.389306,"latitude":49.295666},{"longitude":11.387948,"latitude":49.295774},{"longitude":11.385899,"latitude":49.295648},{"longitude":11.376047,"latitude":49.293671},{"longitude":11.373368,"latitude":49.293257},{"longitude":11.372002,"latitude":49.293212},{"longitude":11.369961,"latitude":49.293374},{"longitude":11.36864,"latitude":49.293635},{"longitude":11.367399,"latitude":49.294012},{"longitude":11.365709,"latitude":49.294785},{"longitude":11.364298,"latitude":49.295765},{"longitude":11.3609,"latitude":49.299145},{"longitude":11.359668,"latitude":49.300745},{"longitude":11.359264,"latitude":49.301608},{"longitude":11.358949,"latitude":49.302938},{"longitude":11.358877,"latitude":49.308934},{"longitude":11.358877,"latitude":49.308934},{"longitude":11.358698,"latitude":49.310939},{"longitude":11.358455,"latitude":49.31191},{"longitude":11.35805,"latitude":49.312773},{"longitude":11.357313,"latitude":49.313761},{"longitude":11.344207,"latitude":49.325618},{"longitude":11.342499,"latitude":49.32703},{"longitude":11.341474,"latitude":49.327623},{"longitude":11.333375,"latitude":49.331506},{"longitude":11.333375,"latitude":49.331506},{"longitude":11.330894,"latitude":49.332639},{"longitude":11.328988,"latitude":49.333151},{"longitude":11.32764,"latitude":49.333313},{"longitude":11.322831,"latitude":49.333421},{"longitude":11.3215,"latitude":49.333637},{"longitude":11.319657,"latitude":49.334239},{"longitude":11.318588,"latitude":49.334805},{"longitude":11.317563,"latitude":49.335587},{"longitude":11.3143,"latitude":49.33939},{"longitude":11.313131,"latitude":49.340504},{"longitude":11.311145,"latitude":49.341736},{"longitude":11.309437,"latitude":49.342428},{"longitude":11.309437,"latitude":49.342428},{"longitude":11.307468,"latitude":49.342914},{"longitude":11.305427,"latitude":49.343138},{"longitude":11.303369,"latitude":49.343102},{"longitude":11.298632,"latitude":49.342536},{"longitude":11.296582,"latitude":49.342644},{"longitude":11.294631,"latitude":49.343075},{"longitude":11.28557,"latitude":49.346302},{"longitude":11.283835,"latitude":49.347031},{"longitude":11.282424,"latitude":49.34801},{"longitude":11.280339,"latitude":49.350339},{"longitude":11.279044,"latitude":49.351381},{"longitude":11.277974,"latitude":49.351948},{"longitude":11.276779,"latitude":49.352388},{"longitude":11.274397,"latitude":49.352829},{"longitude":11.274397,"latitude":49.352829},{"longitude":11.268689,"latitude":49.353422},{"longitude":11.267358,"latitude":49.353638},{"longitude":11.265902,"latitude":49.354033},{"longitude":11.26432,"latitude":49.354671},{"longitude":11.26236,"latitude":49.355939},{"longitude":11.256095,"latitude":49.361287},{"longitude":11.253847,"latitude":49.362852},{"longitude":11.253847,"latitude":49.362852},{"longitude":11.252607,"latitude":49.363436},{"longitude":11.24724,"latitude":49.365458},{"longitude":11.220443,"latitude":49.376066},{"longitude":11.220443,"latitude":49.376066},{"longitude":11.212317,"latitude":49.379275},{"longitude":11.208308,"latitude":49.380686},{"longitude":11.207121,"latitude":49.3811},{"longitude":11.204245,"latitude":49.381972},{"longitude":11.2042,"latitude":49.3819},{"longitude":11.196892,"latitude":49.384039},{"longitude":11.195103,"latitude":49.384713},{"longitude":11.193476,"latitude":49.385531},{"longitude":11.191723,"latitude":49.386763},{"longitude":11.190527,"latitude":49.387985},{"longitude":11.188792,"latitude":49.390484},{"longitude":11.187031,"latitude":49.393352},{"longitude":11.184307,"latitude":49.398179},{"longitude":11.18321,"latitude":49.400364},{"longitude":11.181763,"latitude":49.402908},{"longitude":11.181763,"latitude":49.402908},{"longitude":11.181655,"latitude":49.403096},{"longitude":11.179147,"latitude":49.407762},{"longitude":11.178032,"latitude":49.409398},{"longitude":11.17583,"latitude":49.411681},{"longitude":11.173906,"latitude":49.413119},{"longitude":11.174005,"latitude":49.413191},{"longitude":11.172073,"latitude":49.414423},{"longitude":11.170688,"latitude":49.415142},{"longitude":11.169654,"latitude":49.41551},{"longitude":11.167506,"latitude":49.416041},{"longitude":11.167488,"latitude":49.415996},{"longitude":11.167569,"latitude":49.416113},{"longitude":11.151352,"latitude":49.421039},{"longitude":11.149006,"latitude":49.421983},{"longitude":11.144539,"latitude":49.424086},{"longitude":11.139873,"latitude":49.426001},{"longitude":11.133131,"latitude":49.429129},{"longitude":11.12976,"latitude":49.43081},{"longitude":11.129832,"latitude":49.430873},{"longitude":11.122902,"latitude":49.434226},{"longitude":11.122902,"latitude":49.434226},{"longitude":11.118497,"latitude":49.436284},{"longitude":11.117391,"latitude":49.436959},{"longitude":11.117391,"latitude":49.436959},{"longitude":11.116609,"latitude":49.437588},{"longitude":11.115908,"latitude":49.438361},{"longitude":11.112375,"latitude":49.443242},{"longitude":11.111251,"latitude":49.444483},{"longitude":11.111144,"latitude":49.444438},{"longitude":11.109786,"latitude":49.445552},{"longitude":11.108222,"latitude":49.446433},{"longitude":11.107054,"latitude":49.44691},{"longitude":11.103871,"latitude":49.447925},{"longitude":11.102649,"latitude":49.448168},{"longitude":11.101282,"latitude":49.448276},{"longitude":11.099907,"latitude":49.448213},{"longitude":11.097678,"latitude":49.447881},{"longitude":11.097678,"latitude":49.447881},{"longitude":11.095215,"latitude":49.447494},{"longitude":11.092491,"latitude":49.447224},{"longitude":11.08965,"latitude":49.446865},{"longitude":11.086064,"latitude":49.446262},{"longitude":11.082297,"latitude":49.445391}],"delta":false}]}} \ No newline at end of file diff --git a/test/parse/line.js b/test/parse/line.js index f95ecfc1..3b4af993 100644 --- a/test/parse/line.js +++ b/test/parse/line.js @@ -12,7 +12,7 @@ const ctx = { profile, }; -tap.test('parses ICE leg correctly', (t) => { +tap.test('parses db ICE leg correctly', (t) => { const input = { journeyId: 'foo', verkehrsmittel: { @@ -53,7 +53,7 @@ tap.test('parses ICE leg correctly', (t) => { }); -tap.test('parses Bus trip correctly', (t) => { +tap.test('parses db Bus trip correctly', (t) => { const input = { reisetag: '2024-12-07', regulaereVerkehrstage: 'not every day', @@ -70,8 +70,8 @@ tap.test('parses Bus trip correctly', (t) => { }; const expected = { type: 'line', - id: '', - fahrtNr: '', + id: 'bus-807', + fahrtNr: '807', name: 'Bus 807', public: true, product: undefined, @@ -84,8 +84,28 @@ tap.test('parses Bus trip correctly', (t) => { t.end(); }); +tap.test('parses db trip correctly', (t) => { + const input = { + reisetag: '2025-01-17', + regulaereVerkehrstage: 'daily', + zugName: 'ag 84100', + }; + const expected = { + type: 'line', + id: 'ag-84100', + name: 'ag 84100', + fahrtNr: '84100', + public: true, + product: undefined, + productName: undefined, + mode: undefined, + operator: null, + }; + t.same(parse(ctx, input), expected); + t.end(); +}); -tap.test('parses Bus leg correctly', (t) => { +tap.test('parses db Bus leg correctly', (t) => { const input = { journeyId: 'foo', verkehrsmittel: { @@ -143,7 +163,7 @@ tap.test('parses ris entry correctly', (t) => { type: 'line', id: 'rb-51-15538', fahrtNr: '15538', - name: 'RB 51 (15538)', + name: 'RB 51', public: true, product: 'nationalExpress', productName: 'RB', @@ -155,8 +175,94 @@ tap.test('parses ris entry correctly', (t) => { t.end(); }); +tap.test('parses dbnav trip with long name correctly', (t) => { + const input = {fahrplan: {regulaererFahrplan: 'daily'}, kurztext: 'ag', mitteltext: 'ag RE22', langtext: 'ag RE22', gleis: '13', himNotizen: [], echtzeitNotizen: [], verkehrsmittelNummer: '84100', richtung: 'Nürnberg Hbf', produktGattung: 'RB', reisetag: '2025-01-17'}; + const expected = { + type: 'line', + id: 'ag-re22', + name: 'ag RE22', + fahrtNr: '84100', + public: true, + productName: 'ag', + product: 'regional', + mode: 'train', + operator: null, + }; + t.same(parse(ctx, input), expected); + t.end(); +}); -tap.test('parses dbnav ruf correctly', (t) => { +tap.test('parses dbnav trip sbahn correctly', (t) => { + const input = {fahrplan: {regulaererFahrplan: 'Mo - Sa', tageOhneFahrt: 'not 18., 21. Apr 2025, 1., 29. May 2025, 9., 19. Jun 2025, 3. Oct 2025, 1. Nov 2025'}, kurztext: 'S', mitteltext: 'S 6', gleis: '4', attributNotizen: [], echtzeitNotizen: [], himNotizen: [], verkehrsmittelNummer: '6', richtung: 'Köln-Worringen', produktGattung: 'SBAHN', reisetag: '2025-01-10'}; + const expected = { + type: 'line', + id: 's-6', + fahrtNr: '6', + name: 'S 6', + public: true, + productName: 'S', + mode: 'train', + product: 'suburban', + operator: null, + }; + t.same(parse(ctx, input), expected); + t.end(); +}); + +tap.test('parses dbnav leg with long name correctly', (t) => { + const input = {administrationId: 'S9____', risZuglaufId: 'ag_84100', risAbfahrtId: '8001679_2025-01-17T16:20:00+01:00', kurztext: 'ag', mitteltext: 'ag RE22', langtext: 'ag RE22 (63070) / ag RE22 (84100)', zuglaufId: 'foo', reservierungsMeldungen: [], nummer: 0, abschnittsDauer: 3900, typ: 'FAHRZEUG', verkehrsmittelNummer: '84100', richtung: 'Nürnberg Hbf', produktGattung: 'RB', wagenreihung: false}; + const expected = { + type: 'line', + id: 'ag-84100', + fahrtNr: '84100', + name: 'ag RE22', + public: true, + productName: 'ag', + mode: 'train', + product: 'regional', + adminCode: 'S9____', + operator: null, + }; + t.same(parse(ctx, input), expected); + t.end(); +}); + +tap.test('parses dbnav leg sbahn correctly', (t) => { + const input = { + administrationId: '8003S_', + risZuglaufId: 'S_31600', + risAbfahrtId: '8003368_2025-01-10T17:21:00+01:00', + kurztext: 'S', + mitteltext: 'S 6', + langtext: 'S 6', + zuglaufId: '2|#VN#1#ST#1736364871#PI#1#ZI#212722#TA#5#DA#100125#1S#8004948#1T#1614#LS#8003373#LT#1746#PU#81#RT#1#CA#s#ZE#6#ZB#S 6#PC#4#FR#8004948#FT#1614#TO#8003373#TT#1746#', + nummer: 4, + typ: 'FAHRZEUG', + abgangsDatum: '2025-01-10T17:21:00+01:00', + ankunftsDatum: '2025-01-10T17:23:00+01:00', + verkehrsmittelNummer: '6', + richtung: 'Köln-Worringen', + produktGattung: 'SBAHN', + wagenreihung: true, + }; + const expected = { + type: 'line', + id: 's-31600', + fahrtNr: '31600', + name: 'S 6', + public: true, + productName: 'S', + mode: 'train', + product: 'suburban', + adminCode: '8003S_', + operator: null, + }; + t.same(parse(ctx, input), expected); + t.end(); +}); + + +tap.test('parses dbnav board ruf correctly', (t) => { const input = {zuglaufId: 'foo', kurztext: 'RUF', mitteltext: 'RUF 9870', produktGattung: 'ANRUFPFLICHTIGEVERKEHRE'}; const expected = { type: 'line',