import { afterEach, describe, expect, it } from 'vitest'; import { ProjectStore } from '@/app/store'; import { createStandardIntersectionProject } from '@/domain/model/factory'; import { planView } from '@/ui/views/planView'; /** * Befund 57 zur Fassung 5.9.0 (falsche Tabellenbeschriftung). * * WAS DER ANWENDER SONST ERLEBT * * Er steuert im Signalzeitenplan mit der Sprachausgabe die Tabelle im * Abschnitt "Phasenübergänge" an - angesagt wird "Phasen des Umlaufs". Die * Tabelle listet aber Uebergaenge ("Übergang", "Beginn", "Dauer", "Maßgebende * Beziehung"), keine Phasen. Im Ausdruck fuehrt der Abschnitt "Phasen und * Phasenübergänge" wirklich zwei Tabellen; der Name gehoert zur anderen. * * `beschrifteTabelle` setzt den Text als `` ein - * er ist damit der zugaengliche Name der Tabelle und nur dort zu bemerken. */ const FESTES_DATUM = new Date('2026-01-01T00:00:00Z'); afterEach(() => { document.body.replaceChildren(); }); interface Ansicht { readonly wurzel: HTMLElement; readonly aufraeumen: () => void; } function zeichne(): Ansicht { const wurzel = document.createElement('div'); document.body.append(wurzel); const schliessen = planView.render(wurzel, { store: new ProjectStore(createStandardIntersectionProject('Signalzeitenplan', FESTES_DATUM)), refresh: () => {}, navigate: () => {}, target: null, }); return { wurzel, aufraeumen: () => { schliessen(); wurzel.remove(); }, }; } /** Beschriftung der Tabelle, deren erste Spaltenueberschrift `kopf` lautet. */ function beschriftungZu(wurzel: HTMLElement, kopf: string): string { const tabelle = [...wurzel.querySelectorAll('table')].find( (t) => (t.querySelector('thead th')?.textContent ?? '').trim() === kopf, ); if (tabelle === undefined) throw new Error(`Keine Tabelle mit erster Spalte "${kopf}"`); return (tabelle.querySelector('caption')?.textContent ?? '').trim(); } describe('Signalzeitenplan: die Uebergangstabelle heisst nach ihrem Inhalt', () => { it('nennt die Tabelle der Phasenuebergaenge nicht "Phasen des Umlaufs"', () => { const ansicht = zeichne(); try { expect(beschriftungZu(ansicht.wurzel, 'Übergang')).toBe('Phasenübergänge im Umlauf'); } finally { ansicht.aufraeumen(); } }); it('laesst die Beschriftung der Signalzeitentabelle unberuehrt', () => { const ansicht = zeichne(); try { expect(beschriftungZu(ansicht.wurzel, 'Signalgruppe')).toBe('Signalzeiten je Signalgruppe'); } finally { ansicht.aufraeumen(); } }); });