import { beforeAll, describe, expect, it, vi } from 'vitest'; import { createStandardIntersectionProject } from '@/domain/model/factory'; import { ladeSitzung, saveSession } from '@/services/storage'; /** * Nach einem Wiederanlauf sagen Kopfzeile, Fenstertitel und Statusleiste * dasselbe (Befund 20, zweiter Anlauf). * * Der erste Anlauf hielt den Sachverhalt "steht in keiner Datei" neben `dirty` * in einem Hilfsmerker in `src/main.ts` und reichte ihn nur den fuenf Waechtern * vor dem Verwerfen zu. Die Anzeige las weiter `store.getState()`. Gemessen * standen danach drei Auskuenfte ueber denselben Stand nebeneinander: * * - Kopfzeile: "Bestand · gespeichert" * - Fenstertitel: ohne Aufzaehlungspunkt, also "gespeichert" * - Statusleiste: "Nicht als Datei gespeichert" * * und Strg+N fragte im selben Augenblick zurueck. Der Anwender kann daraus * nicht schliessen, ob seine Handarbeit gesichert ist. Der Merker gehoert * deshalb in den Zustandsspeicher selbst, damit alle Ausgaben aus derselben * Quelle schoepfen. * * Geprueft wird am echten Einstiegspunkt: `src/main.ts` wird eingelesen und * startet die ganze Anwendung; nur der Sitzungsspeicher ist ersetzt. */ vi.mock('@/services/storage', async (importOriginal) => { const echt = await importOriginal(); return { ...echt, ladeSitzung: vi.fn(), saveSession: vi.fn(), addRecoveryPoint: vi.fn(), }; }); async function warte(ms = 0): Promise { await new Promise((fertig) => setTimeout(fertig, ms)); } beforeAll(async () => { vi.mocked(ladeSitzung).mockResolvedValue({ art: 'geladen', stand: { project: createStandardIntersectionProject(), issues: [], repaired: false, migrated: false, sourceVersion: '13', intergreenComparison: [], }, }); vi.mocked(saveSession).mockResolvedValue({ ok: true, message: '' }); localStorage.clear(); document.body.replaceChildren(); const wurzel = document.createElement('div'); wurzel.id = 'anwendung'; document.body.append(wurzel); await import('@/main'); await warte(20); }); describe('Anzeige nach dem Wiederanlauf aus dem Sitzungsspeicher', () => { it('meldet in der Kopfzeile ungespeicherte Änderungen', () => { const info = document.getElementById('kopf-projektinfo'); expect(info?.textContent).toContain('ungespeicherte Änderungen'); }); it('setzt den Aufzählungspunkt in den Fenstertitel', () => { expect(document.title.startsWith('• ')).toBe(true); }); it('sagt in der Statusleiste weiterhin, dass keine Datei dahintersteht', () => { const leiste = document.querySelector('.leiste'); expect(leiste?.textContent).toContain('Nicht als Datei gespeichert'); }); });