import { test, expect } from '@playwright/test'; import { loginViaApi } from './helpers'; const BOLT_LABEL = 'Upozornění na doručení objednávky (Bolt Food)'; test.beforeEach(async ({ page }) => { await loginViaApi(page, 'e2e-user'); await page.reload(); await page.waitForLoadState('networkidle'); }); async function openSettings(page: import('@playwright/test').Page) { await page.locator('#basic-nav-dropdown').click(); await page.locator('text=Nastavení').click(); await expect(page.locator('.modal-title')).toContainText('Nastavení', { timeout: 5_000 }); } test('Přepínač doručení Bolt je pod výběrem času připomínky', async ({ page }) => { await openSettings(page); const reminderGroup = page.locator('.modal-body .mb-3').filter({ hasText: 'Připomínka výběru oběda' }); const boltGroup = page.locator('.modal-body .mb-3').filter({ hasText: BOLT_LABEL }); await expect(reminderGroup).toBeVisible(); await expect(boltGroup).toBeVisible(); // Přepínač musí v DOM následovat až za skupinou s časem připomínky const order = await page.evaluate((label) => { const groups = Array.from(document.querySelectorAll('.modal-body .mb-3')); return { reminder: groups.findIndex(g => g.textContent?.includes('Připomínka výběru oběda')), bolt: groups.findIndex(g => g.textContent?.includes(label)), }; }, BOLT_LABEL); expect(order.reminder).toBeGreaterThanOrEqual(0); expect(order.bolt).toBe(order.reminder + 1); // Výchozí stav je vypnuto await expect(page.locator('#boltDeliveredCheckbox')).not.toBeChecked(); }); test('Zapnutí přepínače se uloží na server a přežije znovuotevření', async ({ page }) => { await openSettings(page); await page.locator('#boltDeliveredCheckbox').check(); await page.locator('.modal-footer button', { hasText: 'Uložit' }).click(); await expect(page.locator('.modal')).not.toBeVisible({ timeout: 5_000 }); // Server má nastavení uložené const token = await page.evaluate(() => localStorage.getItem('token')); const resp = await page.request.get('/api/notifications/settings', { headers: { Authorization: `Bearer ${token}` }, }); expect(await resp.json()).toMatchObject({ boltDeliveredPush: true }); // Po znovunačtení stránky je přepínač stále zapnutý await page.reload(); await page.waitForLoadState('networkidle'); await openSettings(page); await expect(page.locator('#boltDeliveredCheckbox')).toBeChecked(); }); test('Vypnutí přepínače se uloží zpět', async ({ page }) => { await openSettings(page); await page.locator('#boltDeliveredCheckbox').check(); await page.locator('.modal-footer button', { hasText: 'Uložit' }).click(); await expect(page.locator('.modal')).not.toBeVisible({ timeout: 5_000 }); await openSettings(page); await page.locator('#boltDeliveredCheckbox').uncheck(); await page.locator('.modal-footer button', { hasText: 'Uložit' }).click(); await expect(page.locator('.modal')).not.toBeVisible({ timeout: 5_000 }); const token = await page.evaluate(() => localStorage.getItem('token')); const resp = await page.request.get('/api/notifications/settings', { headers: { Authorization: `Bearer ${token}` }, }); expect(await resp.json()).toMatchObject({ boltDeliveredPush: false }); });