diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl index 6e3654b..2a00b8d 100644 --- a/.beads/issues.jsonl +++ b/.beads/issues.jsonl @@ -19,6 +19,7 @@ {"id":"fotospiel-app-574","title":"Paddle catalog sync: extend PaddleClient tests/mocks for catalog endpoints","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-01T15:59:03.486301225+01:00","created_by":"soeren","updated_at":"2026-01-02T21:11:39.626820206+01:00","closed_at":"2026-01-02T21:11:39.626820206+01:00","close_reason":"Deprioritized"} {"id":"fotospiel-app-576","title":"Tenant admin onboarding: legacy asset audit + component inventory","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-01T16:07:59.996563146+01:00","created_by":"soeren","updated_at":"2026-01-01T16:08:05.599274641+01:00","closed_at":"2026-01-01T16:08:05.599274641+01:00","close_reason":"Completed in codebase (verified)"} {"id":"fotospiel-app-5dl","title":"Paddle catalog sync: PaddleCatalogService scaffold","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-01T16:00:24.916655836+01:00","created_by":"soeren","updated_at":"2026-01-01T16:00:30.566084195+01:00","closed_at":"2026-01-01T16:00:30.566084195+01:00","close_reason":"Completed in codebase (verified)"} +{"id":"fotospiel-app-5hk","title":"Fix staging coupon seed 500 for E2E","status":"open","priority":2,"issue_type":"task","created_at":"2026-01-03T15:12:53.643644221+01:00","created_by":"soeren","updated_at":"2026-01-03T15:12:53.643644221+01:00"} {"id":"fotospiel-app-5iy","title":"Security review: confirm env/header defaults","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-01T16:03:20.808188183+01:00","created_by":"soeren","updated_at":"2026-01-01T16:03:26.388002115+01:00","closed_at":"2026-01-01T16:03:26.388002115+01:00","close_reason":"Completed in codebase (verified)"} {"id":"fotospiel-app-5s3","title":"Localized SEO: canonical/hreflang tags + localized navigation","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-01T16:02:03.909947355+01:00","created_by":"soeren","updated_at":"2026-01-01T16:02:09.550647107+01:00","closed_at":"2026-01-01T16:02:09.550647107+01:00","close_reason":"Completed in codebase (verified)"} {"id":"fotospiel-app-64l","title":"SEC-FE-01 CSP nonce/hashing rollout","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-01T15:54:47.607047443+01:00","created_by":"soeren","updated_at":"2026-01-01T15:55:56.477104351+01:00","closed_at":"2026-01-01T15:55:56.477104351+01:00","close_reason":"Completed in codebase (verified) - duplicate of fotospiel-app-zli"} diff --git a/tests/ui/auth/auth-flows.test.ts b/tests/ui/auth/auth-flows.test.ts index b7167af..cf3a298 100644 --- a/tests/ui/auth/auth-flows.test.ts +++ b/tests/ui/auth/auth-flows.test.ts @@ -15,7 +15,7 @@ test.describe('Marketing auth flows', () => { await page.getByLabel(/Nachname/i).fill('Tester'); await page.getByLabel(/^E-Mail/i).fill(email); await page.getByLabel(/Telefon/i).fill('+49123456789'); - await page.getByLabel(/Adresse/i).fill('Teststr. 1, 12345 Berlin'); + await page.fill('input[name="address"]', 'Teststr. 1, 12345 Berlin'); await page.getByLabel(/Username/i).fill(username); await page.fill('input[name="password"]', password); await page.fill('input[name="password_confirmation"]', password); diff --git a/tests/ui/purchase/standard-package-checkout.test.ts b/tests/ui/purchase/standard-package-checkout.test.ts index 43e2843..8e2bfbd 100644 --- a/tests/ui/purchase/standard-package-checkout.test.ts +++ b/tests/ui/purchase/standard-package-checkout.test.ts @@ -7,11 +7,13 @@ test.describe('Standard package checkout with Paddle completion', () => { test('registers, applies coupon, and reaches confirmation', async ({ page, clearTestMailbox, + seedTestCoupons, getLatestCheckoutSession, simulatePaddleCompletion, getTestMailbox, }) => { await clearTestMailbox(); + await seedTestCoupons(); const unique = Date.now(); const email = `checkout+${unique}@example.test`; @@ -97,7 +99,9 @@ test.describe('Standard package checkout with Paddle completion', () => { await page.getByPlaceholder(/Gutscheincode/i).fill('PERCENT10'); await page.getByRole('button', { name: /Gutschein anwenden|Apply coupon/i }).click(); - await expect(page.getByText(/Gutschein PERCENT10/i)).toBeVisible(); + await expect( + page.getByText(/Gutschein PERCENT10 aktiviert|Coupon PERCENT10 applied/i) + ).toBeVisible(); const termsCheckbox = page.locator('#checkout-terms-hero'); await expect(termsCheckbox).toBeVisible();