waffensachkunde

Waffensachkunde – Lernsoftware für die Sachkundeprüfung nach § 7 WaffG. Barrierefrei, offline, EUPL-1.2.

/ app e2e erststart.spec.ts

3,1 KB Rohdatei
app/e2e/erststart.spec.ts — 72 Zeilen
1 /**
2 * Die Erststart-Frage nach dem abwählbaren Kapitel – im echten Fenster.
3 *
4 * Eigene Datei mit eigener Anwendung, weil `appStarten` die Frage für alle
5 * übrigen Prüfungen beantwortet. Hier soll sie stehenbleiben.
6 */
7
8 import { type ElectronApplication, type Page } from '@playwright/test';
9
10 import { appStartenOhneZuschnitt } from './electron-hilfe';
11 import { expect, test } from './konsolenwache';
12
13 let app: ElectronApplication;
14 let fenster: Page;
15
16 test.beforeEach(async () => {
17 ({ app, fenster } = await appStartenOhneZuschnitt());
18 });
19
20 test.afterEach(async () => {
21 await app.close();
22 });
23
24 test('steht beim allerersten Start vor dem Startbildschirm', async () => {
25 /* 89 von 575 Fragen hängen daran. Der Schalter lag bisher unter „Ihr
26 Lernplan“ – wer nie hinunterscrollte, sah ihn nie. */
27 await expect(fenster.getByRole('heading', { name: /Lernen Sie .* mit\?/u })).toBeVisible();
28 await expect(fenster.getByRole('heading', { name: 'Heute lernen' })).toHaveCount(0);
29 });
30
31 test('hat „mitlernen“ vorausgewählt und nennt die Zahlen', async () => {
32 await expect(fenster.getByRole('radio', { name: /Ja, mitlernen/u })).toBeChecked();
33 /* Die Zahlen kommen aus dem Katalog, nicht aus dem Text – sonst liefen sie
34 bei der nächsten Katalogfassung auseinander. */
35 await expect(fenster.getByText(/89 der 575 Fragen/u)).toBeVisible();
36 });
37
38 test('führt mit „Weiter“ zum Startbildschirm und lässt den Katalog vollständig', async () => {
39 await fenster.getByRole('button', { name: 'Weiter', exact: true }).click();
40
41 await expect(fenster.getByRole('heading', { name: 'Heute lernen' })).toBeVisible();
42 /* Der Schalter unter „Ihr Lernplan“ steht danach auf „mitlernen“. */
43 await expect(
44 fenster.getByRole('checkbox', { name: /Kapitel IV – Not- und Seenotsignalmittel/u }),
45 ).toBeChecked();
46 });
47
48 test('wählt bei „weglassen“ das Kapitel dauerhaft ab', async () => {
49 await fenster.getByRole('radio', { name: /Nein, weglassen/u }).check();
50 await fenster.getByRole('button', { name: 'Weiter', exact: true }).click();
51
52 await expect(fenster.getByRole('heading', { name: 'Heute lernen' })).toBeVisible();
53 await expect(
54 fenster.getByRole('checkbox', { name: /Kapitel IV – Not- und Seenotsignalmittel/u }),
55 ).not.toBeChecked();
56 /* Und die Zahlen rechnen ohne das Kapitel: 486 statt 575. */
57 await expect(fenster.getByText(/von 486 Fragen/u).first()).toBeVisible();
58 });
59
60 test('kommt beim zweiten Start nicht wieder', async () => {
61 await fenster.getByRole('button', { name: 'Weiter', exact: true }).click();
62 await expect(fenster.getByRole('heading', { name: 'Heute lernen' })).toBeVisible();
63
64 /* Neu laden ist der schärfere Fall als ein Neustart: Dasselbe Fenster,
65 derselbe Zustand auf der Platte – hinge die Antwort im Arbeitsspeicher,
66 käme die Frage hier wieder. */
67 await fenster.reload();
68 await fenster.waitForSelector('h1', { state: 'visible' });
69
70 await expect(fenster.getByRole('heading', { name: 'Heute lernen' })).toBeVisible();
71 await expect(fenster.getByRole('heading', { name: /Lernen Sie .* mit\?/u })).toHaveCount(0);
72 });