P1: path routing, prerender shells, E2E, and HelmetProvider donate fix.
Replace hash URLs with path-based routing, post-build prerender for money pages, Playwright smoke tests, and wrap the app in HelmetProvider so /donate mounts correctly. Co-authored-by: Cursor <[email protected]>
This commit is contained in:
@@ -0,0 +1,19 @@
|
||||
import { test, expect } from '@playwright/test'
|
||||
|
||||
test.describe('Assistance intake form', () => {
|
||||
test('shows validation errors when required fields empty', async ({ page }) => {
|
||||
await page.goto('/request-assistance/')
|
||||
await page.getByRole('button', { name: /submit request/i }).click()
|
||||
await expect(page.getByText(/required/i).first()).toBeVisible({ timeout: 20000 })
|
||||
})
|
||||
})
|
||||
|
||||
test.describe('Donate page', () => {
|
||||
test('shows donate UI without mock payment success', async ({ page }) => {
|
||||
page.on('dialog', () => {
|
||||
throw new Error('Unexpected alert() on donate page')
|
||||
})
|
||||
await page.goto('/donate/')
|
||||
await expect(page.getByRole('heading', { level: 1, name: 'Donate' })).toBeVisible({ timeout: 25000 })
|
||||
})
|
||||
})
|
||||
@@ -0,0 +1,37 @@
|
||||
import { test, expect } from '@playwright/test'
|
||||
|
||||
test.describe('MIM4U public navigation', () => {
|
||||
test('home loads with brand heading', async ({ page }) => {
|
||||
await page.goto('/')
|
||||
await expect(page.getByRole('navigation', { name: 'Main navigation' })).toBeVisible()
|
||||
await expect(page.getByRole('heading', { level: 1 })).toContainText(/Restoring hope/i, { timeout: 20000 })
|
||||
})
|
||||
|
||||
test('path routes work without hash', async ({ page }) => {
|
||||
await page.goto('/donate/')
|
||||
await expect(page).toHaveURL(/\/donate\/?/)
|
||||
await expect(page.getByRole('heading', { level: 1, name: 'Donate' })).toBeVisible({ timeout: 25000 })
|
||||
|
||||
await page.goto('/request-assistance/')
|
||||
await expect(page).toHaveURL(/\/request-assistance\/?/)
|
||||
await expect(page.getByRole('heading', { level: 1, name: 'Request Assistance' })).toBeVisible({
|
||||
timeout: 25000,
|
||||
})
|
||||
})
|
||||
|
||||
test('legacy hash URLs redirect to paths', async ({ page }) => {
|
||||
await page.goto('/')
|
||||
await page.evaluate(() => {
|
||||
window.location.hash = '#/donate'
|
||||
window.dispatchEvent(new HashChangeEvent('hashchange'))
|
||||
})
|
||||
await expect(page).toHaveURL(/\/donate\/?/, { timeout: 15000 })
|
||||
})
|
||||
|
||||
test('api health via nginx proxy', async ({ request }) => {
|
||||
const res = await request.get('/api/health')
|
||||
expect(res.ok()).toBeTruthy()
|
||||
const body = await res.json()
|
||||
expect(body.ok).toBe(true)
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user