Co-authored-by: Steven Enamakel <31011319+senamakel@users.noreply.github.com> Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
13 KiB
E2E Test Suite Status
Living tracking document for the OpenHuman E2E test suite. Updated whenever specs are added, fixed, or start failing.
Last updated: 2026-05-20 Total specs: 66 (11 categories) Runner: WDIO + Appium Chromium on the CEF desktop binary
Suite health overview
| Category | Specs | Known issues |
|---|---|---|
| auth | 6 | Hardcoded pauses replaced with condition waits (2026-05-20) |
| navigation | 6 | channels-smoke and insights-dashboard are shallow/smoke only |
| chat | 10 | chat-harness-wallet-flow has 6 sequential 30s waits |
| skills | 6 | skill-execution-flow is RC-7 (ghost RPCs); 4 specs are shallow stubs |
| notifications | 4 | memory-roundtrip has async indexing race |
| webhooks | 5 | webhooks-ingress-flow missing payload delivery assertion |
| providers | 8 | telegram-flow is describe.skip; gmail/slack/whatsapp miss multi-account |
| payments | 4 | rewards-progression-persistence has hardcoded pauses |
| settings | 7 | settings-ai-skills uses OR-chain assertions |
| system | 4+1L | local-model-runtime is describe.skip; voice-mode has hardcoded pauses |
| journeys | 3 | All moderate depth |
L = Linux-only spec
How to update this document
- Adding a spec: add it to the coverage matrix below and to
e2e-run-all-flows.sh - Fixing an issue: strike through the entry or remove it from Known Issues
- A spec starts failing: add it to the Known Issues section with severity + status tag
- Pre-flight check:
bash app/scripts/e2e-preflight.sh
Coverage matrix
Auth (6 specs)
| Spec | Feature covered | Coverage depth | Known issues |
|---|---|---|---|
| smoke.spec.ts | Harness bootstrap, app loads | deep | |
| login-flow.spec.ts | Deep-link auth → onboarding → home | deep | |
| auth-access-control.spec.ts | Billing dashboard handoff | moderate | Previously had hardcoded 5s/8s pauses — replaced 2026-05-20 |
| logout-relogin-onboarding.spec.ts | Logout + re-login round-trip | moderate | |
| onboarding-modes.spec.ts | Onboarding step sequence | moderate | config.toml write race on slow CI |
| runtime-picker-login.spec.ts | Core mode selection + login | moderate | Deep-link bootstrap race |
Navigation (6 specs)
| Spec | Feature covered | Coverage depth | Known issues |
|---|---|---|---|
| navigation.spec.ts | Tab bar + route rendering | deep | |
| navigation-smoothness.spec.ts | Transition timing | moderate | |
| navigation-settings-panels.spec.ts | Settings panel routing | moderate | |
| command-palette.spec.ts | Command search | moderate | |
| channels-smoke.spec.ts | Channels surface mount | shallow | No channel feature validation |
| insights-dashboard.spec.ts | Insights panel | shallow | No data validation |
Chat (10 specs)
| Spec | Feature covered | Coverage depth | Known issues |
|---|---|---|---|
| chat-harness-send-stream.spec.ts | Send → SSE stream → UI render | deep | |
| chat-harness-cancel.spec.ts | Cancel mid-stream | deep | |
| chat-harness-scroll-render.spec.ts | Scroll + render correctness | moderate | |
| chat-harness-subagent.spec.ts | Subagent invocation | moderate | |
| chat-harness-wallet-flow.spec.ts | Chat + wallet state | moderate | 6 sequential 30s waits; should use condition waits |
| chat-tool-call-flow.spec.ts | Function calling roundtrip | deep | |
| chat-multi-tool-round.spec.ts | Multi-turn tool loop | deep | |
| chat-tool-error-recovery.spec.ts | Tool error handling | deep | |
| agent-review.spec.ts | Agent review + feedback | moderate | |
| mega-flow.spec.ts | Full journey (auth/oauth/chat/logout) | deep |
Skills (6 specs)
| Spec | Feature covered | Coverage depth | Known issues |
|---|---|---|---|
| skills-registry.spec.ts | Install from URL | moderate | Post-install state not verified |
| skill-execution-flow.spec.ts | Ghost RPCs (RC-7) | skipped | [RC-7 OPEN] Runtime removed; spec calls non-existent RPC methods |
| skill-lifecycle.spec.ts | /skills page loads | shallow | No feature validation beyond page mount |
| skill-multi-round.spec.ts | /chat page loads | shallow | No multi-round skill behavior tested |
| skill-oauth.spec.ts | /skills page loads | shallow | No OAuth flow tested |
| skill-socket-reconnect.spec.ts | Home page loads | shallow | No socket reconnect behavior tested |
Notifications (4 specs)
| Spec | Feature covered | Coverage depth | Known issues |
|---|---|---|---|
| notifications.spec.ts | Ingest + list + mark-read + UI | deep | |
| memory-roundtrip.spec.ts | Doc store + cross-namespace recall | moderate | Async indexing race on slow CI |
| cron-jobs-flow.spec.ts | Job creation UI | moderate | |
| autocomplete-flow.spec.ts | Chat autocomplete | shallow |
Webhooks & Tools (5 specs)
| Spec | Feature covered | Coverage depth | Known issues |
|---|---|---|---|
| webhooks-ingress-flow.spec.ts | RPC endpoints + debug panel | moderate | No actual payload delivery assertion |
| webhooks-tunnel-flow.spec.ts | Tunneling | moderate | |
| tool-browser-flow.spec.ts | Browser tool | moderate | |
| tool-filesystem-flow.spec.ts | Filesystem security | deep | |
| tool-shell-git-flow.spec.ts | Shell + git | moderate |
Providers (8 specs)
| Spec | Feature covered | Coverage depth | Known issues |
|---|---|---|---|
| telegram-flow.spec.ts | Telegram integration | skipped | [SKIPPED OPEN] describe.skip — no replacement spec |
| gmail-flow.spec.ts | Gmail OAuth | moderate | Token refresh path untested |
| accounts-provider-modal.spec.ts | Account connection modal | moderate | |
| slack-flow.spec.ts | Slack OAuth + Redux state | moderate | Multi-account scenario untested |
| whatsapp-flow.spec.ts | WhatsApp OAuth + state | moderate | Multi-account scenario untested |
| notion-flow.spec.ts | Notion OAuth | moderate | Scope upgrade path untested |
| conversations-web-channel-flow.spec.ts | Web channel messaging | moderate | Linux skip reason is stale |
| composio-triggers-flow.spec.ts | Trigger enable/disable + UI | moderate | No trigger event delivery tested |
Payments (4 specs)
| Spec | Feature covered | Coverage depth | Known issues |
|---|---|---|---|
| card-payment-flow.spec.ts | Card payment + error handling | moderate | |
| crypto-payment-flow.spec.ts | Crypto payment | moderate | |
| rewards-unlock-flow.spec.ts | Rewards unlock | moderate | |
| rewards-progression-persistence.spec.ts | Rewards persistence | moderate | Hardcoded pauses; should use condition waits |
Settings (7 specs)
| Spec | Feature covered | Coverage depth | Known issues |
|---|---|---|---|
| settings-channels-permissions.spec.ts | Channels + privacy settings | moderate | |
| settings-data-management.spec.ts | Data management | moderate | |
| settings-dev-options.spec.ts | Developer options | moderate | |
| settings-ai-skills.spec.ts | LLM config | shallow | OR-chain assertions (passes if any one LLM panel is present) |
| settings-account-preferences.spec.ts | Account preferences | moderate | |
| settings-advanced-config.spec.ts | Advanced config | moderate | |
| settings-feature-preferences.spec.ts | Feature toggles | moderate |
System (6 specs + 1 Linux-only)
| Spec | Feature covered | Coverage depth | Known issues |
|---|---|---|---|
| local-model-runtime.spec.ts | Ollama integration | skipped | [SKIPPED OPEN] describe.skip |
| voice-mode.spec.ts | Voice I/O | shallow | Hardcoded pauses |
| screen-intelligence.spec.ts | Screen awareness | shallow | |
| audio-toolkit-flow.spec.ts | Audio toolkit | shallow | |
| tauri-commands.spec.ts | Tauri IPC surface | moderate | |
| service-connectivity-flow.spec.ts | Service discovery | moderate | Requires OPENHUMAN_SERVICE_MOCK=1 |
| linux-cef-deb-runtime.spec.ts | Linux /usr/bin path | moderate | Linux only |
User Journeys (3 specs)
| Spec | Feature covered | Coverage depth | Known issues |
|---|---|---|---|
| user-journey-full-task.spec.ts | Task completion end-to-end | moderate | |
| user-journey-settings-round-trip.spec.ts | Settings persistence round-trip | moderate | |
| chat-conversation-history.spec.ts | Conversation history | moderate |
Known Issues
| ID | Spec | Severity | Status | Description |
|---|---|---|---|---|
| RC-7 | skill-execution-flow.spec.ts | HIGH | [RC-7 OPEN] | Calls RPC methods that were removed when the QuickJS runtime was stripped. Spec will ghost-fail silently until updated or deleted. |
| SKIP-1 | telegram-flow.spec.ts | MEDIUM | [SKIPPED OPEN] | Entire suite is describe.skip. No replacement coverage. |
| SKIP-2 | local-model-runtime.spec.ts | LOW | [SKIPPED OPEN] | Entire suite is describe.skip. Ollama is optional — acceptable. |
| RACE-1 | memory-roundtrip.spec.ts | LOW | [RACE] | Async indexing race on slow CI machines. Intermittent. |
| RACE-2 | onboarding-modes.spec.ts | LOW | [RACE] | config.toml write race during core restart. Intermittent. |
| SHALLOW-1 | skill-lifecycle.spec.ts | MEDIUM | [SHALLOW] | Only asserts page mount, not any skill lifecycle behavior. |
| SHALLOW-2 | skill-multi-round.spec.ts | MEDIUM | [SHALLOW] | Only asserts /chat page loads. |
| SHALLOW-3 | skill-oauth.spec.ts | MEDIUM | [SHALLOW] | Only asserts /skills page loads. No OAuth. |
| SHALLOW-4 | skill-socket-reconnect.spec.ts | MEDIUM | [SHALLOW] | Only asserts home page loads. No socket reconnect. |
| PAUSE-1 | chat-harness-wallet-flow.spec.ts | LOW | [PAUSE] | Six sequential browser.pause(30_000) calls. Should be replaced with condition waits. |
| PAUSE-2 | rewards-progression-persistence.spec.ts | LOW | [PAUSE] | Hardcoded pauses. Should be replaced with condition waits. |
| PAUSE-3 | voice-mode.spec.ts | LOW | [PAUSE] | Hardcoded pauses in voice I/O flow. |
| STALE-1 | conversations-web-channel-flow.spec.ts | LOW | [STALE] | Linux skip condition uses a reason that no longer applies. |
| ASSERT-1 | settings-ai-skills.spec.ts | LOW | [SHALLOW] | OR-chain assertions: passes if any one LLM provider panel is present. |
Mock API behavior flags
These flags are set via setMockBehavior(key, value) from mock-server.ts and
control the shared mock backend at http://127.0.0.1:18473.
| Flag | Type | Description |
|---|---|---|
seed |
string | Fuzzy randomization seed for mock data generation |
forceError503 |
'true' / 'false' |
Force HTTP 503 on all non-admin endpoints |
llmStreamScript |
JSON string | Custom LLM response delta sequence. Array of {delta: string} objects |
composioConnections |
JSON string | Override Composio connections list (e.g. '[]' for empty) |
composioAvailableTriggers |
JSON string | Override available triggers returned by the API |
composioActiveTriggers |
JSON string | Override active triggers state |
purchaseError |
string | Trigger payment failure (value becomes the error message) |
plan |
'FREE' / 'BASIC' / 'PRO' |
Override the billing plan returned by /settings |
planActive |
'true' / 'false' |
Override whether the plan is active |
planExpiry |
ISO date string | Override the plan expiry date |
session |
'revoked' / 'active' |
Force 401 on auth endpoints when set to 'revoked' |
Reset all flags to defaults: resetMockBehavior().
How to run
# Full suite (all 66 specs)
bash app/scripts/e2e-run-all-flows.sh
# Single suite category
bash app/scripts/e2e-run-all-flows.sh --suite chat
# Stop after first failure
bash app/scripts/e2e-run-all-flows.sh --bail
# Single spec (fastest iteration)
bash app/scripts/e2e-run-session.sh test/e2e/specs/smoke.spec.ts smoke
# Pre-flight check only
bash app/scripts/e2e-preflight.sh
# With Appium/WDIO debug output
WDIO_LOG_LEVEL=debug bash app/scripts/e2e-run-all-flows.sh --suite auth
# Skip preflight (e.g. in CI where it ran as a separate step)
bash app/scripts/e2e-run-all-flows.sh --skip-preflight
# Use the debug runner (summary output + log tee)
pnpm debug e2e test/e2e/specs/smoke.spec.ts
pnpm debug e2e test/e2e/specs/notifications.spec.ts notifications --verbose
How to add a new spec
-
Create the spec file in
app/test/e2e/specs/YOUR-SPEC.spec.ts. -
Scaffold the harness:
import { resetApp } from '../helpers/reset-app'; import { startMockServer, stopMockServer } from '../mock-server'; describe('Your feature', () => { before(async () => { await startMockServer(); await resetApp('e2e-your-spec'); }); after(async () => { await stopMockServer(); }); it('does the thing', async () => { /* ... */ }); }); -
Register in the orchestrator — add a
run(...)call in the correct suite section ofapp/scripts/e2e-run-all-flows.sh. -
Add to this tracking doc — add a row to the coverage matrix table for the appropriate category with an honest coverage depth.
-
Add any new RPC methods to
REQUIRED_RPC_METHODSinapp/test/e2e/helpers/rpc-preflight.tsif the spec calls RPC methods not already listed there. -
Run pre-flight before executing:
bash app/scripts/e2e-preflight.sh.