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();
}
});
});