import { describe, expect, it } from 'vitest'; import { loadProject } from '@/domain/model/migrate'; /* * Befunde 25 und 48, behoben in Fassung 5.10.0. * * Die Uebernahme meldete: "Angaben zur Baustellenampel (Mietkosten, * Bauzeitplan) wurden in die Projektbeschreibung übernommen." Die Beschreibung * entsteht aber ausschliesslich aus `bemerkungen`, `besonderheiten`, * `anordnungsgrund` und `anordnungsnummer`; Mietkosten, Bauzeitplan und * Baustellenzeitraum stehen danach nirgends. Der Bearbeiter hatte schwarz auf * weiss, die Angaben seien da - und trug sie deshalb nicht nach, waehrend die * Altdatei nach dem Speichern in aller Regel nicht mehr im Zugriff ist. * * Dazu kam die Ausloesung: `truthy` kennt nur true/'true'/1, im Altformat steht * unter `baustellenVon` aber ein Datumstext - der Zweig lief ins Leere. Ein * Altprojekt mit blossem Bauzeitplan verlor die Angabe ganz ohne Meldung. */ const DATUM = new Date('2026-09-05T08:00:00Z'); function altprojekt(projektdaten: Record): Record { return { metadata: { version: '4.3.3' }, projektdaten: { projektBezeichnung: 'Übernahme', ...projektdaten }, signalgruppen: [{ id: 'SG-1', nummer: 'K1', typ: 'kfz', richtung: 'geradeaus' }], }; } function baustellenhinweis(projektdaten: Record) { const { project, issues } = loadProject(altprojekt(projektdaten), DATUM); return { beschreibung: project.meta.description, hinweis: issues.find((i) => i.path === 'projektdaten'), }; } /** Die sechs Vorbelegungen, die 4.3.3 in jedes Projekt schreibt. */ const MIETKOSTEN_VORBELEGUNG = { lsaGeraet: 150, aufbau: 800, abbau: 600, wartung: 120, transport: 300, beschilderung: 500, }; describe('Befunde 25 und 48: Baustellenangaben bei der Uebernahme', () => { it('sagt, dass die Angaben nicht übernommen werden, und nennt sie nicht als übernommen', () => { const { beschreibung, hinweis } = baustellenhinweis({ mietkosten: MIETKOSTEN_VORBELEGUNG, bauzeitplan: 'Zwei Bauabschnitte', baustellenVon: '2026-03-01', baustellenVerantwortlicher: 'Fa. Muster', bemerkungen: 'Meine Bemerkung', }); expect(hinweis).toBeDefined(); expect(hinweis!.message).toContain('nicht übernommen'); expect(hinweis!.message).not.toContain('in die Projektbeschreibung übernommen'); // Der Bearbeiter braucht den einen Satz, der ihn handeln laesst. expect(hinweis!.message).toContain('Altdatei'); // Und die Beschreibung ist genau das, was sie war: die Bemerkung. expect(beschreibung).toBe('Meine Bemerkung'); }); it('meldet auch ein Altprojekt mit blossem Bauzeitplan', () => { const { hinweis } = baustellenhinweis({ bauzeitplan: 'Zwei Bauabschnitte' }); expect(hinweis).toBeDefined(); }); it('meldet den Baustellenzeitraum, der im Altformat als Datumstext steht', () => { expect(baustellenhinweis({ baustellenVon: '2026-03-01' }).hinweis).toBeDefined(); expect(baustellenhinweis({ baustellenBis: '2026-05-31' }).hinweis).toBeDefined(); }); it('schweigt, wenn das Altprojekt keine Baustellenangaben führt', () => { expect(baustellenhinweis({ bemerkungen: 'Nur eine Bemerkung' }).hinweis).toBeUndefined(); expect(baustellenhinweis({ mietkosten: {}, baustellenVon: '' }).hinweis).toBeUndefined(); }); });