lsa-planer

LSA-Planer Professional – Planungssoftware für Lichtsignalanlagen nach RiLSA 2015 und § 45 StVO. EUPL-1.2.

/ tests ui engstelleFahrzeugart.test.ts

4,1 KB Rohdatei
tests/ui/engstelleFahrzeugart.test.ts — 94 Zeilen
1 import { afterEach, describe, expect, it } from 'vitest';
2 import { RILSA_DEFAULTS } from '@/domain/rilsa/constants';
3 import { engstellenlaengeHinweis, starteAssistent } from '@/ui/assistent';
4
5 /**
6 * Strittiger Befund S3: Feldhinweis "Laenge der Engstelle".
7 *
8 * Der Hinweis wies den Anwender an, fuer Lastzuege "die Fahrzeugart spaeter bei
9 * den Konfliktbeziehungen" zu erhoehen, "der Raeumweg waechst dann um die
10 * Fahrzeuglaenge". Beide Haelften treffen nicht zu:
11 *
12 * - Die Fahrzeugart ist kein Feld der Konfliktbeziehung. `Conflict` fuehrt
13 * keines, und die Beziehungsansicht bietet keines an; gesetzt wird sie in
14 * der Signalgruppentabelle.
15 * - Mit den Regelkennwerten sind Pkw, Lkw, Bus und Lastzug gleich lang
16 * angesetzt (fiktive Fahrzeuglaenge). Der Wechsel der Fahrzeugart aendert
17 * den Raeumweg um 0 m - der zugesagte Zuwachs tritt nicht ein.
18 *
19 * Derselbe Halbsatz ist im Pruefbericht bereits so behoben (Befund 30 zur
20 * Fassung 5.9.0: "laesst den Lastzug-Halbsatz weg, solange kein
21 * Zuschlag hinterlegt ist"). Geprueft wird hier am Dialog, weil der Satz genau
22 * dort gelesen wird.
23 */
24
25 afterEach(() => {
26 document.body.innerHTML = '';
27 });
28
29 /** Oeffnet den Assistenten, waehlt eine Anlagenform und geht einen Schritt weiter. */
30 function schrittZwei(form: string): HTMLElement {
31 void starteAssistent();
32 const dialog = document.querySelector<HTMLElement>('.dialog')!;
33 expect(dialog, 'Der Assistent hat kein Fenster geoeffnet').not.toBeNull();
34
35 const auswahl = dialog.querySelector<HTMLSelectElement>('select')!;
36 auswahl.value = form;
37 auswahl.dispatchEvent(new Event('change'));
38
39 const weiter = [...dialog.querySelectorAll<HTMLButtonElement>('button')].find(
40 (b) => b.textContent?.trim() === 'Weiter',
41 )!;
42 weiter.click();
43 return document.querySelector<HTMLElement>('.dialog')!;
44 }
45
46 /** Der Hinweis unter dem Zahlenfeld mit der genannten Beschriftung. */
47 function feldHinweis(dialog: HTMLElement, beschriftung: string): string {
48 const label = [...dialog.querySelectorAll('label')].find(
49 (l) => l.textContent?.trim() === beschriftung,
50 );
51 expect(label, `Feld "${beschriftung}" fehlt`).toBeDefined();
52 const eingabe = document.getElementById(label!.htmlFor)!;
53 const hinweisId = eingabe.getAttribute('aria-describedby')!;
54 return document.getElementById(hinweisId)?.textContent ?? '';
55 }
56
57 describe('Feldhinweis zur Laenge der Engstelle', () => {
58 it('schickt den Anwender nicht zu den Konfliktbeziehungen', () => {
59 const hinweis = feldHinweis(schrittZwei('einstreifig'), 'Länge der Engstelle');
60 expect(hinweis).not.toBe('');
61 expect(hinweis).not.toContain('Konfliktbeziehungen');
62 });
63
64 it('verspricht keinen Laengenzuwachs, den die Regelkennwerte nicht hergeben', () => {
65 const hinweis = feldHinweis(schrittZwei('einstreifig'), 'Länge der Engstelle');
66 expect(hinweis).not.toContain('Lastzüge');
67 expect(hinweis).not.toContain('wächst');
68 });
69
70 it('erklaert weiterhin, was gemessen wird', () => {
71 const hinweis = feldHinweis(schrittZwei('einstreifig'), 'Länge der Engstelle');
72 expect(hinweis).toContain('Von Haltlinie zu Haltlinie');
73 expect(hinweis).toContain('bevor die Gegenrichtung freigegeben werden darf');
74 });
75
76 it('nennt den Lastzug erst, wo ein laengerer Zuschlag hinterlegt ist', () => {
77 // Regelkennwerte: Pkw und Lastzug sind gleich lang angesetzt - kein Rat.
78 expect(RILSA_DEFAULTS.vehicleLength.lastzug).toBe(RILSA_DEFAULTS.vehicleLength.pkw);
79 expect(engstellenlaengeHinweis(RILSA_DEFAULTS)).not.toContain('Lastzüge');
80
81 // Oertliche Verschaerfung ueber die Vorgabenverwaltung: 18 m statt 6 m. Jetzt
82 // bringt der Wechsel etwas - und der Satz nennt die Signalgruppentabelle.
83 const verschaerft = {
84 ...RILSA_DEFAULTS,
85 vehicleLength: { ...RILSA_DEFAULTS.vehicleLength, lastzug: 18 },
86 };
87 const text = engstellenlaengeHinweis(verschaerft);
88 expect(text).toContain('Lastzüge');
89 expect(text).toContain('Signalgruppentabelle');
90 expect(text).not.toContain('Konfliktbeziehungen');
91 // Der Zuwachs steht mit Zahl da und ist die Differenz, nicht die Laenge.
92 expect(text).toContain('12,0 m');
93 });
94 });