Skip to content

Add full Playwright e2e test suite#3

Merged
benzwick merged 2 commits into
mainfrom
feature/e2e-tests
May 26, 2026
Merged

Add full Playwright e2e test suite#3
benzwick merged 2 commits into
mainfrom
feature/e2e-tests

Conversation

@benzwick

Copy link
Copy Markdown
Owner

Summary

  • Comprehensive end-to-end coverage exercising every user-facing feature across 3 engines (Chromium, Firefox, WebKit) × 4 viewports (phone/tablet/laptop/desktop) — 12 projects.
  • Core tier (offline, no secrets): tabs, matrix quadrants + click-to-edit, team capacity/baselines/availability/energy sliders, task scoring + due-date modes, categories & stakeholders, day/week/month/year schedule + empty state, insights branches, customize (theme/colors/fonts), JSON import/export, CSV import, responsive collapse, and persistence + legacy-schema migration.
  • Live tier (gated on T2V_TEST_USER_EMAIL / T2V_TEST_USER_PASSWORD): drives the real Talk2View chat widget — login/logout, a round-trip conversation, and model switching via the settings panel. Skips cleanly when the secrets are absent (locally and on forks).
  • Small non-visual data-testid seams added to App.jsx / CsvImportModal.jsx for icon-only buttons and anonymous range sliders.

Notes

  • Deterministic: seeds localStorage before first paint and freezes the clock + timezone so the schedule and due-date logic render identically everywhere.
  • Artifacts (named screenshot + console/pageerror log) attached for every test, pass or fail; Playwright trace/video stay failure-only unless FULL_ARTIFACTS=1.
  • Modular: per-feature spec files + @core / @live / @mobile tags + npm scripts (test:e2e:core, :live, :mobile, :chromium); run one feature with npx playwright test team.
  • CI workflow .github/workflows/e2e.yml: core tier on every PR; live tier when the secrets are configured; browser caching; reports + artifacts uploaded on success and failure.

Test plan

  • Core E2E job is green on GitHub Actions (636 passed locally across all 12 projects).
  • After adding the two repo secrets, the Live E2E job runs login + conversation + model switch.

benzwick added 2 commits May 26, 2026 12:34
The UI is styled entirely with inline styles and exposes almost no stable
selectors: icon-only buttons (member remove, color reset, schedule nav) and
dozens of anonymous range sliders share no distinguishing text or role. To let
an end-to-end suite target controls reliably — without coupling tests to copy
or fragile DOM structure — add data-testid attributes to the controls that lack
a stable accessible name.

The additions are purely non-visual: the Slider primitive grows an optional
testId prop applied to its range input, and call sites key their testids off
existing entity ids (member / category / task) so they stay unique as lists
grow and reorder. Controls that already carry an aria-label or visible text
(tabs, header buttons, add/demo/clear, schedule view switch) are left as-is.
Comprehensive e2e coverage that exercises every user-facing feature as closely
as a real user would, across three browser engines (Chromium, Firefox, WebKit)
and four viewports (phone 390, tablet 820, laptop 1366, desktop 1680) — 12
projects in total.

Two tiers:
- Core (offline, no secrets): tab navigation; matrix quadrant placement and
  click-to-edit; team add/remove, capacity, category baselines, availability
  windows, and energy/concentration tuning; task scoring (sliders move the
  quadrant) and the none/fuzzy/exact due-date picker; categories and
  stakeholders; the day/week/month/year schedule and its empty state;
  insights (burnout, pain points, narrative branches); customize
  (theme preset, light/dark, colour overrides, fonts); JSON import/export and
  CSV import; responsive tab-label collapse; and localStorage persistence plus
  legacy-schema migration.
- Live (gated on T2V_TEST_USER_EMAIL / T2V_TEST_USER_PASSWORD): drives the real
  Talk2View chat widget — login/logout, a round-trip conversation, and model
  switching via the settings panel — and skips cleanly when the secrets are
  absent (locally and on forks).

To stay deterministic the harness seeds project state into localStorage before
first paint and freezes the clock and timezone, so the date-sensitive schedule
and due-date logic render identically on every machine. A named screenshot and
a console/pageerror log are attached for every test, pass or fail; Playwright
traces and video stay failure-only unless FULL_ARTIFACTS=1 is set. Specs are
split per feature and tagged (@core / @LiVe / @mobile) so a subset can be run
while iterating, with npm scripts for the common slices.

A GitHub Actions workflow runs the core tier on every pull request and the live
tier when the credentials are configured, caching browsers and uploading
reports plus artifacts on both success and failure.
@benzwick
benzwick merged commit 30a231e into main May 26, 2026
2 of 3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant