import { describe, expect, it } from 'vitest'; import { computeIntergreen } from '@/domain/rilsa/intergreen'; import { RILSA_DEFAULTS, SAFETY_FLOORS } from '@/domain/rilsa/constants'; import type { ClearingStream, EnteringStream } from '@/domain/rilsa/types'; import { HILFE } from '@/ui/help/texte'; /** * Zwei Hilfetexte, die mit den Behebungen der Fassung 5.9.0 nachzuziehen * waren: Sie sagten etwas zu, das der Quelltext daneben nicht mehr einhielt * bzw. nicht mehr vollstaendig beschrieb. * * (a) "Raeumgeschwindigkeit", Feld wennFalsch: Der Text sagte zu, das * Programm lasse keine hoehere Raeumgeschwindigkeit als den Regelwert * zu. Seit der Behebung der Befunde 28 und 29 wird ein hoeherer Wert * ANGESETZT und nur als begruendungspflichtige Abweichung gemeldet; * hart begrenzt wird erst an der Obergrenze der Verkehrsart. * (b) "Fahrzeugart", Feld woher: Seit der Behebung von Befund 4 sind an * Kfz- und OePNV-Signalgruppen nur noch Arten mit ausreichendem * Laengenzuschlag waehlbar. Der Text erwaehnte die Einschraenkung * nicht und las sich weiter, als stuende jede Art zur Wahl. */ function abbiegerRaeumend(extra: Partial = {}): ClearingStream { return { mode: 'kfz', movement: 'rechts', clearingDistance: 40, vehicleClass: 'pkw', vZul: 50, ...extra, }; } const kfzEinfahrend: EnteringStream = { mode: 'kfz', movement: 'geradeaus', enteringDistance: 8, }; describe('(a) Der Hilfetext zur Raeumgeschwindigkeit gibt das heutige Verhalten wieder', () => { it('setzt eine Handeingabe ueber dem Regelwert an und meldet sie nur', () => { // Der Regelwert des Abbiegers ist 7,0 m/s, die Obergrenze der Verkehrsart // 10,0 m/s. Dazwischen wird der Wert angesetzt - nicht abgelehnt. const ergebnis = computeIntergreen( abbiegerRaeumend({ clearingSpeedOverride: 9 }), kfzEinfahrend, RILSA_DEFAULTS, ); expect(ergebnis.clearingSpeed).toBe(9); expect(ergebnis.notes.map((n) => n.code)).toContain('raeumgeschwindigkeit-ueber-regelwert'); }); it('begrenzt erst an der Obergrenze der Verkehrsart hart', () => { const ergebnis = computeIntergreen( abbiegerRaeumend({ clearingSpeedOverride: 12 }), kfzEinfahrend, RILSA_DEFAULTS, ); expect(ergebnis.clearingSpeed).toBe(SAFETY_FLOORS.maxClearingSpeedKfz); expect(ergebnis.notes.map((n) => n.code)).toContain('raeumgeschwindigkeit-zu-hoch'); }); it('sagt nicht mehr zu, hoehere Werte als den Regelwert abzuweisen', () => { const text = HILFE.raeumgeschwindigkeit.wennFalsch ?? ''; expect(text).not.toContain('keine höhere Räumgeschwindigkeit als den Regelwert zu'); expect(text).toContain('Obergrenze'); expect(text).toContain('Abweichung'); // Die sichere Richtung bleibt zugesagt. expect(text).toContain('niedrigere Werte'); }); }); describe('(b) Der Hilfetext zur Fahrzeugart nennt die Schranke an Kfz- und OePNV-Stroemen', () => { it('nennt die Einschraenkung samt Kennzeichnung einer dennoch gesetzten Art', () => { const text = HILFE.fahrzeugart.woher ?? ''; expect(text).toContain('ÖPNV-Signalgruppen'); expect(text).toContain('unzulässig'); }); it('nimmt die Schranke aus constants.ts statt sie einzuschreiben', () => { const text = HILFE.fahrzeugart.woher ?? ''; expect(text).toContain(`mindestens ${SAFETY_FLOORS.minVehicleLengthKfz} m`); }); });