Production Caddy/FPM setup (build/Dockerfile, docker-compose.yml) is untouched -- this only swaps the local dev stack. - .ddev/config.yaml: PHP 8.4, Node 20, sqlite (db container omitted), libreoffice/ghostscript/poppler/sqlite3 packages, Vite port 5173 via Traefik, post-start hooks bootstrap the app on every `ddev start`. - .ddev/commands/web/dev: custom `ddev dev` runs queue + pail + vite (mirror of old `composer dev`). - start_dev.sh / stop_dev.sh: rewritten as DDEV wrappers so devs can onboard without DDEV knowledge; --keep-ddev keeps containers up. - vite.config.js: HMR over WSS to https://pp-planer.ddev.site:5173. - playwright + auth.setup.ts: baseURL switched to https://pp-planer.ddev.site. - .env.example: APP_URL and CHURCHTOOLS_REDIRECT_URI use ddev.site. - composer: drop laravel/sail (replaced by DDEV). - package.json: add explicit "name" so host/container lockfiles match (container WORKDIR is /var/www/html, npm would otherwise pick "html" as project name). - tests/fixtures/propresenter/Test.pro: inline reference fixture; tests no longer depend on a sibling host directory. - AGENTS.md: docs rewritten for DDEV workflow.
30 lines
1,020 B
TypeScript
30 lines
1,020 B
TypeScript
import { test as setup, expect } from '@playwright/test';
|
|
|
|
const authFile = 'tests/e2e/.auth/user.json';
|
|
|
|
const baseUrl = 'https://pp-planer.ddev.site';
|
|
|
|
setup('authenticate', async ({ page }) => {
|
|
// Navigate to login page to establish session cookies (incl. XSRF-TOKEN)
|
|
await page.goto(`${baseUrl}/login`);
|
|
|
|
// Get XSRF token from cookies for CSRF protection
|
|
const cookies = await page.context().cookies(baseUrl);
|
|
const xsrfCookie = cookies.find((c) => c.name === 'XSRF-TOKEN');
|
|
const xsrfToken = decodeURIComponent(xsrfCookie?.value || '');
|
|
|
|
// POST to dev-login route directly (bypasses Vue rendering dependency)
|
|
await page.request.post(`${baseUrl}/dev-login`, {
|
|
headers: {
|
|
'X-XSRF-TOKEN': xsrfToken,
|
|
},
|
|
});
|
|
|
|
// Navigate to dashboard to confirm login and load session
|
|
await page.goto(`${baseUrl}/dashboard`);
|
|
await page.waitForURL('**/dashboard');
|
|
|
|
// Save signed-in state
|
|
await page.context().storageState({ path: authFile });
|
|
});
|