f8cfdf70f1
CI / Generate TypeScript types (push) Successful in 14s
CI / Generate TypeScript types (pull_request) Successful in 9s
CI / Server unit tests (push) Successful in 25s
CI / Build server (push) Successful in 30s
CI / Server unit tests (pull_request) Successful in 18s
CI / Build client (push) Successful in 37s
CI / Build server (pull_request) Successful in 30s
CI / Build client (pull_request) Successful in 38s
CI / Playwright E2E tests (push) Failing after 2m33s
CI / Build and push Docker image (push) Has been skipped
CI / Playwright E2E tests (pull_request) Failing after 2m20s
CI / Notify (push) Successful in 2s
CI / Build and push Docker image (pull_request) Has been skipped
CI / Notify (pull_request) Has been skipped
70 lines
2.8 KiB
TypeScript
70 lines
2.8 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
||
|
||
test.beforeEach(async ({ page, request }) => {
|
||
// Vyčistíme volby dne, aby testy neovlivnily navzájem
|
||
await request.post('/api/dev/clear', {
|
||
data: { dayIndex: 4 },
|
||
});
|
||
await page.goto('/');
|
||
await page.waitForLoadState('networkidle');
|
||
// Počkáme, až se zobrazí volba stravování
|
||
await expect(page.locator('.choice-section select').first()).toBeVisible({ timeout: 10_000 });
|
||
});
|
||
|
||
test('výběr restaurace zobrazí seznam jídel', async ({ page }) => {
|
||
const locationSelect = page.locator('.choice-section select').first();
|
||
|
||
// Vybereme Sladovnickou – mock menu existuje
|
||
await locationSelect.selectOption('SLADOVNICKA');
|
||
|
||
// Po výběru restaurace se zobrazí druhý select s jídly
|
||
const foodSelect = page.locator('.choice-section select').nth(1);
|
||
await expect(foodSelect).toBeVisible({ timeout: 5_000 });
|
||
|
||
// Select musí obsahovat alespoň 2 možnosti (empty + ≥1 jídlo)
|
||
const options = foodSelect.locator('option');
|
||
expect(await options.count()).toBeGreaterThan(1);
|
||
});
|
||
|
||
test('výběr jídla se uloží a přetrvá po reload', async ({ page }) => {
|
||
const locationSelect = page.locator('.choice-section select').first();
|
||
await locationSelect.selectOption('SLADOVNICKA');
|
||
|
||
const foodSelect = page.locator('.choice-section select').nth(1);
|
||
await expect(foodSelect).toBeVisible({ timeout: 5_000 });
|
||
|
||
// Vybereme první nenulovou možnost
|
||
const options = await foodSelect.locator('option:not([value=""])').all();
|
||
if (options.length === 0) {
|
||
test.skip(); // Mock data nejsou dostupná pro tuto restauraci
|
||
}
|
||
const firstValue = await options[0].getAttribute('value');
|
||
await foodSelect.selectOption({ value: firstValue! });
|
||
|
||
// Počkáme, až se volba přenese na server
|
||
await page.waitForLoadState('networkidle');
|
||
|
||
// Po reload musí volba přetrvat v tabulce choices
|
||
await page.reload();
|
||
await page.waitForLoadState('networkidle');
|
||
const choicesTable = page.locator('.choices-table');
|
||
await expect(choicesTable).toBeVisible({ timeout: 5_000 });
|
||
await expect(choicesTable.locator('text=Sladovnická')).toBeVisible();
|
||
});
|
||
|
||
test('přepnutí na NEOBEDVAM odstraní výběr restaurace', async ({ page }) => {
|
||
// Nejprve zvolíme restauraci
|
||
const locationSelect = page.locator('.choice-section select').first();
|
||
await locationSelect.selectOption('SLADOVNICKA');
|
||
await page.waitForLoadState('networkidle');
|
||
|
||
// Přepneme na "Neobědvám"
|
||
await locationSelect.selectOption('NEOBEDVAM');
|
||
await page.waitForLoadState('networkidle');
|
||
|
||
// Tabulka choices musí zobrazovat "Neobědvám"
|
||
const choicesTable = page.locator('.choices-table');
|
||
await expect(choicesTable).toBeVisible({ timeout: 5_000 });
|
||
await expect(choicesTable.locator('text=Neobědvám')).toBeVisible();
|
||
});
|