import { beforeAll, describe, expect, it, vi } from 'vitest'; import { ladeSitzung, saveSession } from '@/services/storage'; /** * Kurzhilfe, Abschnitt "Bei Störungen", im Browserbetrieb (npm run dev) - * Fassung 5.43.0. * * Seit Fassung 5.43.0 nennt der Abschnitt zuerst den Menueweg * "Hilfe → Fehlerprotokoll speichern …" und danach den Pfad des Protokolls * (tests/ui/datenschutzAnsicht.test.ts, mit Desktop-Bruecke). Im Browserbetrieb * gibt es weder Protokoll noch Anwendungsmenue: Dort steht allein der Satz, der * das sagt (Kommentar in src/main.ts). Bis 5.42.1 stand dort derselbe Absatz * wie im Desktopprogramm, mit der Bitte, "diese Datei" beizulegen, und darunter * der Satz an der Stelle des Pfads. * * Eine eigene Datei, weil `src/main.ts` je Datei einmal startet und hier ohne * `window.lsaPlaner` starten muss - so, wie die Anwendung im Browser startet. */ vi.mock('@/services/storage', async (importOriginal) => { const echt = await importOriginal(); return { ...echt, ladeSitzung: vi.fn(), saveSession: vi.fn(), addRecoveryPoint: vi.fn(), }; }); const HINWEIS = 'Im Browserbetrieb steht kein Protokoll zur Verfügung; Fehler erscheinen in der Entwicklerkonsole.'; async function warte(ms = 0): Promise { await new Promise((fertig) => setTimeout(fertig, ms)); } function kurzhilfe(): HTMLElement | null { return ( [...document.querySelectorAll('.dialog-hintergrund')].find( (k) => k.querySelector('h2')?.textContent?.trim() === 'Kurzhilfe', ) ?? null ); } beforeAll(async () => { vi.mocked(ladeSitzung).mockResolvedValue({ art: 'leer' }); vi.mocked(saveSession).mockResolvedValue({ ok: true, message: '' }); document.body.replaceChildren(); const wurzel = document.createElement('div'); wurzel.id = 'anwendung'; document.body.append(wurzel); await import('@/main'); await warte(50); }); describe('Kurzhilfe im Browserbetrieb: "Bei Störungen"', () => { it('läuft wirklich ohne Desktop-Brücke', () => { // Vorbedingung: Sonst prueft der Fall darunter den Desktopzweig. expect((window as unknown as { lsaPlaner?: unknown }).lsaPlaner).toBeUndefined(); }); it('zeigt allein den Hinweis - keinen Menüweg, keinen Pfad', async () => { window.dispatchEvent(new KeyboardEvent('keydown', { key: 'F1', bubbles: true })); await warte(20); const kasten = kurzhilfe(); expect(kasten, 'F1 hat die Kurzhilfe nicht geöffnet').not.toBeNull(); const ueberschrift = [...kasten!.querySelectorAll('h3')].find( (h) => h.textContent === 'Bei Störungen', ); expect(ueberschrift, 'Abschnitt "Bei Störungen" fehlt').toBeDefined(); // Der Abschnitt ist der letzte der Kurzhilfe: alles nach seiner Ueberschrift. const abschnitt: Element[] = []; for (let k = ueberschrift!.nextElementSibling; k !== null; k = k.nextElementSibling) { abschnitt.push(k); } expect(abschnitt.map((k) => [k.tagName, k.textContent])).toEqual([['P', HINWEIS]]); // Auch nicht nachtraeglich: Im Desktopzweig fuellt ein Versprechen den Pfad. await warte(20); const text = abschnitt.map((k) => k.textContent).join(' '); expect(text).toBe(HINWEIS); expect(text).not.toContain('Fehlerprotokoll speichern'); expect(text).not.toContain('Pfad'); }); });