db-vendo-client/test/parse/remarks.js
2025-01-14 21:07:23 +00:00

295 lines
8.5 KiB
JavaScript

import tap from 'tap';
import {parseRemarks as parse} from '../../parse/remarks.js';
import {parseDateTime} from '../../parse/date-time.js';
const ctx = {
data: {},
opt: {},
profile: {
parseHintByCode: _ => null,
parseDateTime,
timezone: 'Europe/Berlin',
locale: 'de-DE',
},
};
tap.test('parses meldungenAsObject correctly', (t) => {
const input = {meldungenAsObject: [{
code: 'MDA-AK-MSG-1000',
nachrichtKurz: 'Connection is in the past.',
nachrichtLang: 'Selected connection is in the past.',
fahrtRichtungKennzeichen: 'HINFAHRT',
}]};
const expected = [{
code: 'MDA-AK-MSG-1000',
summary: 'Connection is in the past.',
text: 'Selected connection is in the past.',
type: 'hint',
}];
t.same(parse(ctx, input), expected);
t.end();
});
tap.test('parses risNotizen correctly', (t) => {
const input = {risNotizen: [{key: 'FT', value: 'Staff delayed due to earlier journey', routeIdxFrom: 0, routeIdxTo: 12}]};
const expected = [{
code: 'FT',
summary: 'Staff delayed due to earlier journey',
text: 'Staff delayed due to earlier journey',
type: 'warning',
}];
t.same(parse(ctx, input), expected);
t.end();
});
tap.test('parses low Prio him himMeldungen correctly', (t) => {
const input = {himMeldungen: [{
ueberschrift: 'Construction work.',
text: 'Advance notice! In the period from 15.12.24 to 17.01.25, construction work will take place',
prioritaet: 'NIEDRIG',
modDateTime: '2024-12-03T12:52:29',
}]};
const expected = [{
code: undefined,
summary: 'Construction work.',
text: 'Advance notice! In the period from 15.12.24 to 17.01.25, construction work will take place',
type: 'status',
modified: '2024-12-03T12:52:29+01:00',
}];
t.same(parse(ctx, input), expected);
t.end();
});
tap.test('parses high Prio him himMeldungen correctly', (t) => {
const input = {himMeldungen: [{
ueberschrift: 'Disruption.',
text: 'Switch repairs between Frankfurt(Main)Hbf and Mannheim Hbf delays rail transport.',
prioritaet: 'HOCH',
modDateTime: '2024-12-05T19:01:48',
}]};
const expected = [{
code: undefined,
summary: 'Disruption.',
text: 'Switch repairs between Frankfurt(Main)Hbf and Mannheim Hbf delays rail transport.',
type: 'warning',
modified: '2024-12-05T19:01:48+01:00',
}];
t.same(parse(ctx, input), expected);
t.end();
});
tap.test('parses zugattribute correctly', (t) => {
const input = {verkehrsmittel: {zugattribute: [{
kategorie: 'BEFÖRDERER',
key: 'BEF',
value: 'DB Fernverkehr AG',
}, {
kategorie: 'FAHRRADMITNAHME',
key: 'FR',
value: 'Bicycles conveyed - subject to reservation',
teilstreckenHinweis: '(Mainz Hbf - Mannheim Hbf)',
}, {
kategorie: 'INFORMATION',
key: 'CK',
value: 'Komfort Check-in possible (visit bahn.de/kci for more information)',
teilstreckenHinweis: '(Mainz Hbf - Mannheim Hbf)',
}]}};
const expected = [{
// "code": "bicycle-conveyance-reservation",
code: 'FR',
// "summary": "bicycles conveyed, subject to reservation",
summary: 'Bicycles conveyed - subject to reservation',
text: 'Bicycles conveyed - subject to reservation',
type: 'hint',
}, {
// "code": "komfort-checkin",
code: 'CK',
// "summary": "Komfort-Checkin available",
summary: 'Komfort Check-in possible (visit bahn.de/kci for more information)',
text: 'Komfort Check-in possible (visit bahn.de/kci for more information)',
type: 'hint',
}];
t.same(parse(ctx, input), expected);
t.end();
});
tap.test('parses board disruptions correctly', (t) => {
const input = {disruptions: [
{
disruptionID: '9aee61d6-700e-3c19-aaa0-019f5612df4c',
disruptionCommunicationID: null,
displayPriority: 25,
descriptions: {
DE: {
text: 'Eine Reparatur an einem Signal verzögert den Zugverkehr',
textShort: 'Verzögerungen durch Reparatur an einem Signal',
},
},
},
]};
const expected = [{
code: undefined,
summary: 'Verzögerungen durch Reparatur an einem Signal',
text: 'Eine Reparatur an einem Signal verzögert den Zugverkehr',
type: 'warning',
}];
t.same(parse(ctx, input), expected);
t.end();
});
tap.test('parses board messages correctly', (t) => {
const input = {messages: [
{
code: '80',
type: 'QUALITY_VARIATION',
displayPriority: null,
category: null,
text: 'Andere Reihenfolge der Wagen',
textShort: null,
},
]};
const expected = [{
code: 80,
summary: 'Andere Reihenfolge der Wagen',
text: 'Andere Reihenfolge der Wagen',
type: 'status',
}];
t.same(parse(ctx, input), expected);
t.end();
});
tap.test('parses ris attributes correctly', (t) => {
const input = {attributes: [
{
displayPriority: null,
displayPriorityDetail: null,
code: 'CK',
text: 'Komfort Check-in verfügbar - wenn möglich bitte einchecken',
textShort: null,
},
]};
const expected = [{
// "code": "komfort-checkin",
code: 'CK',
// "summary": "Komfort-Checkin available",
summary: 'Komfort Check-in verfügbar - wenn möglich bitte einchecken',
text: 'Komfort Check-in verfügbar - wenn möglich bitte einchecken',
type: 'hint',
}];
t.same(parse(ctx, input), expected);
t.end();
});
tap.test('parses dbnav attributes correctly', (t) => {
const input = {
echtzeitNotizen: [{text: 'Halt entfällt'}],
himNotizen: [{text: 'Coach 27 is closed to passengers today.', prio: 'NORMAL', ueberschrift: 'Information.', letzteAktualisierung: '2024-12-16T08:35:53+00:00'}],
attributNotizen: [{text: 'Komfort Check-in possible (visit bahn.de/kci for more information)', key: 'CK', priority: 200}, {text: 'DB Fernverkehr AG', key: 'OP'}],
};
const expected = [
{
code: undefined,
summary: 'Halt entfällt',
text: 'Halt entfällt',
type: 'warning',
},
{
code: undefined,
summary: 'Information.',
text: 'Coach 27 is closed to passengers today.',
modified: '2024-12-16T09:35:53+01:00',
type: 'status',
},
{
code: 'CK',
summary: 'Komfort Check-in possible (visit bahn.de/kci for more information)',
text: 'Komfort Check-in possible (visit bahn.de/kci for more information)',
type: 'hint',
priority: 200,
},
];
t.same(parse(ctx, input), expected);
t.end();
});
tap.test('parses dbnav ruf attributes correctly', (t) => {
const input = {
attributNotizen: [{text: 'Tel. 0981-9714925, Anmeldung bis 90 Min. vor Abfahrt (Mo-So: 9-15 Uhr)', key: 'cB', priority: 1}],
};
const expected = [
{
code: 'cB',
summary: 'Tel. 0981-9714925, Anmeldung bis 90 Min. vor Abfahrt (Mo-So: 9-15 Uhr)',
text: 'Tel. 0981-9714925, Anmeldung bis 90 Min. vor Abfahrt (Mo-So: 9-15 Uhr)',
type: 'warning',
priority: 1,
},
];
t.same(parse(ctx, input), expected);
t.end();
});
tap.test('parses regio guide trip attributes correctly', (t) => {
const input = {
messages: [
{
code: '51',
text: 'verspätetes Personal aus vorheriger Fahrt',
textShort: 'verspätetes Personal aus vorheriger Fahrt',
},
],
hims: [
{
id: '1',
caption: 'Bahnhof Hanau Hbf beeinträchtigt. Verspätungen und Teilausfälle wahrscheinlich. Grund: Entschärfung einer Fliegerbombe.',
shortText: 'Bahnhof Hanau Hbf beeinträchtigt. Verspätungen und Teilausfälle wahrscheinlich. Grund: Entschärfung einer Fliegerbombe.',
captionHtml: 'Bahnhof Hanau Hbf beeinträchtigt. Verspätungen und Teilausfälle wahrscheinlich. Grund: Entschärfung einer Fliegerbombe.',
shortTextHtml: 'Bahnhof Hanau Hbf beeinträchtigt. Verspätungen und Teilausfälle wahrscheinlich. Grund: Entschärfung einer Fliegerbombe.',
},
{
id: '6',
caption: 'Lüneburg: Aufzug Gl. 2/3 bis April 2025 aufgrund von Neubau außer Betrieb.',
shortText: 'Lüneburg: Aufzug Gl. 2/3 bis April 2025 aufgrund von Neubau außer Betrieb.',
captionHtml: 'Lüneburg: Aufzug Gl. 2/3 bis April 2025 aufgrund von Neubau außer Betrieb.',
shortTextHtml: 'Lüneburg: Aufzug Gl. 2/3 bis April 2025 aufgrund von Neubau außer Betrieb.',
},
],
};
const expected = [
{
code: '1',
summary: 'Bahnhof Hanau Hbf beeinträchtigt. Verspätungen und Teilausfälle wahrscheinlich. Grund: Entschärfung einer Fliegerbombe.',
text: 'Bahnhof Hanau Hbf beeinträchtigt. Verspätungen und Teilausfälle wahrscheinlich. Grund: Entschärfung einer Fliegerbombe.',
type: 'hint',
},
{
code: '6',
summary: 'Lüneburg: Aufzug Gl. 2/3 bis April 2025 aufgrund von Neubau außer Betrieb.',
text: 'Lüneburg: Aufzug Gl. 2/3 bis April 2025 aufgrund von Neubau außer Betrieb.',
type: 'hint',
},
{
code: '51',
summary: 'verspätetes Personal aus vorheriger Fahrt',
text: 'verspätetes Personal aus vorheriger Fahrt',
type: 'hint', // TODO?
},
];
t.same(parse(ctx, input), expected);
t.end();
});