ecbbeb2cec
CI / Generate TypeScript types (push) Successful in 9s
CI / Generate TypeScript types (pull_request) Successful in 11s
CI / Server unit tests (push) Successful in 22s
CI / Build server (push) Successful in 29s
CI / Server unit tests (pull_request) Successful in 25s
CI / Build client (push) Successful in 34s
CI / Build server (pull_request) Successful in 30s
CI / Build client (pull_request) Successful in 32s
CI / Playwright E2E tests (push) Failing after 1m48s
CI / Build and push Docker image (push) Has been skipped
CI / Notify (push) Successful in 4s
CI / Playwright E2E tests (pull_request) Failing after 1m48s
CI / Build and push Docker image (pull_request) Has been skipped
CI / Notify (pull_request) Has been skipped
80 lines
3.4 KiB
TypeScript
80 lines
3.4 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
||
|
||
test.beforeEach(async ({ page, request }) => {
|
||
// Naseedujeme 5 uživatelů pro dnešní den – GenerateQrModal pracuje se stávajícími choices
|
||
await request.post('/api/dev/generate', { data: { dayIndex: 4, count: 5 } });
|
||
|
||
// Přednastavíme bankovní účet v localStorage (SettingsContext čte z LS při inicializaci)
|
||
await page.goto('/');
|
||
await page.evaluate(() => {
|
||
localStorage.setItem('bank_account_number', '2400000000/2010');
|
||
localStorage.setItem('bank_account_holder_name', 'Test User');
|
||
});
|
||
// Reload tak, aby SettingsContext načetl nové hodnoty z localStorage
|
||
await page.reload();
|
||
await page.waitForLoadState('networkidle');
|
||
});
|
||
|
||
test('Nastavení ukládají číslo účtu a jméno do localStorage', async ({ page }) => {
|
||
// Otevření nastavení
|
||
await page.locator('#basic-nav-dropdown').click();
|
||
await page.locator('text=Nastavení').click();
|
||
|
||
// Modal musí být viditelný
|
||
await expect(page.locator('.modal-title')).toContainText('Nastavení', { timeout: 5_000 });
|
||
|
||
// Změníme číslo účtu – pressSequentially zajistí spuštění React onChange na každý znak
|
||
// Číslo 1000000005 je platné (kontrolní součet mod 11 = 0), jinak by validace zamítla uložení
|
||
const accountInput = page.getByPlaceholder('123456-1234567890/1234');
|
||
await accountInput.click({ clickCount: 3 });
|
||
await accountInput.pressSequentially('1000000005/5500');
|
||
|
||
// Změníme jméno
|
||
const nameInput = page.getByPlaceholder('Jan Novák');
|
||
await nameInput.click({ clickCount: 3 });
|
||
await nameInput.pressSequentially('Nové Jméno');
|
||
|
||
// Uložíme a počkáme na zavření modalu
|
||
await page.locator('.modal-footer button', { hasText: 'Uložit' }).click();
|
||
await expect(page.locator('.modal')).not.toBeVisible({ timeout: 5_000 });
|
||
|
||
// Ověříme v localStorage
|
||
const bankAccount = await page.evaluate(() => localStorage.getItem('bank_account_number'));
|
||
const holderName = await page.evaluate(() => localStorage.getItem('bank_account_holder_name'));
|
||
expect(bankAccount).toBe('1000000005/5500');
|
||
expect(holderName).toBe('Nové Jméno');
|
||
});
|
||
|
||
test('otevře modal Generování QR kódů pokud je nastaven účet', async ({ page }) => {
|
||
// Otevření dropdown menu
|
||
await page.locator('#basic-nav-dropdown').click();
|
||
await page.locator('text=Generování QR kódů').click();
|
||
|
||
// Modal se otevře
|
||
await expect(page.locator('.modal')).toBeVisible({ timeout: 5_000 });
|
||
// Modal musí obsahovat seznam uživatelů nebo prázdný stav
|
||
await expect(page.locator('.modal-body')).toBeVisible();
|
||
});
|
||
|
||
test('upozorní pokud není nastaven bankovní účet', async ({ page }) => {
|
||
// Odebereme nastavení účtu
|
||
await page.evaluate(() => {
|
||
localStorage.removeItem('bank_account_number');
|
||
localStorage.removeItem('bank_account_holder_name');
|
||
});
|
||
await page.reload();
|
||
await page.waitForLoadState('networkidle');
|
||
|
||
// Dialog místo modalu
|
||
page.on('dialog', async dialog => {
|
||
expect(dialog.message()).toContain('číslo účtu');
|
||
await dialog.accept();
|
||
});
|
||
|
||
await page.locator('#basic-nav-dropdown').click();
|
||
await page.locator('text=Generování QR kódů').click();
|
||
|
||
// Modal se NESMÍ otevřít
|
||
await expect(page.locator('.modal')).not.toBeVisible({ timeout: 3_000 });
|
||
});
|