/** * FEEDBACK-TICKETS: "Meine Tickets" — Verwaltung der eingereichten Fehlerberichte. * Erreichbar über Hilfe → „Meine Tickets". Liste mit Status-Badges (Offen/Gelöst), * gelöst markieren / wieder öffnen, Nachricht bearbeiten, löschen. */ import { de, expect, gotoSection, skipUnlessMock, acceptNextDialog, test } from './fixtures' const tt = de.feedback.tickets test.describe('Meine Tickets', () => { test.beforeEach(() => skipUnlessMock()) test('über Hilfe erreichbar, zeigt offenes und gelöstes Ticket mit Badge', async ({ page }) => { await gotoSection(page, de.nav.help) await page.getByRole('link', { name: tt.link }).click() await expect(page.getByRole('heading', { name: tt.title })).toBeVisible() // Offenes Ticket (Badge „Offen") + dessen Nachricht. await expect(page.getByText('Das Gewicht wird auf der Verlaufskurve falsch gerundet.')).toBeVisible() await expect(page.getByText(tt.statusOpen, { exact: true }).first()).toBeVisible() // Gelöstes Ticket (Badge mit Häkchen + „Gelöst"). await expect(page.getByText('Der Stammbaum zeigt den falschen Vater bei Krümel.')).toBeVisible() await expect(page.getByText(tt.statusResolved, { exact: false }).first()).toBeVisible() }) test('Ticket als gelöst markieren', async ({ page }) => { await page.goto('/hilfe/tickets') const openCard = page .locator('.ticket-card') .filter({ hasText: 'Das Gewicht wird auf der Verlaufskurve falsch gerundet.' }) await expect(openCard.getByText(tt.statusOpen, { exact: true })).toBeVisible() await openCard.getByRole('button', { name: tt.markResolved }).click() // Badge wechselt auf „Gelöst", Aktion bietet jetzt „Wieder öffnen". // Auf das Badge (.ticket-badge) zielen — „Gelöst" steht sonst auch im Meta-Label „Gelöst am". await expect(openCard.locator('.ticket-badge--resolved')).toBeVisible() await expect(openCard.getByRole('button', { name: tt.reopen })).toBeVisible() }) test('Nachricht eines Tickets bearbeiten', async ({ page }) => { await page.goto('/hilfe/tickets') // Karte über den Datensatz-Namen (bleibt auch im Bearbeiten-Modus sichtbar) // adressieren — die Nachricht selbst wird beim Bearbeiten durch das Textfeld ersetzt. const card = page.locator('.ticket-card').filter({ hasText: 'Fridolin' }) await expect(card.getByText('Das Gewicht wird auf der Verlaufskurve falsch gerundet.')).toBeVisible() await card.getByRole('button', { name: tt.edit }).click() const textarea = card.locator('textarea') await textarea.fill('Korrigierte Beschreibung des Fehlers.') await card.getByRole('button', { name: tt.save }).click() await expect(page.getByText('Korrigierte Beschreibung des Fehlers.')).toBeVisible() }) test('Ticket löschen', async ({ page }) => { await page.goto('/hilfe/tickets') const card = page .locator('.ticket-card') .filter({ hasText: 'Der Stammbaum zeigt den falschen Vater bei Krümel.' }) await expect(card).toBeVisible() acceptNextDialog(page) await card.getByRole('button', { name: tt.delete }).click() await expect( page.getByText('Der Stammbaum zeigt den falschen Vater bei Krümel.'), ).toHaveCount(0) }) })