Extract onboarding flow step resolution and async runner logic into a dedicated module for better separation of concerns and maintainability. Refactor context/provider to use new helpers and simplify settings modal control. Add unit tests for onboarding step resolution and async runner coalescing. Update e2e helpers and selectors for onboarding modals. Adjust environment file handling for CI and Docker contexts. - Add .dockerignore for build hygiene - Refactor onboarding context and modal logic - Add src/lib/client/onboarding-flow.ts with core onboarding helpers - Add onboarding-flow unit tests - Update Playwright config and scripts for CI env loading - Improve test selectors for claim modal - Update .gitignore to exclude all .env* except .env.example This change increases onboarding logic modularity and reliability, and improves CI/test environment handling.
97 lines
2.7 KiB
TypeScript
97 lines
2.7 KiB
TypeScript
import { defineConfig, devices } from '@playwright/test';
|
|
import 'dotenv/config';
|
|
import fs from 'node:fs';
|
|
import path from 'node:path';
|
|
import dotenv from 'dotenv';
|
|
|
|
if (process.env.CI === 'true') {
|
|
const envCiPath = path.join(process.cwd(), '.env.ci');
|
|
if (fs.existsSync(envCiPath)) {
|
|
dotenv.config({ path: envCiPath, override: true });
|
|
}
|
|
}
|
|
|
|
/**
|
|
* See https://playwright.dev/docs/test-configuration.
|
|
*/
|
|
export default defineConfig({
|
|
testDir: './tests',
|
|
tsconfig: './tsconfig.json',
|
|
timeout: 30 * 1000,
|
|
outputDir: './tests/results',
|
|
globalTeardown: './tests/global-teardown.ts',
|
|
// fullyParallel: false,
|
|
/* Fail the build on CI if you accidentally left test.only in the source code. */
|
|
forbidOnly: !!process.env.CI,
|
|
retries: process.env.CI ? 2 : 0,
|
|
// workers: '50%',
|
|
/* Reporter to use. See https://playwright.dev/docs/test-reporters */
|
|
reporter: 'html',
|
|
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
|
|
use: {
|
|
/* Base URL to use in actions like `await page.goto('/')`. */
|
|
baseURL: 'http://localhost:3003',
|
|
|
|
/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
|
|
trace: 'retain-on-first-failure',
|
|
screenshot: 'only-on-failure',
|
|
},
|
|
|
|
/* Run your local dev server before starting the tests */
|
|
webServer: {
|
|
// Disable auth rate limiting for tests to support parallel workers creating sessions
|
|
command: `pnpm build && DISABLE_AUTH_RATE_LIMIT=true pnpm start`,
|
|
url: 'http://localhost:3003',
|
|
reuseExistingServer: !process.env.CI,
|
|
timeout: 120 * 1000,
|
|
},
|
|
|
|
/* Configure projects for major browsers */
|
|
projects: [
|
|
{
|
|
name: 'chromium',
|
|
use: {
|
|
...devices['Desktop Chrome'],
|
|
extraHTTPHeaders: { 'x-openreader-test-namespace': 'chromium' },
|
|
},
|
|
},
|
|
|
|
{
|
|
name: 'firefox',
|
|
testIgnore: '**/unit/**',
|
|
use: {
|
|
...devices['Desktop Firefox'],
|
|
extraHTTPHeaders: { 'x-openreader-test-namespace': 'firefox' },
|
|
},
|
|
},
|
|
|
|
{
|
|
name: 'webkit',
|
|
testIgnore: '**/unit/**',
|
|
use: {
|
|
...devices['Desktop Safari'],
|
|
extraHTTPHeaders: { 'x-openreader-test-namespace': 'webkit' },
|
|
},
|
|
},
|
|
|
|
/* Test against mobile viewports. */
|
|
// {
|
|
// name: 'Mobile Chrome',
|
|
// use: { ...devices['Pixel 5'] },
|
|
// },
|
|
// {
|
|
// name: 'Mobile Safari',
|
|
// use: { ...devices['iPhone 12'] },
|
|
// },
|
|
|
|
/* Test against branded browsers. */
|
|
// {
|
|
// name: 'Microsoft Edge',
|
|
// use: { ...devices['Desktop Edge'], channel: 'msedge' },
|
|
// },
|
|
// {
|
|
// name: 'Google Chrome',
|
|
// use: { ...devices['Desktop Chrome'], channel: 'chrome' },
|
|
// },
|
|
],
|
|
});
|