agent-orchestrator/v2/scripts/test-all.sh
Hibryda 643be87cb4 feat: add unified test runner and testing gate rule
Create v2/scripts/test-all.sh (vitest + cargo + optional E2E via --e2e).
Add npm scripts: test:all, test:all:e2e, test:cargo.
Add .claude/rules/20-testing-gate.md requiring full suite after major changes.
2026-03-12 11:10:50 +01:00

114 lines
2.8 KiB
Bash
Executable file

#!/usr/bin/env bash
# BTerminal — unified test runner
# Usage: ./scripts/test-all.sh [--e2e] [--verbose]
#
# Runs vitest (frontend) + cargo test (backend) by default.
# Pass --e2e to also run WebDriverIO E2E tests (requires built binary).
set -euo pipefail
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
CYAN='\033[0;36m'
BOLD='\033[1m'
RESET='\033[0m'
V2_DIR="$(cd "$(dirname "$0")/.." && pwd)"
RUN_E2E=false
VERBOSE=false
FAILED=()
for arg in "$@"; do
case "$arg" in
--e2e) RUN_E2E=true ;;
--verbose|-v) VERBOSE=true ;;
--help|-h)
echo "Usage: $0 [--e2e] [--verbose]"
echo " --e2e Also run WebDriverIO E2E tests (requires built binary)"
echo " --verbose Show full test output instead of summary"
exit 0
;;
*) echo "Unknown option: $arg"; exit 1 ;;
esac
done
step() {
echo -e "\n${CYAN}${BOLD}━━━ $1 ━━━${RESET}"
}
pass() {
echo -e "${GREEN}$1${RESET}"
}
fail() {
echo -e "${RED}$1${RESET}"
FAILED+=("$1")
}
# --- Vitest (frontend) ---
step "Vitest (frontend unit tests)"
if $VERBOSE; then
(cd "$V2_DIR" && npm run test) && pass "Vitest" || fail "Vitest"
else
if OUTPUT=$(cd "$V2_DIR" && npm run test 2>&1); then
SUMMARY=$(echo "$OUTPUT" | grep -E "Tests|Test Files" | tail -2)
echo "$SUMMARY"
pass "Vitest"
else
echo "$OUTPUT" | tail -20
fail "Vitest"
fi
fi
# --- Cargo test (backend) ---
step "Cargo test (Rust backend)"
if $VERBOSE; then
(cd "$V2_DIR/src-tauri" && cargo test) && pass "Cargo test" || fail "Cargo test"
else
if OUTPUT=$(cd "$V2_DIR/src-tauri" && cargo test 2>&1); then
SUMMARY=$(echo "$OUTPUT" | grep -E "test result:|running" | head -5)
echo "$SUMMARY"
pass "Cargo test"
else
echo "$OUTPUT" | tail -20
fail "Cargo test"
fi
fi
# --- E2E (WebDriverIO) ---
if $RUN_E2E; then
step "E2E tests (WebDriverIO + tauri-driver)"
# Check for built binary
BINARY=$(find "$V2_DIR/src-tauri/target" -name "bterminal*" -type f -executable -path "*/release/*" 2>/dev/null | head -1)
if [ -z "$BINARY" ]; then
echo -e "${YELLOW}⚠ No release binary found. Run 'npm run tauri build' first.${RESET}"
fail "E2E (no binary)"
else
if $VERBOSE; then
(cd "$V2_DIR" && npm run test:e2e) && pass "E2E" || fail "E2E"
else
if OUTPUT=$(cd "$V2_DIR" && npm run test:e2e 2>&1); then
SUMMARY=$(echo "$OUTPUT" | grep -E "passing|failing|skipped" | tail -3)
echo "$SUMMARY"
pass "E2E"
else
echo "$OUTPUT" | tail -30
fail "E2E"
fi
fi
fi
else
echo -e "\n${YELLOW}Skipping E2E tests (pass --e2e to include)${RESET}"
fi
# --- Summary ---
echo -e "\n${BOLD}━━━ Summary ━━━${RESET}"
if [ ${#FAILED[@]} -eq 0 ]; then
echo -e "${GREEN}${BOLD}All test suites passed.${RESET}"
exit 0
else
echo -e "${RED}${BOLD}Failed suites: ${FAILED[*]}${RESET}"
exit 1
fi