/** * ABGABE-STATUS: Reservierungs-/Abgabe-Status-Seite (verfügbar → reserviert → abgegeben). * Erreichbar über das Menü („Reservierungen"). Liste mit Status-Chips, Tier-/Kontakt-Links, * Anlegen, Status-Wechsel und Löschen. */ import { de, expect, gotoSection, skipUnlessMock, acceptNextDialog, test } from './fixtures' const tr = de.pages.reservierungen test.describe('Reservierungen', () => { test.beforeEach(() => skipUnlessMock()) test('über das Menü erreichbar, zeigt die Seed-Reservierungen', async ({ page }) => { await gotoSection(page, de.nav.reservations) await expect(page.getByRole('heading', { name: tr.title })).toBeVisible() // Reservierte + abgegebene + verfügbare Vormerkung sichtbar. await expect(page.getByText('Balu Abgabe')).toBeVisible() await expect(page.getByText('Pippa')).toBeVisible() await expect(page.getByText('Benny Abgabe')).toBeVisible() }) test('Status-Filter filtern korrekt (Anzahl-Badges stimmen)', async ({ page }) => { await page.goto('/reservierungen') const filters = page.locator('.reservierungen-filter') await filters.filter({ hasText: tr.filters.reserviert }).click() await expect(page.getByText('Balu Abgabe')).toBeVisible() await expect(page.getByText('Benny Abgabe')).toHaveCount(0) await filters.filter({ hasText: tr.filters.abgegeben }).click() await expect(page.getByText('Pippa')).toBeVisible() await expect(page.getByText('Balu Abgabe')).toHaveCount(0) }) test('Tier- und Kontakt-Bezüge sind verlinkt', async ({ page }) => { await page.goto('/reservierungen') const card = page.locator('.reservation-card').filter({ hasText: 'Balu Abgabe' }) await expect(card.getByRole('link', { name: 'Balu Abgabe' })).toHaveAttribute('href', /\/rennmaeuse\/sale-balu/) await expect(card.getByRole('link', { name: 'Familie Huber' })).toHaveAttribute('href', /\/kontakte\/con-huber/) }) test('Status wechseln: verfügbares Tier reservieren', async ({ page }) => { await page.goto('/reservierungen') const card = page.locator('.reservation-card').filter({ hasText: 'Benny Abgabe' }) await expect(card.locator('.reservation-badge--verfuegbar')).toBeVisible() await card.getByRole('button', { name: tr.actions.markReserved }).click() await expect( page.locator('.reservation-card').filter({ hasText: 'Benny Abgabe' }).locator('.reservation-badge--reserviert'), ).toBeVisible() }) test('neue Reservierung anlegen', async ({ page }) => { await page.goto('/reservierungen') await page.getByRole('button', { name: tr.newButton }).click() const form = page.locator('.reservation-form') await expect(form).toBeVisible() // Ein Tier auswählen (Krümel ist in den Seed-Daten vorhanden). await form.getByLabel(tr.form.animal).selectOption({ label: 'Krümel' }) await form.getByRole('button', { name: tr.form.save }).click() // Die neue Reservierung erscheint in der Liste. await expect(page.locator('.reservation-card').filter({ hasText: 'Krümel' })).toBeVisible() }) test('Reservierung löschen', async ({ page }) => { await page.goto('/reservierungen') const card = page.locator('.reservation-card').filter({ hasText: 'Benny Abgabe' }) await expect(card).toBeVisible() acceptNextDialog(page) await card.getByRole('button', { name: tr.actions.delete }).click() await expect(page.locator('.reservation-card').filter({ hasText: 'Benny Abgabe' })).toHaveCount(0) }) })