Files
chore/frontend/vue-app/playwright.config.ts
Ryan Kegel a9131242a7
All checks were successful
Chore App Build, Test, and Push Docker Images / build-and-push (push) Successful in 3m33s
Add end-to-end tests for task modification and assignment features
- Implemented tests for editing penalty points and reward costs in `penalty-edit-points.spec.ts` and `reward-edit-cost.spec.ts`.
- Created detailed plans for task activation and assignment scenarios in `task-activated.plan.md` and `task-assignment.plan.md`.
- Added comprehensive test cases for modifying tasks, including editing points for chores, kindness acts, penalties, and rewards in `task-modified.plan.md`.
- Ensured all tests are isolated and run in serial mode to maintain state integrity.
2026-03-17 22:46:27 -04:00

192 lines
6.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { defineConfig, devices } from '@playwright/test'
import { STORAGE_STATE, STORAGE_STATE_NO_PIN } from './e2e/e2e-constants'
/**
* Read environment variables from file.
* https://github.com/motdotla/dotenv
*/
// import dotenv from 'dotenv';
// import path from 'path';
// dotenv.config({ path: path.resolve(__dirname, '.env') });
/**
* See https://playwright.dev/docs/test-configuration.
*/
export default defineConfig({
testDir: './e2e',
/* Run tests in files in parallel */
fullyParallel: true,
/* Fail the build on CI if you accidentally left test.only in the source code. */
forbidOnly: !!process.env.CI,
/* Retry on CI only */
retries: process.env.CI ? 2 : 0,
/* Opt out of parallel tests on CI. */
workers: process.env.CI ? 1 : undefined,
/* 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: 'https://localhost:5173',
ignoreHTTPSErrors: true,
/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
trace: 'on-first-retry',
},
/* Configure projects for major browsers */
projects: [
{ name: 'setup', testMatch: /auth\.setup\.ts/ },
{ name: 'setup-no-pin', testMatch: /auth-no-pin\.setup\.ts/ },
{
// Bucket A: child-options tests — run before create-child so that
// deleteAllChildren() in happy-path.spec.ts cannot delete children
// that these tests are actively using.
name: 'chromium-child-options',
use: { ...devices['Desktop Chrome'], storageState: STORAGE_STATE },
dependencies: ['setup'],
testMatch: [/mode_parent\/child-options\/.+\.spec\.ts/],
},
{
// Bucket B: create-child tests — depends on chromium-child-options so it
// starts only after all child-options tests have finished and cleaned up.
// This guarantees deleteAllChildren() runs in a quiet window.
name: 'chromium-create-child',
use: { ...devices['Desktop Chrome'], storageState: STORAGE_STATE },
dependencies: ['setup', 'chromium-child-options'],
testMatch: [/mode_parent\/create-child\/.+\.spec\.ts/],
},
{
// Bucket: tests that mutate shared system-default items (chores/kindness/penalties).
// fullyParallel:false prevents files from being split across workers;
// the merged kindness-default and penalty-default files use mode:'serial'
// internally to guarantee the convert and delete tests never run in parallel.
name: 'chromium-default-tasks',
use: { ...devices['Desktop Chrome'], storageState: STORAGE_STATE },
dependencies: ['setup'],
testMatch: [/mode_parent\/tasks\/.*default\.spec\.ts/],
fullyParallel: false,
},
{
// Bucket: task and reward assignment tests for individual children.
// Serial mode within each file ensures assign → verify → unassign → cancel flow order.
name: 'chromium-task-assignment',
use: { ...devices['Desktop Chrome'], storageState: STORAGE_STATE },
dependencies: ['setup'],
testMatch: [/mode_parent\/task-assignment\/.+\.spec\.ts/],
},
{
// Bucket: task activation and reward redemption tests — each spec creates its own
// isolated child so the 4 files can safely run in parallel within this bucket.
name: 'chromium-task-activation',
use: { ...devices['Desktop Chrome'], storageState: STORAGE_STATE },
dependencies: ['setup'],
testMatch: [/mode_parent\/task-activation\/.+\.spec\.ts/],
},
{
// Bucket: task modification tests — each spec creates its own isolated child
// so the 6 files can safely run in parallel within this bucket.
name: 'chromium-task-modification',
use: { ...devices['Desktop Chrome'], storageState: STORAGE_STATE },
dependencies: ['setup'],
testMatch: [/mode_parent\/task-modification\/.+\.spec\.ts/],
},
{
name: 'chromium-tasks-rewards',
use: { ...devices['Desktop Chrome'], storageState: STORAGE_STATE },
dependencies: ['setup'],
testIgnore: [
/\/mode_child\//,
/mode_parent\/(create-child|child-options)\//,
/mode_parent\/tasks\/.*default\.spec\.ts/,
/mode_parent\/task-assignment\//,
/mode_parent\/task-activation\//,
/mode_parent\/task-modification\//,
],
},
{
name: 'chromium-no-pin',
use: { ...devices['Desktop Chrome'], storageState: STORAGE_STATE_NO_PIN },
dependencies: ['setup-no-pin'],
// never run the large task suite or the SSE crosstab tests when the parent
// pin is removed they are slow and rely on longlived connections.
testIgnore: [/\/mode_parent\//],
},
// {
// name: 'firefox',
// use: { ...devices['Desktop Firefox'] },
// },
// {
// name: 'webkit',
// use: { ...devices['Desktop Safari'] },
// },
/* 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' },
// },
],
/* Run your local dev server before starting tests */
webServer: [
{
command: 'npm run dev',
url: 'https://localhost:5173',
reuseExistingServer: !process.env.CI,
stdout: 'pipe',
stderr: 'pipe',
ignoreHTTPSErrors: true,
},
{
command:
process.platform === 'win32'
? 'echo Platform: %PROCESS_PLATFORM% && .venv\\Scripts\\python.exe -m flask run --host=0.0.0.0 --port=5000 --no-debugger --no-reload'
: 'echo Platform: $PROCESS_PLATFORM && .venv/bin/python -m flask run --host=0.0.0.0 --port=5000 --no-debugger --no-reload',
url: 'http://localhost:5000/version',
reuseExistingServer: !process.env.CI,
stdout: 'pipe',
stderr: 'pipe',
cwd: '../../backend',
env: {
FLASK_APP: 'main.py',
FLASK_DEBUG: '1',
DB_ENV: 'e2e',
DATA_ENV: 'e2e',
SECRET_KEY: 'dev-secret-key-change-in-production',
REFRESH_TOKEN_EXPIRY_DAYS: '90',
PROCESS_PLATFORM: process.platform,
},
},
],
/* Run your local dev server before starting the tests */
// webServer: {
// command: 'npm run start',
// url: 'http://localhost:3000',
// reuseExistingServer: !process.env.CI,
// },
})