lsa-planer

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

/ tests domain hilfetexteRaeumgeschwindigkeitFahrzeugart.test.ts

3,4 KB Rohdatei
tests/domain/hilfetexteRaeumgeschwindigkeitFahrzeugart.test.ts — 84 Zeilen
1 import { describe, expect, it } from 'vitest';
2 import { computeIntergreen } from '@/domain/rilsa/intergreen';
3 import { RILSA_DEFAULTS, SAFETY_FLOORS } from '@/domain/rilsa/constants';
4 import type { ClearingStream, EnteringStream } from '@/domain/rilsa/types';
5 import { HILFE } from '@/ui/help/texte';
6
7 /**
8 * Zwei Hilfetexte, die mit den Behebungen der Fassung 5.9.0 nachzuziehen
9 * waren: Sie sagten etwas zu, das der Quelltext daneben nicht mehr einhielt
10 * bzw. nicht mehr vollstaendig beschrieb.
11 *
12 * (a) "Raeumgeschwindigkeit", Feld wennFalsch: Der Text sagte zu, das
13 * Programm lasse keine hoehere Raeumgeschwindigkeit als den Regelwert
14 * zu. Seit der Behebung der Befunde 28 und 29 wird ein hoeherer Wert
15 * ANGESETZT und nur als begruendungspflichtige Abweichung gemeldet;
16 * hart begrenzt wird erst an der Obergrenze der Verkehrsart.
17 * (b) "Fahrzeugart", Feld woher: Seit der Behebung von Befund 4 sind an
18 * Kfz- und OePNV-Signalgruppen nur noch Arten mit ausreichendem
19 * Laengenzuschlag waehlbar. Der Text erwaehnte die Einschraenkung
20 * nicht und las sich weiter, als stuende jede Art zur Wahl.
21 */
22
23 function abbiegerRaeumend(extra: Partial<ClearingStream> = {}): ClearingStream {
24 return {
25 mode: 'kfz',
26 movement: 'rechts',
27 clearingDistance: 40,
28 vehicleClass: 'pkw',
29 vZul: 50,
30 ...extra,
31 };
32 }
33
34 const kfzEinfahrend: EnteringStream = {
35 mode: 'kfz',
36 movement: 'geradeaus',
37 enteringDistance: 8,
38 };
39
40 describe('(a) Der Hilfetext zur Raeumgeschwindigkeit gibt das heutige Verhalten wieder', () => {
41 it('setzt eine Handeingabe ueber dem Regelwert an und meldet sie nur', () => {
42 // Der Regelwert des Abbiegers ist 7,0 m/s, die Obergrenze der Verkehrsart
43 // 10,0 m/s. Dazwischen wird der Wert angesetzt - nicht abgelehnt.
44 const ergebnis = computeIntergreen(
45 abbiegerRaeumend({ clearingSpeedOverride: 9 }),
46 kfzEinfahrend,
47 RILSA_DEFAULTS,
48 );
49 expect(ergebnis.clearingSpeed).toBe(9);
50 expect(ergebnis.notes.map((n) => n.code)).toContain('raeumgeschwindigkeit-ueber-regelwert');
51 });
52
53 it('begrenzt erst an der Obergrenze der Verkehrsart hart', () => {
54 const ergebnis = computeIntergreen(
55 abbiegerRaeumend({ clearingSpeedOverride: 12 }),
56 kfzEinfahrend,
57 RILSA_DEFAULTS,
58 );
59 expect(ergebnis.clearingSpeed).toBe(SAFETY_FLOORS.maxClearingSpeedKfz);
60 expect(ergebnis.notes.map((n) => n.code)).toContain('raeumgeschwindigkeit-zu-hoch');
61 });
62
63 it('sagt nicht mehr zu, hoehere Werte als den Regelwert abzuweisen', () => {
64 const text = HILFE.raeumgeschwindigkeit.wennFalsch ?? '';
65 expect(text).not.toContain('keine höhere Räumgeschwindigkeit als den Regelwert zu');
66 expect(text).toContain('Obergrenze');
67 expect(text).toContain('Abweichung');
68 // Die sichere Richtung bleibt zugesagt.
69 expect(text).toContain('niedrigere Werte');
70 });
71 });
72
73 describe('(b) Der Hilfetext zur Fahrzeugart nennt die Schranke an Kfz- und OePNV-Stroemen', () => {
74 it('nennt die Einschraenkung samt Kennzeichnung einer dennoch gesetzten Art', () => {
75 const text = HILFE.fahrzeugart.woher ?? '';
76 expect(text).toContain('ÖPNV-Signalgruppen');
77 expect(text).toContain('unzulässig');
78 });
79
80 it('nimmt die Schranke aus constants.ts statt sie einzuschreiben', () => {
81 const text = HILFE.fahrzeugart.woher ?? '';
82 expect(text).toContain(`mindestens ${SAFETY_FLOORS.minVehicleLengthKfz} m`);
83 });
84 });