lsa-planer

LSA-Planer Professional – Planungssoftware für Lichtsignalanlagen nach RiLSA 2015 und § 45 StVO. EUPL-1.2.

/ tests electron ueberMenue.test.ts

3,2 KB Rohdatei
tests/electron/ueberMenue.test.ts — 93 Zeilen
1 import { describe, expect, it, vi } from 'vitest';
2 import type { MenuItemConstructorOptions } from 'electron';
3 import type { MenuCommand } from '../../shared/ipc';
4 import { VERWEISADRESSEN } from '../../shared/verweise';
5
6 /**
7 * Fassung 5.14.0 - der Menueweg zum "Über"-Fenster.
8 *
9 * Bis 5.14.0 oeffnete der Eintrag `Über LSA-Planer Professional 5.14.0`
10 * die Internetseite des Herstellers - dieselbe Wirkung wie der Eintrag
11 * "Internetseite des Herstellers" unmittelbar darueber. Es gab kein
12 * Fenster dahinter, und auf die Frage, wo sich die Lizenzen im Programm
13 * ansehen lassen, gab es keine Antwort.
14 *
15 * Wie in tests/electron/ansichtsmenue.test.ts wird die reine Vorlage
16 * geprueft: Sie braucht kein Fenster.
17 */
18 vi.mock('electron', () => ({
19 Menu: { buildFromTemplate: (vorlage: unknown) => vorlage },
20 app: { getVersion: () => '5.14.0' },
21 shell: { openExternal: () => undefined },
22 }));
23
24 const { menuevorlage } = await import('../../electron/menu');
25
26 interface Aufzeichnung {
27 befehle: MenuCommand[];
28 seiten: string[];
29 }
30
31 function hilfemenue(): { eintraege: MenuItemConstructorOptions[]; auf: Aufzeichnung } {
32 const auf: Aufzeichnung = { befehle: [], seiten: [] };
33 const menue = menuevorlage(
34 (befehl) => auf.befehle.push(befehl),
35 false,
36 { aktuell: () => 100, setze: () => undefined, schritt: () => undefined },
37 '5.14.0',
38 (url) => auf.seiten.push(url),
39 () => undefined,
40 );
41 const hilfe = menue.find((e) => e.label === '&Hilfe')?.submenu;
42 expect(Array.isArray(hilfe), 'Das Hilfemenü fehlt').toBe(true);
43 return { eintraege: hilfe as MenuItemConstructorOptions[], auf };
44 }
45
46 function eintrag(
47 eintraege: MenuItemConstructorOptions[],
48 beschriftung: string,
49 ): MenuItemConstructorOptions {
50 const gefunden = eintraege.find((e) => e.label === beschriftung);
51 expect(gefunden, `Menüeintrag "${beschriftung}" fehlt`).toBeDefined();
52 return gefunden as MenuItemConstructorOptions;
53 }
54
55 describe('Hilfemenü: Über LSA-Planer Professional', () => {
56 it('schickt den Befehl "ueber" an den Renderer', () => {
57 const { eintraege, auf } = hilfemenue();
58 eintrag(eintraege, 'Über LSA-Planer Professional 5.14.0').click?.(
59 undefined as never,
60 undefined,
61 undefined as never,
62 );
63
64 expect(auf.befehle).toEqual(['ueber']);
65 });
66
67 it('öffnet dabei keine Internetseite mehr', () => {
68 const { eintraege, auf } = hilfemenue();
69 eintrag(eintraege, 'Über LSA-Planer Professional 5.14.0').click?.(
70 undefined as never,
71 undefined,
72 undefined as never,
73 );
74
75 expect(auf.seiten, 'Der Eintrag ruft weiterhin die Internetseite').toEqual([]);
76 });
77
78 it('lässt der Internetseite ihren eigenen Eintrag', () => {
79 // Grenzwache: Der Weg nach draussen bleibt, er hat nur nicht mehr zwei
80 // Eintraege.
81 const { eintraege, auf } = hilfemenue();
82 eintrag(eintraege, 'Internetseite des Herstellers').click?.(
83 undefined as never,
84 undefined,
85 undefined as never,
86 );
87
88 // Seit 5.43.1 die Akte des Programms, aus derselben Tafel wie die
89 // Verweise des "Über"-Fensters - der Menueeintrag fuehrt keine eigene.
90 expect(auf.seiten).toEqual([VERWEISADRESSEN.internetseite]);
91 expect(auf.befehle).toEqual([]);
92 });
93 });