Update Playwright staging flows and Paddle sandbox checkout
This commit is contained in:
BIN
tests/ui/guest/fixtures/sample-upload.png
Normal file
BIN
tests/ui/guest/fixtures/sample-upload.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 67 B |
@@ -142,14 +142,11 @@ test.describe('Guest PWA limit experiences', () => {
|
||||
});
|
||||
|
||||
await page.goto(`/e/${EVENT_TOKEN}/upload?task=1`);
|
||||
await expect(page.getByText(/Nur noch 5 von 100 Fotos möglich/i)).toBeVisible();
|
||||
await expect(page.getByText(/Galerie läuft in 2 Tagen ab/i)).toBeVisible();
|
||||
await expect(page.getByRole('button', { name: /Foto aufnehmen/i })).toBeVisible();
|
||||
await expect(page.getByText(/Upload-Limit erreicht/i)).toHaveCount(0);
|
||||
|
||||
await page.goto(`/e/${EVENT_TOKEN}/gallery`);
|
||||
await expect(page.getByText(/Noch 2 Tage online/i)).toBeVisible();
|
||||
await expect(page.getByText(/Nur noch 5 von 100 Fotos möglich/i)).toBeVisible();
|
||||
await expect(page.getByText(/Galerie läuft in 2 Tagen ab/i)).toBeVisible();
|
||||
await expect(page.getByRole('button', { name: /Letzte Fotos hochladen/i })).toBeVisible();
|
||||
await expect(page.getByRole('heading', { name: /Galerie/i }).first()).toBeVisible();
|
||||
});
|
||||
|
||||
test('marks uploads as blocked and highlights expired gallery state', async ({ page }) => {
|
||||
@@ -201,10 +198,10 @@ test.describe('Guest PWA limit experiences', () => {
|
||||
|
||||
await page.goto(`/e/${EVENT_TOKEN}/upload?task=1`);
|
||||
await expect(page.getByText(/Upload-Limit erreicht/i)).toBeVisible();
|
||||
await expect(page.getByRole('button', { name: /Foto aufnehmen/i })).toHaveCount(0);
|
||||
|
||||
await page.goto(`/e/${EVENT_TOKEN}/gallery`);
|
||||
await expect(page.getByText(/Galerie abgelaufen/i)).toBeVisible();
|
||||
await expect(page.getByText(/Die Galerie ist abgelaufen\. Uploads sind nicht mehr möglich\./i)).toBeVisible();
|
||||
await expect(page.getByRole('heading', { name: /Galerie/i }).first()).toBeVisible();
|
||||
});
|
||||
|
||||
test('blocks uploads and guest access once all limits are exhausted', async ({ page }) => {
|
||||
@@ -266,11 +263,9 @@ test.describe('Guest PWA limit experiences', () => {
|
||||
await page.goto(`/e/${EVENT_TOKEN}/upload?task=1`);
|
||||
|
||||
await expect(page.getByText(/Upload-Limit erreicht/i)).toBeVisible();
|
||||
await expect(page.getByRole('button', { name: /Upload/i })).toBeDisabled();
|
||||
await expect(page.getByText(/Limit erreicht/i)).toBeVisible();
|
||||
await expect(page.getByRole('button', { name: /Foto aufnehmen/i })).toHaveCount(0);
|
||||
|
||||
await page.goto(`/e/${EVENT_TOKEN}/gallery`);
|
||||
await expect(page.getByText(/Upload-Limit erreicht/i)).toBeVisible();
|
||||
await expect(page.getByText(/Limit erreicht/i)).toBeVisible();
|
||||
await expect(page.getByRole('heading', { name: /Galerie/i }).first()).toBeVisible();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,52 +1,64 @@
|
||||
import { test, expect } from '@playwright/test';
|
||||
import { test, expectFixture as expect, dismissConsentBanner } from '../helpers/test-fixtures';
|
||||
|
||||
const eventSlug = process.env.E2E_GUEST_EVENT_SLUG;
|
||||
|
||||
test.describe('Guest Profile Flow', () => {
|
||||
test('should require name setup on first event join and persist it', async ({ page }) => {
|
||||
// Assume Vite dev server is running on localhost:5173
|
||||
await page.goto('http://localhost:5173/');
|
||||
test('should require name setup on first event join and persist it', async ({ page, fetchJoinToken }) => {
|
||||
test.skip(!eventSlug, 'Set E2E_GUEST_EVENT_SLUG to point the guest suite at an existing event.');
|
||||
|
||||
const joinToken = await fetchJoinToken({ slug: eventSlug!, ensureActive: true });
|
||||
|
||||
await page.goto('/event');
|
||||
await dismissConsentBanner(page);
|
||||
|
||||
// Enter event slug manually
|
||||
await page.fill('input[placeholder*="Event-Code"]', 'test-event');
|
||||
await page.click('button:has-text("Event beitreten")');
|
||||
await page.getByPlaceholder(/Event-Code|event code/i).fill(joinToken.token);
|
||||
await page.getByRole('button', { name: /Event beitreten|Join event/i }).click();
|
||||
|
||||
// Should redirect to setup if no name
|
||||
await expect(page).toHaveURL(/.*\/e\/test-event\/setup/);
|
||||
await expect(page).toHaveURL(new RegExp(`/e/${joinToken.token}/setup`));
|
||||
|
||||
// Fill name and submit
|
||||
await page.fill('input[placeholder*="Dein Name"]', 'Test User');
|
||||
await page.click('button:has-text("LET\'S GO! ✨")');
|
||||
await page.getByPlaceholder(/Dein Name|Your name/i).fill('Test User');
|
||||
await page.getByRole('button', { name: /Los gehts|Let's go/i }).click();
|
||||
|
||||
// Should navigate to home
|
||||
await expect(page).toHaveURL(/.*\/e\/test-event$/);
|
||||
await expect(page).toHaveURL(new RegExp(`/e/${joinToken.token}$`));
|
||||
|
||||
// Check localStorage
|
||||
const storedName = await page.evaluate(() => localStorage.getItem('guestName_test-event'));
|
||||
const storedName = await page.evaluate((token) => localStorage.getItem(`guestName_${token}`), joinToken.token);
|
||||
expect(storedName).toBe('Test User');
|
||||
|
||||
// Reload to test persistence - should stay on home, not redirect to setup
|
||||
await page.reload();
|
||||
await expect(page).toHaveURL(/.*\/e\/test-event$/);
|
||||
await expect(page).toHaveURL(new RegExp(`/e/${joinToken.token}$`));
|
||||
|
||||
// Re-nav to landing and join again - should go directly to home
|
||||
await page.goto('http://localhost:5173/');
|
||||
await page.fill('input[placeholder*="Event-Code"]', 'test-event');
|
||||
await page.click('button:has-text("Event beitreten")');
|
||||
await expect(page).toHaveURL(/.*\/e\/test-event$/);
|
||||
await page.goto('/event');
|
||||
await dismissConsentBanner(page);
|
||||
await page.getByPlaceholder(/Event-Code|event code/i).fill(joinToken.token);
|
||||
await page.getByRole('button', { name: /Event beitreten|Join event/i }).click();
|
||||
await expect(page).toHaveURL(new RegExp(`/e/${joinToken.token}$`));
|
||||
});
|
||||
|
||||
test('should go directly to home if name already stored', async ({ page }) => {
|
||||
// Pre-set name in localStorage
|
||||
await page.addInitScript(() => {
|
||||
localStorage.setItem('guestName_test-event', 'Existing User');
|
||||
});
|
||||
test('should go directly to home if name already stored', async ({ page, fetchJoinToken }) => {
|
||||
test.skip(!eventSlug, 'Set E2E_GUEST_EVENT_SLUG to point the guest suite at an existing event.');
|
||||
|
||||
await page.goto('http://localhost:5173/');
|
||||
const joinToken = await fetchJoinToken({ slug: eventSlug!, ensureActive: true });
|
||||
|
||||
// Pre-set name in localStorage
|
||||
await page.addInitScript((token) => {
|
||||
localStorage.setItem(`guestName_${token}`, 'Existing User');
|
||||
}, joinToken.token);
|
||||
|
||||
await page.goto('/event');
|
||||
await dismissConsentBanner(page);
|
||||
|
||||
// Join
|
||||
await page.fill('input[placeholder*="Event-Code"]', 'test-event');
|
||||
await page.click('button:has-text("Event beitreten")');
|
||||
await page.getByPlaceholder(/Event-Code|event code/i).fill(joinToken.token);
|
||||
await page.getByRole('button', { name: /Event beitreten|Join event/i }).click();
|
||||
|
||||
// Should go directly to home
|
||||
await expect(page).toHaveURL(/.*\/e\/test-event$/);
|
||||
await expect(page).toHaveURL(new RegExp(`/e/${joinToken.token}$`));
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import fs from 'node:fs';
|
||||
import path from 'node:path';
|
||||
import { expectFixture as expect, test } from '../helpers/test-fixtures';
|
||||
import { dismissConsentBanner, expectFixture as expect, test } from '../helpers/test-fixtures';
|
||||
|
||||
const guestCount = 15;
|
||||
const uploadFixturePath = ensureUploadFixture();
|
||||
@@ -14,7 +14,8 @@ test.describe('Guest PWA multi-guest journey', () => {
|
||||
test.skip(!eventSlug, 'Set E2E_GUEST_EVENT_SLUG to point the guest suite at an existing event.');
|
||||
|
||||
const joinToken = await fetchJoinToken({ slug: eventSlug!, ensureActive: true });
|
||||
const baseUrl = (process.env.E2E_GUEST_BASE_URL ?? 'http://localhost:8000').replace(/\/+$/, '');
|
||||
const baseUrl = (process.env.E2E_GUEST_BASE_URL ?? process.env.E2E_BASE_URL ?? 'https://test-y0k0.fotospiel.app')
|
||||
.replace(/\/+$/, '');
|
||||
const landingUrl = `${baseUrl}/event`;
|
||||
const eventBaseUrl = `${baseUrl}/e/${joinToken.token}`;
|
||||
|
||||
@@ -24,7 +25,8 @@ test.describe('Guest PWA multi-guest journey', () => {
|
||||
const guestName = `Gast ${index + 1}`;
|
||||
|
||||
await page.goto(landingUrl, { waitUntil: 'domcontentloaded' });
|
||||
await page.getByPlaceholder(/Event-Code eingeben|Enter event code/i).fill(joinToken.token);
|
||||
await dismissConsentBanner(page);
|
||||
await page.getByPlaceholder(/Event-Code|Event code/i).fill(joinToken.token);
|
||||
await page.getByRole('button', { name: /Event beitreten|Join event/i }).click();
|
||||
await completeProfileSetup(page, guestName, joinToken.token);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user