import { describe, expect, it, vi } from 'vitest'; import type { MenuItemConstructorOptions } from 'electron'; import type { MenuCommand } from '../../shared/ipc'; import { VERWEISADRESSEN } from '../../shared/verweise'; /** * Fassung 5.14.0 - der Menueweg zum "Über"-Fenster. * * Bis 5.14.0 oeffnete der Eintrag `Über LSA-Planer Professional 5.14.0` * die Internetseite des Herstellers - dieselbe Wirkung wie der Eintrag * "Internetseite des Herstellers" unmittelbar darueber. Es gab kein * Fenster dahinter, und auf die Frage, wo sich die Lizenzen im Programm * ansehen lassen, gab es keine Antwort. * * Wie in tests/electron/ansichtsmenue.test.ts wird die reine Vorlage * geprueft: Sie braucht kein Fenster. */ vi.mock('electron', () => ({ Menu: { buildFromTemplate: (vorlage: unknown) => vorlage }, app: { getVersion: () => '5.14.0' }, shell: { openExternal: () => undefined }, })); const { menuevorlage } = await import('../../electron/menu'); interface Aufzeichnung { befehle: MenuCommand[]; seiten: string[]; } function hilfemenue(): { eintraege: MenuItemConstructorOptions[]; auf: Aufzeichnung } { const auf: Aufzeichnung = { befehle: [], seiten: [] }; const menue = menuevorlage( (befehl) => auf.befehle.push(befehl), false, { aktuell: () => 100, setze: () => undefined, schritt: () => undefined }, '5.14.0', (url) => auf.seiten.push(url), () => undefined, ); const hilfe = menue.find((e) => e.label === '&Hilfe')?.submenu; expect(Array.isArray(hilfe), 'Das Hilfemenü fehlt').toBe(true); return { eintraege: hilfe as MenuItemConstructorOptions[], auf }; } function eintrag( eintraege: MenuItemConstructorOptions[], beschriftung: string, ): MenuItemConstructorOptions { const gefunden = eintraege.find((e) => e.label === beschriftung); expect(gefunden, `Menüeintrag "${beschriftung}" fehlt`).toBeDefined(); return gefunden as MenuItemConstructorOptions; } describe('Hilfemenü: Über LSA-Planer Professional', () => { it('schickt den Befehl "ueber" an den Renderer', () => { const { eintraege, auf } = hilfemenue(); eintrag(eintraege, 'Über LSA-Planer Professional 5.14.0').click?.( undefined as never, undefined, undefined as never, ); expect(auf.befehle).toEqual(['ueber']); }); it('öffnet dabei keine Internetseite mehr', () => { const { eintraege, auf } = hilfemenue(); eintrag(eintraege, 'Über LSA-Planer Professional 5.14.0').click?.( undefined as never, undefined, undefined as never, ); expect(auf.seiten, 'Der Eintrag ruft weiterhin die Internetseite').toEqual([]); }); it('lässt der Internetseite ihren eigenen Eintrag', () => { // Grenzwache: Der Weg nach draussen bleibt, er hat nur nicht mehr zwei // Eintraege. const { eintraege, auf } = hilfemenue(); eintrag(eintraege, 'Internetseite des Herstellers').click?.( undefined as never, undefined, undefined as never, ); // Seit 5.43.1 die Akte des Programms, aus derselben Tafel wie die // Verweise des "Über"-Fensters - der Menueeintrag fuehrt keine eigene. expect(auf.seiten).toEqual([VERWEISADRESSEN.internetseite]); expect(auf.befehle).toEqual([]); }); });