44 lines
1.7 KiB
TypeScript
44 lines
1.7 KiB
TypeScript
|
|
import { test, expect } from '@playwright/test';
|
||
|
|
|
||
|
|
test.describe('Startseite', () => {
|
||
|
|
test('laedt mit H1, Zuletzt-hinzugefuegt und Alle-Rezepte', async ({ page }) => {
|
||
|
|
await page.goto('/');
|
||
|
|
await expect(page).toHaveTitle(/Kochwas/);
|
||
|
|
await expect(page.getByRole('heading', { level: 1, name: 'Kochwas' })).toBeVisible();
|
||
|
|
await expect(
|
||
|
|
page.getByRole('heading', { level: 2, name: 'Zuletzt hinzugefügt' })
|
||
|
|
).toBeVisible();
|
||
|
|
await expect(page.getByRole('heading', { level: 2, name: 'Alle Rezepte' })).toBeVisible();
|
||
|
|
});
|
||
|
|
|
||
|
|
test('Sort-Tabs rendern unterschiedliche Top-Eintraege', async ({ page }) => {
|
||
|
|
await page.goto('/');
|
||
|
|
// Liste unter "Alle Rezepte"
|
||
|
|
const allSection = page.locator('section', { has: page.getByRole('heading', { name: 'Alle Rezepte' }) });
|
||
|
|
const firstItem = () => allSection.locator('li a').first().innerText();
|
||
|
|
|
||
|
|
await page.getByRole('tab', { name: 'Name' }).click();
|
||
|
|
await page.waitForTimeout(400);
|
||
|
|
const nameTop = await firstItem();
|
||
|
|
|
||
|
|
await page.getByRole('tab', { name: 'Hinzugefügt' }).click();
|
||
|
|
await page.waitForTimeout(400);
|
||
|
|
const addedTop = await firstItem();
|
||
|
|
|
||
|
|
expect(nameTop).not.toEqual(addedTop);
|
||
|
|
});
|
||
|
|
|
||
|
|
test('hat keine Console-Errors', async ({ page }) => {
|
||
|
|
const errors: string[] = [];
|
||
|
|
page.on('console', (msg) => {
|
||
|
|
if (msg.type() === 'error') errors.push(msg.text());
|
||
|
|
});
|
||
|
|
await page.goto('/');
|
||
|
|
await page.waitForLoadState('networkidle');
|
||
|
|
// 404s auf externen Bildern (chefkoch-cdn, cloudfront) ignorieren —
|
||
|
|
// das ist kein App-Fehler, sondern externe Thumbnails.
|
||
|
|
const appErrors = errors.filter((e) => !/Failed to load resource/i.test(e));
|
||
|
|
expect(appErrors).toEqual([]);
|
||
|
|
});
|
||
|
|
});
|