61 lines
2.8 KiB
TypeScript
61 lines
2.8 KiB
TypeScript
/** QA-1: Zucht (FEAT-3) — Wurf anlegen, Detail, Jungtier erfassen. */
|
|
import { de, expect, gotoSection, skipUnlessMock, test, uniqueName } from './fixtures'
|
|
|
|
const t = de.pages.litters
|
|
const tg = de.pages.gerbils
|
|
|
|
test('Wurf anlegen — Abgabedatum wird mit +35 Tagen vorgeschlagen', async ({ page }) => {
|
|
await gotoSection(page, de.nav.litters)
|
|
await page.getByRole('link', { name: t.newButton }).click()
|
|
await expect(page.getByRole('heading', { name: t.form.createTitle })).toBeVisible()
|
|
|
|
// Pflichtfeld-Validierung
|
|
await page.getByRole('button', { name: t.form.save, exact: true }).click()
|
|
await expect(page.getByText(t.validation.nameRequired)).toBeVisible()
|
|
await expect(page.getByText(t.validation.dateRequired)).toBeVisible()
|
|
|
|
const name = uniqueName('Wurf')
|
|
await page.getByLabel(`${t.fields.name} *`).fill(name)
|
|
await page.getByLabel(`${t.fields.date} *`).fill('2026-01-01')
|
|
// Vorschlag: Wurfdatum + 35 Tage
|
|
await expect(page.getByLabel(t.fields.expectedGoHomeDate)).toHaveValue('2026-02-05')
|
|
await page.getByRole('button', { name: t.form.save, exact: true }).click()
|
|
|
|
await expect(page.getByRole('heading', { name })).toBeVisible()
|
|
await expect(page.getByText(t.detail.parents)).toBeVisible()
|
|
})
|
|
|
|
test('Wurf-Detail zeigt Elterntiere und erwartete Farbschläge', async ({ page }) => {
|
|
skipUnlessMock()
|
|
await page.goto('/wuerfe/w-kruemel')
|
|
await expect(page.getByRole('heading', { name: 'Wurf K' })).toBeVisible()
|
|
await expect(page.getByRole('link', { name: 'Fridolin' })).toBeVisible()
|
|
await expect(page.getByRole('link', { name: 'Luna' })).toBeVisible()
|
|
// Beide Eltern haben Genotypen -> Farbvorhersage rendert
|
|
await expect(page.getByText(t.detail.expectedColors).first()).toBeVisible()
|
|
})
|
|
|
|
test('Jungtier erfassen — Formular ist mit Wurf + Geburtsdatum vorbelegt', async ({ page }) => {
|
|
skipUnlessMock()
|
|
await page.goto('/wuerfe/w-kruemel')
|
|
await page.getByRole('link', { name: t.detail.registerJuvenile }).click()
|
|
await expect(page.getByRole('heading', { name: tg.form.createTitle })).toBeVisible()
|
|
|
|
// Vorbelegung aus ?litterId=&dob=
|
|
await expect(page.getByLabel(tg.fields.litter)).toHaveValue('w-kruemel')
|
|
await expect(page.getByLabel(tg.fields.dateOfBirth)).toHaveValue('2025-03-12')
|
|
|
|
const name = uniqueName('Jungtier')
|
|
await page.getByLabel(`${tg.fields.name} *`).fill(name)
|
|
await page.getByRole('button', { name: tg.genderLabels.male, exact: false }).click()
|
|
await page.getByRole('button', { name: tg.form.save, exact: true }).click()
|
|
await expect(page.getByRole('heading', { name })).toBeVisible()
|
|
|
|
// Das Jungtier hängt am Wurf
|
|
await expect(page.getByText('Wurf K')).toBeVisible()
|
|
|
|
// ... und erscheint auf der Wurf-Detailseite unter „Jungtiere“
|
|
await page.goto('/wuerfe/w-kruemel')
|
|
await expect(page.getByRole('link', { name: new RegExp(name) })).toBeVisible()
|
|
})
|