- JuvenileCard-Komponente in WurfDetailPage mit 36px-Kreis-Avatar links - Fallback auf GerbilIcon (SVG-Silhouette) wenn kein profilePhotoUrl - URL-basiertes Fehler-Tracking (failedUrl) statt useEffect+imgError - wuerfe.css: Flex-Layout fuer Card+Avatar, overflow:hidden/object-fit:cover - StammbaumPage: gleiche Lint-Verletzung (react-hooks/set-state-in-effect) behoben (failedUrl-Pattern, kein useEffect mehr fuer Bild-Reset) - E2E: profilePhotoUrl auf Pippa (pup-abgabe), neuer Avatar-Test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
46 lines
2.2 KiB
TypeScript
46 lines
2.2 KiB
TypeScript
/** LITTER-JUVENILE-DETAILS + JUVENILE-AVATARS: Jungtier-Felder und Foto-Avatare im Wurf-Detail. */
|
|
import { de, expect, skipUnlessMock, test } from './fixtures'
|
|
|
|
const t = de.pages.litters
|
|
|
|
test('Jungtier-Liste zeigt Farbschlag, Abgabedatum, Abnehmer, Todesdatum und Todesursache', async ({
|
|
page,
|
|
}) => {
|
|
skipUnlessMock()
|
|
await page.goto('/wuerfe/w-kruemel')
|
|
await expect(page.getByRole('heading', { name: 'Wurf K' })).toBeVisible()
|
|
|
|
// Krümel: Active, colorVarietyId cv-agouti → Farbschlag 'Agouti'
|
|
const kruemelCard = page.getByRole('link', { name: /Krümel/ })
|
|
await expect(kruemelCard).toBeVisible()
|
|
await expect(kruemelCard).toContainText(`${t.detail.juvenileFields.colorVariety}: Agouti`)
|
|
|
|
// Pippa: GivenAway, Gold, goHomeDate 2025-05-01, Abnehmer Familie Huber
|
|
const pippaCard = page.getByRole('link', { name: /Pippa/ })
|
|
await expect(pippaCard).toBeVisible()
|
|
await expect(pippaCard).toContainText(`${t.detail.juvenileFields.colorVariety}: Gold`)
|
|
await expect(pippaCard).toContainText(t.detail.juvenileFields.goHomeDate)
|
|
await expect(pippaCard).toContainText(`${t.detail.juvenileFields.receiver}: Familie Huber`)
|
|
|
|
// Benny: Deceased, no colorVarietyId, dateOfDeath + causeOfDeath
|
|
const bennyCard = page.getByRole('link', { name: /Benny/ })
|
|
await expect(bennyCard).toBeVisible()
|
|
await expect(bennyCard).toContainText(t.detail.juvenileFields.dateOfDeath)
|
|
await expect(bennyCard).toContainText(`${t.detail.juvenileFields.causeOfDeath}: Altersschwäche`)
|
|
})
|
|
|
|
test('JUVENILE-AVATARS: Pippa zeigt Foto-Avatar, Benny zeigt GerbilIcon', async ({ page }) => {
|
|
skipUnlessMock()
|
|
await page.goto('/wuerfe/w-kruemel')
|
|
await expect(page.getByRole('heading', { name: 'Wurf K' })).toBeVisible()
|
|
|
|
// Pippa hat profilePhotoUrl → <img.juvenile-photo__avatar> sichtbar
|
|
const pippaCard = page.getByRole('link', { name: /Pippa/ })
|
|
await expect(pippaCard.locator('.juvenile-photo__avatar')).toBeVisible()
|
|
|
|
// Benny hat kein Foto → kein img, SVG-Icon (GerbilIcon) sichtbar
|
|
const bennyCard = page.getByRole('link', { name: /Benny/ })
|
|
await expect(bennyCard.locator('.juvenile-photo__avatar')).not.toBeVisible()
|
|
await expect(bennyCard.locator('svg')).toBeVisible()
|
|
})
|