lsa-planer

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

/ tests domain baustellenHinweis.test.ts

3,3 KB Rohdatei
tests/domain/baustellenHinweis.test.ts — 81 Zeilen
1 import { describe, expect, it } from 'vitest';
2 import { loadProject } from '@/domain/model/migrate';
3
4 /*
5 * Befunde 25 und 48, behoben in Fassung 5.10.0.
6 *
7 * Die Uebernahme meldete: "Angaben zur Baustellenampel (Mietkosten,
8 * Bauzeitplan) wurden in die Projektbeschreibung übernommen." Die Beschreibung
9 * entsteht aber ausschliesslich aus `bemerkungen`, `besonderheiten`,
10 * `anordnungsgrund` und `anordnungsnummer`; Mietkosten, Bauzeitplan und
11 * Baustellenzeitraum stehen danach nirgends. Der Bearbeiter hatte schwarz auf
12 * weiss, die Angaben seien da - und trug sie deshalb nicht nach, waehrend die
13 * Altdatei nach dem Speichern in aller Regel nicht mehr im Zugriff ist.
14 *
15 * Dazu kam die Ausloesung: `truthy` kennt nur true/'true'/1, im Altformat steht
16 * unter `baustellenVon` aber ein Datumstext - der Zweig lief ins Leere. Ein
17 * Altprojekt mit blossem Bauzeitplan verlor die Angabe ganz ohne Meldung.
18 */
19 const DATUM = new Date('2026-09-05T08:00:00Z');
20
21 function altprojekt(projektdaten: Record<string, unknown>): Record<string, unknown> {
22 return {
23 metadata: { version: '4.3.3' },
24 projektdaten: { projektBezeichnung: 'Übernahme', ...projektdaten },
25 signalgruppen: [{ id: 'SG-1', nummer: 'K1', typ: 'kfz', richtung: 'geradeaus' }],
26 };
27 }
28
29 function baustellenhinweis(projektdaten: Record<string, unknown>) {
30 const { project, issues } = loadProject(altprojekt(projektdaten), DATUM);
31 return {
32 beschreibung: project.meta.description,
33 hinweis: issues.find((i) => i.path === 'projektdaten'),
34 };
35 }
36
37 /** Die sechs Vorbelegungen, die 4.3.3 in jedes Projekt schreibt. */
38 const MIETKOSTEN_VORBELEGUNG = {
39 lsaGeraet: 150,
40 aufbau: 800,
41 abbau: 600,
42 wartung: 120,
43 transport: 300,
44 beschilderung: 500,
45 };
46
47 describe('Befunde 25 und 48: Baustellenangaben bei der Uebernahme', () => {
48 it('sagt, dass die Angaben nicht übernommen werden, und nennt sie nicht als übernommen', () => {
49 const { beschreibung, hinweis } = baustellenhinweis({
50 mietkosten: MIETKOSTEN_VORBELEGUNG,
51 bauzeitplan: 'Zwei Bauabschnitte',
52 baustellenVon: '2026-03-01',
53 baustellenVerantwortlicher: 'Fa. Muster',
54 bemerkungen: 'Meine Bemerkung',
55 });
56
57 expect(hinweis).toBeDefined();
58 expect(hinweis!.message).toContain('nicht übernommen');
59 expect(hinweis!.message).not.toContain('in die Projektbeschreibung übernommen');
60 // Der Bearbeiter braucht den einen Satz, der ihn handeln laesst.
61 expect(hinweis!.message).toContain('Altdatei');
62
63 // Und die Beschreibung ist genau das, was sie war: die Bemerkung.
64 expect(beschreibung).toBe('Meine Bemerkung');
65 });
66
67 it('meldet auch ein Altprojekt mit blossem Bauzeitplan', () => {
68 const { hinweis } = baustellenhinweis({ bauzeitplan: 'Zwei Bauabschnitte' });
69 expect(hinweis).toBeDefined();
70 });
71
72 it('meldet den Baustellenzeitraum, der im Altformat als Datumstext steht', () => {
73 expect(baustellenhinweis({ baustellenVon: '2026-03-01' }).hinweis).toBeDefined();
74 expect(baustellenhinweis({ baustellenBis: '2026-05-31' }).hinweis).toBeDefined();
75 });
76
77 it('schweigt, wenn das Altprojekt keine Baustellenangaben führt', () => {
78 expect(baustellenhinweis({ bemerkungen: 'Nur eine Bemerkung' }).hinweis).toBeUndefined();
79 expect(baustellenhinweis({ mietkosten: {}, baustellenVon: '' }).hinweis).toBeUndefined();
80 });
81 });