kell_creations/kell_creations_apps/tools/run_all_tests.sh

148 lines
5.4 KiB
Bash

#!/usr/bin/env bash
# ──────────────────────────────────────────────────────────────────────
# run_all_tests.sh — Run flutter test for all testable packages and apps
#
# Usage:
# ./tools/run_all_tests.sh # Run from kell_creations_apps/
# ./tools/run_all_tests.sh --analyze # Also run dart analyze first
#
# Exit codes:
# 0 — all tests passed (and analyze clean, if requested)
# 1 — one or more failures
# ──────────────────────────────────────────────────────────────────────
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
ROOT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
# Packages/apps with tests (add new ones here as they gain tests)
TESTABLE=(
packages/core
packages/design_system
packages/feature_wordpress
apps/kell_web
)
# All packages/apps to analyze (includes those without tests)
ANALYZABLE=(
packages/core
packages/design_system
packages/feature_wordpress
packages/feature_inventory
packages/feature_orders
packages/feature_policy
apps/kell_web
apps/kell_mobile
)
RUN_ANALYZE=false
if [[ "${1:-}" == "--analyze" ]]; then
RUN_ANALYZE=true
fi
OVERALL_EXIT=0
# ── Dependency install ───────────────────────────────────────────────
echo ""
echo "══════════════════════════════════════"
echo " Installing dependencies"
echo "══════════════════════════════════════"
for pkg in "${ANALYZABLE[@]}"; do
echo "$pkg"
(cd "$ROOT_DIR/$pkg" && flutter pub get --no-example) > /dev/null 2>&1
done
# ── Analyze (optional) ──────────────────────────────────────────────
if $RUN_ANALYZE; then
echo ""
echo "══════════════════════════════════════"
echo " Running dart analyze"
echo "══════════════════════════════════════"
ANALYZE_FAILURES=()
for pkg in "${ANALYZABLE[@]}"; do
NAME=$(basename "$pkg")
printf " %-25s" "$NAME"
if (cd "$ROOT_DIR/$pkg" && dart analyze --fatal-infos) > /dev/null 2>&1; then
echo "✅ clean"
else
echo "❌ issues found"
ANALYZE_FAILURES+=("$NAME")
OVERALL_EXIT=1
fi
done
if [ ${#ANALYZE_FAILURES[@]} -gt 0 ]; then
echo ""
echo " ❌ Analyze failures: ${ANALYZE_FAILURES[*]}"
else
echo ""
echo " ✅ All packages analyze clean"
fi
fi
# ── Tests ────────────────────────────────────────────────────────────
echo ""
echo "══════════════════════════════════════"
echo " Running flutter test"
echo "══════════════════════════════════════"
declare -A RESULTS_PASS
declare -A RESULTS_FAIL
TEST_FAILURES=()
for pkg in "${TESTABLE[@]}"; do
NAME=$(basename "$pkg")
echo ""
echo " ── $NAME ──"
TMPFILE=$(mktemp)
if (cd "$ROOT_DIR/$pkg" && flutter test --reporter expanded 2>&1) | tee "$TMPFILE"; then
: # tests passed
else
TEST_FAILURES+=("$NAME")
OVERALL_EXIT=1
fi
PASS=$(grep -cE '^\s*✓' "$TMPFILE" 2>/dev/null || echo "0")
FAIL=$(grep -cE '^\s*✗' "$TMPFILE" 2>/dev/null || echo "0")
RESULTS_PASS[$NAME]=$PASS
RESULTS_FAIL[$NAME]=$FAIL
rm -f "$TMPFILE"
done
# ── Summary ──────────────────────────────────────────────────────────
echo ""
echo "╔══════════════════════════════════════╗"
echo "║ Flutter Test Results Summary ║"
echo "╠══════════════════════════════════════╣"
echo "║ Package Pass Fail ║"
echo "╠══════════════════════════════════════╣"
TOTAL_PASS=0
TOTAL_FAIL=0
for pkg in "${TESTABLE[@]}"; do
NAME=$(basename "$pkg")
P=${RESULTS_PASS[$NAME]:-0}
F=${RESULTS_FAIL[$NAME]:-0}
printf "║ %-20s %-7s %-7s ║\n" "$NAME" "$P" "$F"
TOTAL_PASS=$((TOTAL_PASS + P))
TOTAL_FAIL=$((TOTAL_FAIL + F))
done
echo "╠══════════════════════════════════════╣"
printf "║ %-20s %-7s %-7s ║\n" "TOTAL" "$TOTAL_PASS" "$TOTAL_FAIL"
echo "╚══════════════════════════════════════╝"
if [ $OVERALL_EXIT -ne 0 ]; then
echo ""
echo "❌ Failures detected. See details above."
else
echo ""
echo "✅ All $TOTAL_PASS tests passed across all packages."
fi
exit $OVERALL_EXIT