End-to-End Suites
Everything under web/e2e/: the Playwright business-case suite, the smaller TypeScript specs, three
Playwright configurations, and the @mvp-acceptance slice that the (currently manual) GitHub workflow runs.
The suite header states the convention: a real running core + sidecar + Postgres + Keycloak + Redis stack,
no mocking anywhere. Setup detail lives in web/e2e/README.md.
Three Playwright configurations
| Config | Test dir | Behaviour as configured |
|---|---|---|
web/playwright.config.js (the business-case suite) | ./e2e/specs | Sequential: fullyParallel: false, workers: 1, retries: 0, test timeout 120 s, expect timeout 15 s, action/navigation timeout 15 s. Headed with a 1000 ms slowMo by default; set E2E_HEADLESS=true and E2E_SLOWMO_MS=0 for a fast run. Base URL from E2E_BASE_URL (default http://localhost:3000). Sequential on purpose: shared tenant state and the Redis-backed signup rate limiter. |
web/playwright.staging.config.ts | ./e2e | Targets https://app.staging.example.com, 1 retry, 4 workers, longer action timeout (15 s), no web server. |
The staging config hard-codes a staging hostname (app.staging.example.com in these docs). Point it at your own staging domain, confirm the target before running it, and never describe a run against it as production-verified.
Business-case suite (web/e2e/specs/, 22 files)
| Spec | Covers (per the suite README) |
|---|---|
| 00 full-platform-showcase | One slow narrated walkthrough, signup through channels, for a human to watch (npm run e2e:showcase) |
| 01 signup-and-login | Signup form, duplicate org/email rejection, Keycloak login, logout |
| 02 providers-agents-chat | Provider activation (and invalid-key rejection), agent creation, streaming chat |
| 03 mcp-registry | Register / enable / disable an MCP tool server |
| 04 knowledge-collections-and-multimodal | Collections, .md/PDF/DOCX/image/audio/video ingestion, search, async job polling |
| 05 agent-access-control | Per-agent tool and knowledge allow-lists |
| 06 admin-users-and-roles | Create teammate, assign roles, forced password change |
| 07 approvals-and-audit | HITL approve/reject, per-action policy override, audit log |
| 08 channels-whatsapp | Twilio credential activation (and rejection), default agent routing |
| 09 multi-tenant-isolation | Two tenants, zero cross-visibility, UI and direct API probe |
| 10 api-security | Webhook signature rejection, unauthenticated / under-privileged 401/403 |
| 11 workflow-designer | Canvas build/save/validate, free-tier 3-workflow cap, triggers and a synchronous run (API-level) |
| 12 quick-task | Delivery-number gate, example chips, task history |
| 13 user-created-tools | Sandboxed SpEL tool create/test/toggle/delete |
| 14 issues-portal | Admin-only gate, status tabs, failed run recorded as an issue and resolved |
| 15 agent-templates | Audience filtering; a template pre-fills the create form |
| 16 google-integration | Admin-only gate, disconnected state, OAuth callback parameters |
| 17 social-channels | Messenger/Instagram/Slack/Discord/X validation and X callback handling |
| 18 subscription-tiers | 5-agent free-tier cap and upgrade dialog; POST /api/tenant/upgrade gate |
| 19 web-admin-platform-app | Separate web-admin app: a tenant-admin without platform-admin sees “Access restricted” |
| 20 telegram-and-email-channels | Fabricated bot token / unreachable IMAP host rejected by each channel's own check |
| 21 agent-payments | Not in the README table; its header says it covers the /admin/payments mandate console up to the grant wizard review step, deliberately without completing a grant, and that it had not yet been run when written |
Also under web/e2e/ (run by the TypeScript config): axon-redesign.spec.ts, admin-panel.spec.ts,
whatsapp-integration.spec.ts, core-api.spec.ts, signup-onboarding.spec.ts, one spec for an optional external integration, and
edge-faq-eval.spec.ts, which collects the report from the /eval/edge-faq page (the on-device FAQ eval, run inside the browser).
Design conventions worth knowing
- Fresh tenant per test via
POST /api/signupinweb/e2e/fixtures.js; no shared tenant. - No real payment is completed; tenant schema is usable at signup independent of any payment step (billing is off by default).
- Direct-API specs (05, 09, 10) need
E2E_KEYCLOAK_CLIENT_SECRETfor theagentic-ai-coreclient via a test-only password-grant helper. - Opt-in specs skip rather than fail when their variable is unset:
E2E_ANTHROPIC_API_KEY,E2E_TWILIO_*,E2E_SAMPLE_PDF_PATH/DOCX/IMAGE/AUDIO/VIDEO,E2E_ADMIN_BASE_URL,E2E_PLATFORM_ADMIN_EMAIL/PASSWORD. Names only; values are never documented here. - Local core needs the
e2eSpring profile (adde2etoSPRING_PROFILES_ACTIVE, e.g.security,knowledge,mcp,e2e;core/app-config/.../application-e2e.yml), which raises the signup rate limit; otherwise the sixth signup from one IP fails with 429.
cd web
npm run e2e # headless, all specs
npm run e2e:ui # interactive UI mode
npm run e2e:report # open the last HTML report
npm run e2e:showcase # headed full-platform walkthrough
@mvp-acceptance slice and the e2e workflow
Six journeys are tagged in the test(...) title, per the README (six passing-tagged tests; workflow-designer contributes two): signup and login (01), agent-template pre-fill (15), knowledge .md upload and search (04), workflow create as draft and synchronous run (11, two tests), and the web-admin access-restricted negative path (19). A tagged FREE-tier chat journey in spec 02 is recorded as test.fixme, not passing.
- Job timeout 30 minutes; the Playwright step itself is capped at 900 seconds (15 minutes), the acceptance budget cited in the workflow.
- Triggers: the nightly cron
0 3 * * *is commented out; the workflow isworkflow_dispatchonly by default. The job's PR path is gated on afull-stacklabel if PR triggers return. - The workflow's own comment asks a repo admin to mark
mvp-acceptancea required check onmain; that branch-protection setting is not verifiable from the repository.
Current pass rates, the count of individual test cases, the date of the last full run, and whether the last full run was green are not recorded in the files read.
Evidence & references
web/e2e/README.md;web/e2e/specs/(22 files, 00 to 21);web/e2e/fixtures.js.web/playwright.config.js,web/playwright.staging.config.ts;web/package.jsonscripts..github/workflows/e2e.yml;.github/actions/boot-stack/action.yml;scripts/ci/stack-health-gate.sh.
Related: Test Strategy · Quality Gates · Docker Compose Stack