-
Notifications
You must be signed in to change notification settings - Fork 2.4k
feat(e2e): complete E2E v2 suite — 66 specs, orchestrator, bug fixes #2353
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
57 commits
Select commit
Hold shift + click to select a range
118a0db
feat(e2e): chat tool-call lifecycle specs (T1, T2, T3)
YellowSnnowmann c946207
feat(e2e): user journey specs — full task + settings round-trip + con…
YellowSnnowmann 87805b3
feat(e2e): navigation smoothness + settings panels specs
YellowSnnowmann a20a8b6
feat(e2e): register new specs in e2e-run-all-flows.sh
YellowSnnowmann d53ac6d
fix(core): test_reset clears onboarding_completed flag and fixes edge…
YellowSnnowmann 8faa372
fix(e2e): restore onboarding_completed=true after test_reset to unblo…
YellowSnnowmann 2f44021
feat(app): add data-testid selectors for accounts E2E specs; fix thre…
YellowSnnowmann 5e62151
feat(e2e): expand shared-flows helpers and align mock-api with curren…
YellowSnnowmann 3da9b1b
feat(e2e): rewrite orchestrator with full 66-spec suite, --suite/--ba…
YellowSnnowmann d7ab5c6
fix(e2e): correct stale settings routes and removed element references
YellowSnnowmann 62c1544
fix(e2e): harden auth timing, waitUntil polling, and spec-level reset…
YellowSnnowmann c7ae164
fix(e2e): use native OS keyboard events in typeIntoComposer to update…
YellowSnnowmann aa68eac
fix(e2e): use WebDriver Actions API for command palette key dispatch …
YellowSnnowmann baa63fe
ci(e2e): add artifact upload and job summary steps to reusable E2E wo…
YellowSnnowmann 5450f4d
feat(e2e): new specs and pre-flight tooling for accounts provider picker
YellowSnnowmann ccbd6e0
fix(e2e): gate chat sends on socketStatus=connected + fix clickSend f…
YellowSnnowmann bbd586d
fix(socket): align selectSocketUserId with socketService userId key
YellowSnnowmann 613bcfa
refactor(e2e): clean up imports and improve code formatting across mu…
YellowSnnowmann 0566e34
fix(e2e): remove unused variables flagged by lint
YellowSnnowmann 5bdda6f
refactor(e2e): remove unnecessary whitespace in chat-harness and comp…
YellowSnnowmann c84825d
fix(test): align socket selector tests with auth.userId refactor and …
YellowSnnowmann 944dde3
Update Product Hunt badges in README
senamakel fdff9ff
refactor(e2e): overhaul E2E specs with improved helpers, shared flows…
YellowSnnowmann 1a49ab6
Merge remote-tracking branch 'upstream/main' into fix/e2e-v2
YellowSnnowmann 74c90ef
fix(e2e): remove unreachable sidebar fallback after merge conflict re…
YellowSnnowmann e5ab4c2
feat(wallet): register wallet Tool trait implementations for crypto s…
YellowSnnowmann 80e0412
fix(agent): emit SubagentSpawned to per-request progress sink in disp…
YellowSnnowmann 1184b44
fix(auth): poll for currentUser before navigating after deep-link login
YellowSnnowmann f53b9be
fix(e2e): improve shared-flows helpers for reliability
YellowSnnowmann 7b715a3
fix(e2e): migrate notifications, card-payment, whatsapp specs to rese…
YellowSnnowmann 2f51e85
fix(e2e): increase Send button timeout and add diagnostics in chat-ha…
YellowSnnowmann 35ee961
fix(e2e): rewrite conversations-web-channel-flow for agent pipeline
YellowSnnowmann b59b339
fix(e2e): add explicit cron job seeding and text-based button clicks
YellowSnnowmann dee0943
fix(e2e): make wallet quote assertion graceful and reduce LLM hit thr…
YellowSnnowmann 5ddf9fa
fix(e2e): fix logout-relogin timeout and use bypass auth for re-login
YellowSnnowmann b3b658d
fix(e2e): add layout check and retry for Custom card click in onboard…
YellowSnnowmann 4c025df
fix(e2e): add timeout and home fallback to navigation spec
YellowSnnowmann 4fa8e80
style(wallet): alphabetize mod declarations and pub use exports
YellowSnnowmann 36de8a5
style(e2e): apply prettier formatting to logout-relogin spec
YellowSnnowmann 80189ec
style(e2e): clean up import statements and format code in test specs
YellowSnnowmann 3c6157b
fix(e2e): remove unused functions in cron-jobs-flow spec
YellowSnnowmann e1ad4fb
Merge remote-tracking branch 'upstream/main' into fix/e2e-v2
YellowSnnowmann 09a8b94
fix(i18n): add missing German translations for MCP server and subcons…
YellowSnnowmann 2b25033
fix: address CodeRabbit review feedback
YellowSnnowmann 36a57ba
fix(wallet): use Debug format for WalletChain in prepare_transfer log…
YellowSnnowmann 26ee16c
fix: additional CodeRabbit feedback — cd guard, preflight check, noti…
YellowSnnowmann 65d0bea
Merge branch 'main' into fix/e2e-v2
YellowSnnowmann e51c1d0
fix(wallet): redact address and amount in prepare_transfer debug logs
YellowSnnowmann 9ed5792
fix(i18n): remove duplicate MCP server keys in German locale chunk
YellowSnnowmann 9c905ed
fix(e2e): correct /settings/intelligence route to /intelligence
YellowSnnowmann 64619d4
fix(e2e): fix agent chat draft persistence and restore conversations …
YellowSnnowmann df0f507
fix(socket): handle stale disconnected socket instances to ensure fre…
YellowSnnowmann de320e3
test(socket): add unit test for stale disconnected socket cleanup
YellowSnnowmann 69e4afa
fix(e2e): enhance chat conversation history and cron jobs flow tests
YellowSnnowmann cb0acc6
Merge branch 'main' of github.com:senamakel/openhuman
senamakel bf243a2
Merge branch 'main' into pr/2353
senamakel 361806f
fix(e2e): scope socket/auth readiness to active user, extend stream t…
senamakel File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
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
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,195 @@ | ||
| #!/usr/bin/env bash | ||
| # | ||
| # e2e-preflight.sh — Pre-flight environment validation for the E2E test suite. | ||
| # | ||
| # Checks: | ||
| # 1. The E2E app binary/bundle exists for the current platform. | ||
| # 2. Node.js and pnpm are available. | ||
| # 3. Appium is installed (and the chromium driver is registered). | ||
| # 4. Ports 19222, 4723, and 18473 are not blocked by stale processes. | ||
| # | ||
| # Exits 0 if all hard requirements are met. | ||
| # Exits 1 if any hard requirement is missing. | ||
| # Warnings are printed for soft issues (occupied ports, missing chromium driver) | ||
| # but do not fail the script. | ||
| # | ||
| set -uo pipefail | ||
|
|
||
| # --------------------------------------------------------------------------- | ||
| # Color helpers — only when stdout is a terminal. | ||
| # --------------------------------------------------------------------------- | ||
| if [ -t 1 ]; then | ||
| RED='\033[0;31m' | ||
| YELLOW='\033[1;33m' | ||
| GREEN='\033[0;32m' | ||
| BOLD='\033[1m' | ||
| RESET='\033[0m' | ||
| else | ||
| RED='' YELLOW='' GREEN='' BOLD='' RESET='' | ||
| fi | ||
|
|
||
| info() { printf "%b[preflight]%b %s\n" "$BOLD" "$RESET" "$*"; } | ||
| ok() { printf "%b[preflight] ✓%b %s\n" "$GREEN" "$RESET" "$*"; } | ||
| warn() { printf "%b[preflight] ⚠%b %s\n" "$YELLOW" "$RESET" "$*" >&2; } | ||
| fail() { printf "%b[preflight] ✗%b %s\n" "$RED" "$RESET" "$*" >&2; } | ||
|
|
||
| ERRORS=0 | ||
| _fail() { fail "$*"; (( ERRORS++ )) || true; } | ||
|
|
||
| APP_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" | ||
|
|
||
| info "Starting E2E pre-flight checks..." | ||
| echo "" | ||
|
|
||
| # --------------------------------------------------------------------------- | ||
| # 1. App binary / bundle | ||
| # --------------------------------------------------------------------------- | ||
| info "Checking E2E app bundle..." | ||
|
|
||
| PLATFORM="$(uname -s)" | ||
| BINARY_FOUND=0 | ||
| BINARY_PATH="" | ||
|
|
||
| case "$PLATFORM" in | ||
| Darwin) | ||
| MACOS_BUNDLE="$APP_DIR/src-tauri/target/debug/bundle/macos/OpenHuman.app" | ||
| if [[ -d "$MACOS_BUNDLE" ]]; then | ||
| BINARY_FOUND=1 | ||
| BINARY_PATH="$MACOS_BUNDLE" | ||
| fi | ||
| ;; | ||
| Linux) | ||
| LINUX_BIN="$APP_DIR/src-tauri/target/debug/openhuman" | ||
| LINUX_DEB="$APP_DIR/src-tauri/target/debug/bundle/deb" | ||
| if [[ -f "$LINUX_BIN" ]]; then | ||
| BINARY_FOUND=1 | ||
| BINARY_PATH="$LINUX_BIN" | ||
| elif [[ -d "$LINUX_DEB" ]]; then | ||
| BINARY_FOUND=1 | ||
| BINARY_PATH="$LINUX_DEB" | ||
| fi | ||
| ;; | ||
| MINGW*|MSYS*|CYGWIN*|Windows*) | ||
| WIN_BIN="$APP_DIR/src-tauri/target/debug/openhuman.exe" | ||
| if [[ -f "$WIN_BIN" ]]; then | ||
| BINARY_FOUND=1 | ||
| BINARY_PATH="$WIN_BIN" | ||
| fi | ||
| ;; | ||
| *) | ||
| warn "Unknown platform '$PLATFORM' — cannot verify app bundle path." | ||
| BINARY_FOUND=1 # don't block on unknown platforms | ||
| ;; | ||
| esac | ||
|
|
||
| if [[ $BINARY_FOUND -eq 1 ]]; then | ||
| ok "App bundle found: $BINARY_PATH" | ||
| else | ||
| _fail "E2E build not found for $PLATFORM." | ||
| case "$PLATFORM" in | ||
| Darwin) | ||
| fail " Expected: $MACOS_BUNDLE" | ||
| ;; | ||
| Linux) | ||
| fail " Expected: $LINUX_BIN" | ||
| ;; | ||
| MINGW*|MSYS*|CYGWIN*) | ||
| fail " Expected: $WIN_BIN" | ||
| ;; | ||
| esac | ||
| fail " Run: pnpm --filter openhuman-app test:e2e:build" | ||
| fi | ||
|
|
||
| echo "" | ||
|
|
||
| # --------------------------------------------------------------------------- | ||
| # 2. Node.js + pnpm | ||
| # --------------------------------------------------------------------------- | ||
| info "Checking Node.js and pnpm..." | ||
|
|
||
| if command -v node >/dev/null 2>&1; then | ||
| NODE_VERSION="$(node --version 2>/dev/null || echo 'unknown')" | ||
| ok "node found: $NODE_VERSION" | ||
| else | ||
| _fail "node not found. Node.js is required to run WDIO." | ||
| fi | ||
|
|
||
| if command -v pnpm >/dev/null 2>&1; then | ||
| PNPM_VERSION="$(pnpm --version 2>/dev/null || echo 'unknown')" | ||
| ok "pnpm found: $PNPM_VERSION" | ||
| else | ||
| _fail "pnpm not found. Install via: npm install -g pnpm" | ||
| fi | ||
|
|
||
| echo "" | ||
|
|
||
| # --------------------------------------------------------------------------- | ||
| # 3. Appium + chromium driver | ||
| # --------------------------------------------------------------------------- | ||
| info "Checking Appium..." | ||
|
|
||
| if command -v appium >/dev/null 2>&1; then | ||
| APPIUM_VERSION="$(appium --version 2>/dev/null || echo 'unknown')" | ||
| ok "appium found: $APPIUM_VERSION" | ||
|
|
||
| # Check for the chromium driver — warn only (e2e-run-session.sh handles this) | ||
| CHROMIUM_INSTALLED=0 | ||
| if appium driver list --installed 2>&1 | grep -qi "chromium"; then | ||
| CHROMIUM_INSTALLED=1 | ||
| ok "Appium chromium driver is installed" | ||
| fi | ||
| if [[ $CHROMIUM_INSTALLED -eq 0 ]]; then | ||
| warn "Appium chromium driver not found in 'appium driver list --installed'." | ||
| warn " To install: appium driver install --source=npm appium-chromium-driver" | ||
| warn " (e2e-run-session.sh will attempt idempotent install at runtime.)" | ||
| fi | ||
| else | ||
| _fail "Appium not found." | ||
| fail " Install: npm install -g appium@3" | ||
| fail " Then: appium driver install --source=npm appium-chromium-driver" | ||
| fi | ||
|
|
||
| echo "" | ||
|
|
||
| # --------------------------------------------------------------------------- | ||
| # 4. Port availability (warnings only — stale processes are soft blockers) | ||
| # --------------------------------------------------------------------------- | ||
| info "Checking port availability..." | ||
|
|
||
| _check_port() { | ||
| local port="$1" | ||
| local label="$2" | ||
| local pid="" | ||
| # Try lsof first (macOS/Linux), fall back to ss (Linux only) | ||
| if command -v lsof >/dev/null 2>&1; then | ||
| pid=$(lsof -ti tcp:"$port" 2>/dev/null | head -1 || true) | ||
| elif command -v ss >/dev/null 2>&1; then | ||
| pid=$(ss -tlnp "sport = :$port" 2>/dev/null | awk 'NR>1 {match($NF,/pid=([0-9]+)/,a); print a[1]}' | head -1 || true) | ||
| fi | ||
|
|
||
| if [[ -n "$pid" ]]; then | ||
| warn "Port $port ($label) is occupied by PID $pid." | ||
| warn " If this is a stale process from a prior run, kill it:" | ||
| warn " kill $pid" | ||
| else | ||
| ok "Port $port ($label) is free" | ||
| fi | ||
| } | ||
|
|
||
| _check_port 19222 "CEF CDP" | ||
| _check_port 4723 "Appium" | ||
| _check_port 18473 "mock backend (can be pre-running — OK if deliberate)" | ||
|
|
||
| echo "" | ||
|
|
||
| # --------------------------------------------------------------------------- | ||
| # Summary | ||
| # --------------------------------------------------------------------------- | ||
| if [[ $ERRORS -gt 0 ]]; then | ||
| printf "%b[preflight] PRE-FLIGHT FAILED%b — %d error(s) above must be resolved before running E2E tests.\n" \ | ||
| "$RED" "$RESET" "$ERRORS" >&2 | ||
| exit 1 | ||
| fi | ||
|
|
||
| printf "%b[preflight] Pre-flight passed%b — environment looks good.\n" "$GREEN" "$RESET" | ||
| exit 0 |
Oops, something went wrong.
Oops, something went wrong.
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.
Uh oh!
There was an error while loading. Please reload this page.