import { describe, expect, it } from 'vitest'; import { parseProject } from '@/domain/model/schema'; /* * Befund 11, behoben in Fassung 5.9.0. * * parseConflicts begrenzt Raeum- und Einfahrweg auf die Grenze der Anlagenart * und uebernimmt den Herkunftsnachweis danach unveraendert. Steht in der Datei * "lageplan" mit Uebernahmedatum, weist der Ausdruck die vom Programm erzeugte * Zahl weiterhin als "Aus dem Lageplan vermessen" aus. Genau dagegen wurde * Schema 8 eingefuehrt; die Meldung ueber die Kappung erscheint einmalig beim * Oeffnen, die falsche Herkunftsangabe steht dauerhaft in Datei und Ausdruck. */ describe('Herkunftsnachweis nach der Kappung des Weges', () => { const zweiGruppen = [ { id: 'a', name: 'K1', mode: 'kfz' }, { id: 'b', name: 'K2', mode: 'kfz' }, ]; it('entwertet den Nachweis auf "unbestimmt", wenn die Schemapruefung den Raeumweg selbst gekuerzt hat', () => { const { project, issues } = parseProject({ anlagenart: 'fussgaengerschutzanlage', signalGroups: zweiGruppen, conflicts: [ { fromId: 'a', toId: 'b', clearingDistance: 400, enteringDistance: 10, wegnachweis: { herkunft: 'lageplan', uebernommenAm: '2026-02-02T09:00:00.000Z' }, }, ], }); expect(project.conflicts[0]!.clearingDistance).toBe(100); expect(project.conflicts[0]!.wegnachweis).toEqual({ herkunft: 'unbestimmt', uebernommenAm: null, }); expect( issues.some((i) => i.path === 'conflicts[0].wegnachweis' && i.severity === 'warnung'), ).toBe(true); }); it('entwertet den Nachweis auch, wenn nur der Einfahrweg gekuerzt wurde', () => { const { project } = parseProject({ anlagenart: 'fussgaengerschutzanlage', signalGroups: zweiGruppen, conflicts: [ { fromId: 'a', toId: 'b', clearingDistance: 20, enteringDistance: 400, wegnachweis: { herkunft: 'lageplan', uebernommenAm: '2026-02-02T09:00:00.000Z' }, }, ], }); expect(project.conflicts[0]!.enteringDistance).toBe(100); expect(project.conflicts[0]!.wegnachweis.herkunft).toBe('unbestimmt'); }); it('entwertet den Nachweis auch, wenn der eingetragene Weg unlesbar war und das Schema 0 eingesetzt hat', () => { const { project, issues } = parseProject({ anlagenart: 'fussgaengerschutzanlage', signalGroups: zweiGruppen, conflicts: [ { fromId: 'a', toId: 'b', clearingDistance: '40 m', enteringDistance: 10, wegnachweis: { herkunft: 'lageplan', uebernommenAm: '2026-02-02T09:00:00.000Z' }, }, ], }); // Die 0 hat das Programm eingesetzt, nicht der Bearbeiter und kein // Lageplan. Bliebe der Nachweis stehen, bescheinigte der Ausdruck "Aus dem // Lageplan vermessen (02.02.2026)" ueber einem Raeumweg von 0 m. expect(project.conflicts[0]!.clearingDistance).toBe(0); expect(project.conflicts[0]!.wegnachweis).toEqual({ herkunft: 'unbestimmt', uebernommenAm: null, }); expect( issues.some((i) => i.path === 'conflicts[0].wegnachweis' && i.severity === 'warnung'), ).toBe(true); }); it('laesst einen ungekuerzten Nachweis samt Uebernahmedatum unangetastet', () => { const { project, issues } = parseProject({ anlagenart: 'fussgaengerschutzanlage', signalGroups: zweiGruppen, conflicts: [ { fromId: 'a', toId: 'b', clearingDistance: 40, enteringDistance: 10, wegnachweis: { herkunft: 'lageplan', uebernommenAm: '2026-02-02T09:00:00.000Z' }, }, ], }); expect(project.conflicts[0]!.clearingDistance).toBe(40); expect(project.conflicts[0]!.wegnachweis).toEqual({ herkunft: 'lageplan', uebernommenAm: '2026-02-02T09:00:00.000Z', }); expect(issues.filter((i) => i.path.startsWith('conflicts'))).toEqual([]); }); it('laesst den Nachweis stehen, wenn ein Wegfeld gar nicht in der Datei steht', () => { // Ein FEHLENDER Eintrag ist keine Unlesbarkeit - dieselbe Regel wie bei // `boolGemeldet`. Das Schema hat dort nichts geaendert, es stand nur nichts // da; eine Entwertung waere eine Meldung ueber ein Feld, das niemand // geschrieben hat. const { project, issues } = parseProject({ anlagenart: 'fussgaengerschutzanlage', signalGroups: zweiGruppen, conflicts: [ { fromId: 'a', toId: 'b', clearingDistance: 40, wegnachweis: { herkunft: 'lageplan', uebernommenAm: '2026-02-02T09:00:00.000Z' }, }, ], }); expect(project.conflicts[0]!.enteringDistance).toBe(0); expect(project.conflicts[0]!.wegnachweis.herkunft).toBe('lageplan'); expect(issues.filter((i) => i.path.includes('wegnachweis'))).toEqual([]); }); it('meldet bei einem gekuerzten Weg ohne Nachweis keine zweite Entwertung', () => { const { project, issues } = parseProject({ anlagenart: 'fussgaengerschutzanlage', signalGroups: zweiGruppen, conflicts: [{ fromId: 'a', toId: 'b', clearingDistance: 400, enteringDistance: 10 }], }); expect(project.conflicts[0]!.wegnachweis.herkunft).toBe('unbestimmt'); expect(issues.filter((i) => i.path.includes('wegnachweis'))).toEqual([]); }); });