Files
kochwas/tests/e2e/remote/wishlist.spec.ts

44 lines
1.9 KiB
TypeScript
Raw Normal View History

import { test, expect } from '@playwright/test';
import { clearActiveProfile, setActiveProfile, HENDRIK_ID } from './fixtures/profile';
test.describe('Wunschliste-Seite', () => {
test('laedt Header + Sort-Tabs', async ({ page }) => {
await setActiveProfile(page, HENDRIK_ID);
await page.goto('/wishlist');
await expect(page.getByRole('heading', { level: 1, name: 'Wunschliste' })).toBeVisible();
for (const label of ['Meist gewünscht', 'Neueste', 'Älteste']) {
await expect(page.getByRole('tab', { name: label })).toBeVisible();
}
});
test('Badge im Header stimmt mit Anzahl Eintraegen ueberein', async ({ page, request }) => {
await setActiveProfile(page, HENDRIK_ID);
await page.goto('/wishlist');
// Die API zaehlt die Wunschlisten-Rezepte — der Header-Badge sollte
// die gleiche Zahl zeigen.
const res = await request.get('/api/wishlist?sort=popular');
const body = (await res.json()) as { entries: unknown[] };
const expected = body.entries.length;
if (expected === 0) {
// Kein Badge bei Null — der Link hat dann gar keine Zahl.
return;
}
const badge = page.locator('a[href="/wishlist"]').first();
await expect(badge).toContainText(String(expected));
});
test('requireProfile zeigt Custom-Message "um mitzuwuenschen"', async ({ page }) => {
await clearActiveProfile(page);
await page.goto('/wishlist');
// Erster "Ich will das auch"-Button eines beliebigen Eintrags.
// Falls Wunschliste leer ist, ueberspringen.
const btn = page.getByRole('button', { name: /Ich will das auch/i }).first();
const count = await btn.count();
test.skip(count === 0, 'Wunschliste leer — Custom-Message-Test uebersprungen');
await btn.click();
await expect(page.getByText('Kein Profil gewählt')).toBeVisible();
await expect(page.getByText('um mitzuwünschen')).toBeVisible();
});
});