60 lines
2.7 KiB
TypeScript
60 lines
2.7 KiB
TypeScript
/** RÜCKNAHMEN: Verwaltungsseite für zurückgekommene Tiere (/ruecknahmen). */
|
|
import { de, expect, skipUnlessMock, test } from './fixtures'
|
|
|
|
const t = de.pages.ruecknahmen
|
|
|
|
test('Rücknahmen: Liste ist anfangs leer und das Formular lässt sich öffnen', async ({ page }) => {
|
|
skipUnlessMock()
|
|
await page.goto('/ruecknahmen')
|
|
|
|
await expect(page.getByRole('heading', { name: t.title })).toBeVisible()
|
|
await expect(page.getByText(t.empty)).toBeVisible()
|
|
|
|
await page.getByRole('button', { name: t.newButton }).click()
|
|
await expect(page.getByRole('heading', { name: t.formTitle })).toBeVisible()
|
|
})
|
|
|
|
test('Rücknahmen: erfassen über Formular speichert und zeigt den Eintrag', async ({ page, mockDb }) => {
|
|
skipUnlessMock()
|
|
await page.goto('/ruecknahmen')
|
|
|
|
await page.getByRole('button', { name: t.newButton }).click()
|
|
|
|
// Tier + Kontakt aus den Dropdowns wählen, Datum + Grund eintragen.
|
|
await page.getByRole('combobox', { name: t.fields.gerbil, exact: true }).selectOption({ label: 'Krümel' })
|
|
await page.getByRole('textbox', { name: t.fields.returnDate, exact: true }).fill('2026-05-01')
|
|
await page.getByRole('combobox', { name: t.fields.fromContact, exact: true }).selectOption({ label: 'Zoohandlung Meier' })
|
|
await page.getByRole('textbox', { name: t.fields.note, exact: true }).fill('Allergie in der Familie')
|
|
|
|
await page.getByRole('button', { name: t.save }).click()
|
|
|
|
// Eintrag erscheint in der Liste mit verlinktem Tiernamen.
|
|
const card = page.locator('.gerbil-card', { hasText: 'Krümel' })
|
|
await expect(card).toBeVisible()
|
|
await expect(card).toContainText('Allergie in der Familie')
|
|
await expect(card.getByRole('link', { name: 'Krümel' })).toBeVisible()
|
|
|
|
// Im Mock persistiert (gerbilId + note).
|
|
expect(mockDb).not.toBeNull()
|
|
const rows = mockDb!.returns
|
|
expect(rows.length).toBe(1)
|
|
expect(rows[0]).toMatchObject({ gerbilId: 'kruemel', note: 'Allergie in der Familie' })
|
|
})
|
|
|
|
test('Rücknahmen: Eintrag löschen entfernt ihn aus der Liste', async ({ page, mockDb }) => {
|
|
skipUnlessMock()
|
|
// Einen Eintrag über die UI anlegen (Fixture erstellt die DB frisch pro Test).
|
|
await page.goto('/ruecknahmen')
|
|
await page.getByRole('button', { name: t.newButton }).click()
|
|
await page.getByRole('combobox', { name: t.fields.gerbil, exact: true }).selectOption({ label: 'Krümel' })
|
|
await page.getByRole('button', { name: t.save }).click()
|
|
await expect(page.locator('.gerbil-card', { hasText: 'Krümel' })).toBeVisible()
|
|
|
|
// Löschen bestätigen.
|
|
page.on('dialog', (d) => d.accept())
|
|
await page.locator('.gerbil-card', { hasText: 'Krümel' }).getByRole('button', { name: t.delete }).click()
|
|
|
|
await expect(page.getByText(t.empty)).toBeVisible()
|
|
expect(mockDb!.returns.length).toBe(0)
|
|
})
|