import { afterEach, describe, expect, it } from 'vitest'; import { RILSA_DEFAULTS } from '@/domain/rilsa/constants'; import { engstellenlaengeHinweis, starteAssistent } from '@/ui/assistent'; /** * Strittiger Befund S3: Feldhinweis "Laenge der Engstelle". * * Der Hinweis wies den Anwender an, fuer Lastzuege "die Fahrzeugart spaeter bei * den Konfliktbeziehungen" zu erhoehen, "der Raeumweg waechst dann um die * Fahrzeuglaenge". Beide Haelften treffen nicht zu: * * - Die Fahrzeugart ist kein Feld der Konfliktbeziehung. `Conflict` fuehrt * keines, und die Beziehungsansicht bietet keines an; gesetzt wird sie in * der Signalgruppentabelle. * - Mit den Regelkennwerten sind Pkw, Lkw, Bus und Lastzug gleich lang * angesetzt (fiktive Fahrzeuglaenge). Der Wechsel der Fahrzeugart aendert * den Raeumweg um 0 m - der zugesagte Zuwachs tritt nicht ein. * * Derselbe Halbsatz ist im Pruefbericht bereits so behoben (Befund 30 zur * Fassung 5.9.0: "laesst den Lastzug-Halbsatz weg, solange kein * Zuschlag hinterlegt ist"). Geprueft wird hier am Dialog, weil der Satz genau * dort gelesen wird. */ afterEach(() => { document.body.innerHTML = ''; }); /** Oeffnet den Assistenten, waehlt eine Anlagenform und geht einen Schritt weiter. */ function schrittZwei(form: string): HTMLElement { void starteAssistent(); const dialog = document.querySelector('.dialog')!; expect(dialog, 'Der Assistent hat kein Fenster geoeffnet').not.toBeNull(); const auswahl = dialog.querySelector('select')!; auswahl.value = form; auswahl.dispatchEvent(new Event('change')); const weiter = [...dialog.querySelectorAll('button')].find( (b) => b.textContent?.trim() === 'Weiter', )!; weiter.click(); return document.querySelector('.dialog')!; } /** Der Hinweis unter dem Zahlenfeld mit der genannten Beschriftung. */ function feldHinweis(dialog: HTMLElement, beschriftung: string): string { const label = [...dialog.querySelectorAll('label')].find( (l) => l.textContent?.trim() === beschriftung, ); expect(label, `Feld "${beschriftung}" fehlt`).toBeDefined(); const eingabe = document.getElementById(label!.htmlFor)!; const hinweisId = eingabe.getAttribute('aria-describedby')!; return document.getElementById(hinweisId)?.textContent ?? ''; } describe('Feldhinweis zur Laenge der Engstelle', () => { it('schickt den Anwender nicht zu den Konfliktbeziehungen', () => { const hinweis = feldHinweis(schrittZwei('einstreifig'), 'Länge der Engstelle'); expect(hinweis).not.toBe(''); expect(hinweis).not.toContain('Konfliktbeziehungen'); }); it('verspricht keinen Laengenzuwachs, den die Regelkennwerte nicht hergeben', () => { const hinweis = feldHinweis(schrittZwei('einstreifig'), 'Länge der Engstelle'); expect(hinweis).not.toContain('Lastzüge'); expect(hinweis).not.toContain('wächst'); }); it('erklaert weiterhin, was gemessen wird', () => { const hinweis = feldHinweis(schrittZwei('einstreifig'), 'Länge der Engstelle'); expect(hinweis).toContain('Von Haltlinie zu Haltlinie'); expect(hinweis).toContain('bevor die Gegenrichtung freigegeben werden darf'); }); it('nennt den Lastzug erst, wo ein laengerer Zuschlag hinterlegt ist', () => { // Regelkennwerte: Pkw und Lastzug sind gleich lang angesetzt - kein Rat. expect(RILSA_DEFAULTS.vehicleLength.lastzug).toBe(RILSA_DEFAULTS.vehicleLength.pkw); expect(engstellenlaengeHinweis(RILSA_DEFAULTS)).not.toContain('Lastzüge'); // Oertliche Verschaerfung ueber die Vorgabenverwaltung: 18 m statt 6 m. Jetzt // bringt der Wechsel etwas - und der Satz nennt die Signalgruppentabelle. const verschaerft = { ...RILSA_DEFAULTS, vehicleLength: { ...RILSA_DEFAULTS.vehicleLength, lastzug: 18 }, }; const text = engstellenlaengeHinweis(verschaerft); expect(text).toContain('Lastzüge'); expect(text).toContain('Signalgruppentabelle'); expect(text).not.toContain('Konfliktbeziehungen'); // Der Zuwachs steht mit Zahl da und ist die Differenz, nicht die Laenge. expect(text).toContain('12,0 m'); }); });