Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
56ed8f0
feat: add Playwright e2e testing infrastructure
jeffredodd Feb 2, 2026
30b7e3b
fix: update e2e test and remove unreachable payment type check
jeffredodd Feb 4, 2026
bc42ec9
test: temporarily skip flaky payroll blockers e2e test
jeffredodd Feb 4, 2026
ee2d915
fix: replace waitForTimeout with proper Playwright wait conditions
jeffredodd Feb 4, 2026
888caf2
refactor: extract fillDate helper, cleanup skipped test, add Recovery…
jeffredodd Feb 4, 2026
5c1fce1
perf: reduce e2e test timeouts (30s→15s, 15s→10s, 10s→5s)
jeffredodd Feb 4, 2026
49862bc
refactor: remove redundant waits and explicit timeouts in e2e tests
jeffredodd Feb 4, 2026
f44997a
refactor: remove remaining redundant waits and explicit timeouts in e…
jeffredodd Feb 4, 2026
2603c51
ci: add Playwright browser caching for faster e2e tests
jeffredodd Feb 4, 2026
5000790
ci: use Playwright Docker container to skip system deps installation
jeffredodd Feb 4, 2026
92d9598
revert: remove Docker container, keep browser caching only
jeffredodd Feb 4, 2026
5d6a4e7
feat: add local and demo environment e2e testing
jeffredodd Feb 10, 2026
00fe22a
ci: mark e2e-demo job as continue-on-error
jeffredodd Feb 10, 2026
94c2f36
ci: disable e2e-demo job until runner has network access
jeffredodd Feb 10, 2026
f09fb17
ci: re-enable e2e-demo job with better diagnostics
jeffredodd Feb 10, 2026
59c892e
ci: try ubuntu-latest runner for e2e-demo job
jeffredodd Feb 10, 2026
01c69bd
ci: add full diagnostics for e2e-demo 403 response
jeffredodd Feb 10, 2026
cd87e35
refactor: address PR feedback on vite config sharing and revert unrel…
jeffredodd Feb 20, 2026
a2ccc6b
ci: switch e2e-demo job to gusto-ubuntu-default runner
jeffredodd Feb 20, 2026
d1f864b
ci: make e2e tests non-blocking during burn-in period
jeffredodd Feb 24, 2026
4e1bd0e
refactor: extract generateUniqueSSN into shared e2e helper
jeffredodd Feb 24, 2026
199ed89
chore: suppress false-positive security findings on test helper
jeffredodd Feb 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
100 changes: 100 additions & 0 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -150,3 +150,103 @@ jobs:

- name: Test with coverage
run: npm run test:ci

# E2E job: Run Playwright e2e tests (parallel with other checks)
e2e:
needs: setup
runs-on:
group: gusto-ubuntu-default
continue-on-error: true
steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'

- name: Restore node_modules cache
uses: actions/cache/restore@v4
with:
path: node_modules
key: ${{ needs.setup.outputs.cache-key }}

- name: Cache Playwright browsers
id: playwright-cache
uses: actions/cache@v4
with:
path: ~/.cache/ms-playwright
key: playwright-${{ runner.os }}-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
playwright-${{ runner.os }}-

- name: Install Playwright browsers
if: steps.playwright-cache.outputs.cache-hit != 'true'
run: npx playwright install --with-deps chromium

- name: Install Playwright system dependencies only
if: steps.playwright-cache.outputs.cache-hit == 'true'
run: npx playwright install-deps chromium

- name: Initialize MSW
run: npx msw init e2e/public --save=false

- name: Run e2e tests
run: npm run test:e2e

- name: Upload test results
if: ${{ !cancelled() }}
uses: actions/upload-artifact@v4
with:
name: playwright-report
path: playwright-report/
retention-days: 7

# E2E Demo job: Run Playwright e2e tests against the live demo environment
e2e-demo:
needs: setup
runs-on:
group: gusto-ubuntu-default
continue-on-error: true
steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'

- name: Restore node_modules cache
uses: actions/cache/restore@v4
with:
path: node_modules
key: ${{ needs.setup.outputs.cache-key }}

- name: Cache Playwright browsers
id: playwright-cache
uses: actions/cache@v4
with:
path: ~/.cache/ms-playwright
key: playwright-${{ runner.os }}-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
playwright-${{ runner.os }}-

- name: Install Playwright browsers
if: steps.playwright-cache.outputs.cache-hit != 'true'
run: npx playwright install --with-deps chromium

- name: Install Playwright system dependencies only
if: steps.playwright-cache.outputs.cache-hit == 'true'
run: npx playwright install-deps chromium

- name: Initialize MSW
run: npx msw init e2e/public --save=false

- name: Run e2e tests against demo environment
run: npm run test:e2e:demo

- name: Upload demo test results
if: ${{ !cancelled() }}
uses: actions/upload-artifact@v4
with:
name: playwright-report-demo
path: playwright-report/
retention-days: 7
11 changes: 11 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -189,3 +189,14 @@ dist

# Storybook build output
storybook-static/

# Playwright
playwright-report/
test-results/

# E2E local testing
e2e/.e2e-state.json
e2e/local.config.env

# MSW generated service worker
mockServiceWorker.js
8 changes: 1 addition & 7 deletions .storybook/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,11 @@ import { fileURLToPath } from 'node:url'
import type { StorybookConfig } from '@storybook/react-vite'
import { mergeConfig } from 'vite'
import { resolve, dirname } from 'path'
import { scssPreprocessorOptions } from '../vite.config'

const __filename = fileURLToPath(import.meta.url)
const __dirname = dirname(__filename)

const scssPreprocessorOptions = {
scss: {
api: 'modern-compiler',
additionalData: `@use "@/styles/Helpers" as *; @use '@/styles/Responsive' as *;\n`,
},
} as const

const config: StorybookConfig = {
stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'],
addons: ['@storybook/addon-a11y', '@storybook/addon-docs'],
Expand Down
Loading