Add Playwright E2E coverage#2230
Open
ejsmith wants to merge 16 commits into
Open
Conversation
niemyjski
approved these changes
May 11, 2026
Member
niemyjski
left a comment
There was a problem hiding this comment.
Looks good overall, not so sure about production e2e.
Contributor
There was a problem hiding this comment.
Pull request overview
This PR introduces Playwright end-to-end (E2E) coverage for the core Exceptionless onboarding and event-triage lifecycle, and wires those E2E tests into CI (plus a scheduled production validation workflow).
Changes:
- Adds Playwright E2E test suites for onboarding, event visibility, event details, and stack triage, plus shared fixtures/support helpers for API-backed setup/teardown.
- Updates Playwright configuration and ClientApp npm scripts to support local/CI/prod E2E runs and artifact outputs.
- Adds CI wiring to boot the app via Aspire and run E2E in GitHub Actions, plus a new scheduled “production-e2e” workflow.
Reviewed changes
Copilot reviewed 14 out of 15 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
| src/Exceptionless.Web/ClientApp/playwright.config.ts | Expands Playwright configuration (projects/reporters/retries/baseURL), but currently omits testDir. |
| src/Exceptionless.Web/ClientApp/package.json | Adds dedicated test:e2e:* scripts for CI/local/prod runs. |
| src/Exceptionless.Web/ClientApp/e2e/tests/onboarding.e2e.ts | Adds UI-first onboarding coverage (signup → org/project creation). |
| src/Exceptionless.Web/ClientApp/e2e/tests/event-visibility.e2e.ts | Adds E2E coverage for submitting an event and finding it in primary views. |
| src/Exceptionless.Web/ClientApp/e2e/tests/event-details.e2e.ts | Adds E2E coverage for opening the Event Details sheet and validating tabs. |
| src/Exceptionless.Web/ClientApp/e2e/tests/stack-triage.e2e.ts | Adds E2E coverage for marking a stack fixed through the UI. |
| src/Exceptionless.Web/ClientApp/e2e/support/exceptionless-journey.ts | Introduces a shared “journey” helper encapsulating UI actions and API assertions/operations. |
| src/Exceptionless.Web/ClientApp/e2e/fixtures/environment.ts | Adds E2E environment parsing (URLs/credentials/runId) for local/CI/prod execution. |
| src/Exceptionless.Web/ClientApp/e2e/fixtures/e2e-test.ts | Adds Playwright fixtures for API client + scenario provisioning and browser auth/org seeding. |
| src/Exceptionless.Web/ClientApp/e2e/fixtures/api-client.ts | Adds a lightweight API client for org/project/token setup and event submission/polling. |
| src/Exceptionless.Web/ClientApp/e2e/index.test.ts | Removes the prior single “redirect to login” Playwright test. |
| .gitignore | Ignores Playwright HTML report output directory. |
| .github/workflows/build.yaml | Adds a new CI job that starts the app via Aspire and runs Playwright E2E tests. |
| .github/workflows/production-e2e.yml | Adds a scheduled/manual workflow to run E2E tests against https://be.exceptionless.io. |
| .github/workflows/copilot-setup-steps.yml | Updates Aspire CLI installation step to a fixed version install command. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds Playwright E2E coverage for the core Exceptionless onboarding and event triage lifecycle, then wires it into CI/nightly production validation.
Summary
e2eScenariofixture for most tests: it signs in with configured/default credentials when available, creates an isolated organization/project/token through the API, seeds the browser auth + selected organization state, and deletes the project/org during cleanup.E2E Playwright Orgso test data is easy to find when investigating a run.E2E_URL; local/CI defaults useadmin@exceptionless.test/tester, while production can use anonymous signup when credentials are not configured.Production workflow configuration
The scheduled production workflow intentionally targets
https://be.exceptionless.io. This is a deliberate exception to the general local-only testing guidance because the purpose is production onboarding monitoring: validate that a real user can sign up, create an organization/project, reach the configure experience, submit an event, and see it appear. If that path breaks in production, we want to know as soon as possible.If
E2E_EMAILandE2E_PASSWORDare configured, API-arranged specs use that account for isolated org/project setup; otherwise setup falls back to generated anonymous signup data. Each run creates isolated org/project data using theE2E Playwright Orgprefix, deletes the project/org afterward, verifies they are no longer reachable through the public API, and deletes any generated E2E user. The backend delete path soft-deletes organizations first; permanent removal of soft-deleted organization data is handled by the existing cleanup job.Validation
npx playwright test e2e/tests/event-visibility.e2e.ts e2e/tests/onboarding.e2e.ts --project=chromium.npm run lintpassed.npm run checkpassed: 0 errors, 0 warnings.git diff --checkpassed.