Files
dss/.dss/run_all_tests.sh
Digital Production Factory 276ed71f31 Initial commit: Clean DSS implementation
Migrated from design-system-swarm with fresh git history.
Old project history preserved in /home/overbits/apps/design-system-swarm

Core components:
- MCP Server (Python FastAPI with mcp 1.23.1)
- Claude Plugin (agents, commands, skills, strategies, hooks, core)
- DSS Backend (dss-mvp1 - token translation, Figma sync)
- Admin UI (Node.js/React)
- Server (Node.js/Express)
- Storybook integration (dss-mvp1/.storybook)

Self-contained configuration:
- All paths relative or use DSS_BASE_PATH=/home/overbits/dss
- PYTHONPATH configured for dss-mvp1 and dss-claude-plugin
- .env file with all configuration
- Claude plugin uses ${CLAUDE_PLUGIN_ROOT} for portability

Migration completed: $(date)
🤖 Clean migration with full functionality preserved
2025-12-09 18:45:48 -03:00

382 lines
16 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
#
# DSS Admin UI - Complete Test Automation Suite
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
#
# Orchestrates Phase 1, Phase 2, and Phase 3 testing
# Framework: Pytest-Playwright
# Purpose: Complete validation of all 51 components and 79+ API endpoints
#
# Generated: 2025-12-08
# Author: Gemini 3 Pro Expert Analysis
# Status: Ready for Implementation
#
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Configuration
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
DSS_DIR="$PROJECT_ROOT/.dss"
ADMIN_UI_DIR="$PROJECT_ROOT/admin-ui"
LOG_DIR="$DSS_DIR/test-logs"
REPORT_FILE="$LOG_DIR/test-report-$(date +%Y%m%d-%H%M%S).txt"
# Ensure log directory exists
mkdir -p "$LOG_DIR"
# ────────────────────────────────────────────────────────────────────────────
# Helper Functions
# ────────────────────────────────────────────────────────────────────────────
print_header() {
echo -e "\n${BLUE}╔═══════════════════════════════════════════════════════════════════════════════╗${NC}"
echo -e "${BLUE}${NC} $1"
echo -e "${BLUE}╚═══════════════════════════════════════════════════════════════════════════════╝${NC}\n"
}
print_section() {
echo -e "\n${YELLOW}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo -e "${YELLOW}$1${NC}"
echo -e "${YELLOW}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}\n"
}
print_success() {
echo -e "${GREEN}$1${NC}"
}
print_error() {
echo -e "${RED}$1${NC}"
}
print_info() {
echo -e "${BLUE} $1${NC}"
}
check_command() {
if ! command -v "$1" &> /dev/null; then
print_error "Required command not found: $1"
exit 1
fi
}
wait_for_service() {
local url=$1
local max_attempts=30
local attempt=0
print_info "Waiting for service: $url"
while [ $attempt -lt $max_attempts ]; do
if curl -s "$url" > /dev/null 2>&1; then
print_success "Service available: $url"
return 0
fi
attempt=$((attempt + 1))
echo -n "."
sleep 1
done
print_error "Service timeout: $url"
return 1
}
# ────────────────────────────────────────────────────────────────────────────
# Pre-flight Checks
# ────────────────────────────────────────────────────────────────────────────
print_header "DSS Admin UI - Complete Test Automation Suite"
echo "Checking prerequisites..."
# Check Python
check_command "python3"
print_success "Python 3 found"
# Check pytest
if ! python3 -m pytest --version &> /dev/null; then
print_error "pytest not installed"
echo "Installing: pip3 install pytest pytest-playwright pytest-asyncio"
pip3 install pytest pytest-playwright pytest-asyncio httpx
fi
print_success "pytest available"
# Check Playwright
if ! python3 -c "from playwright.sync_api import sync_playwright" &> /dev/null; then
print_error "Playwright not installed"
echo "Installing: pip3 install playwright"
pip3 install playwright
python3 -m playwright install
fi
print_success "Playwright available"
# Check Node/npm
check_command "node"
print_success "Node.js found"
check_command "npm"
print_success "npm found"
print_success "All prerequisites met\n"
# ────────────────────────────────────────────────────────────────────────────
# Environment Setup
# ────────────────────────────────────────────────────────────────────────────
print_section "PHASE 0: Environment Setup"
print_info "Project directory: $PROJECT_ROOT"
print_info "Admin UI directory: $ADMIN_UI_DIR"
print_info "Test directory: $DSS_DIR"
print_info "Log directory: $LOG_DIR"
# Check if services are already running
DEV_SERVER_RUNNING=false
API_SERVER_RUNNING=false
if curl -s http://localhost:5173 > /dev/null 2>&1; then
print_success "Dev server (Vite) already running on :5173"
DEV_SERVER_RUNNING=true
else
print_info "Starting Vite dev server..."
cd "$ADMIN_UI_DIR"
npm run dev > "$LOG_DIR/vite.log" 2>&1 &
VITE_PID=$!
print_info "Vite PID: $VITE_PID"
if wait_for_service "http://localhost:5173"; then
DEV_SERVER_RUNNING=true
else
print_error "Failed to start Vite dev server"
exit 1
fi
cd - > /dev/null
fi
if curl -s http://localhost:8002/api/system/status > /dev/null 2>&1; then
print_success "API server (FastAPI) already running on :8002"
API_SERVER_RUNNING=true
else
print_info "Note: FastAPI backend not running on :8002"
print_info "Some API tests may be skipped"
fi
# ────────────────────────────────────────────────────────────────────────────
# Phase 1: Smoke Test (Component Loading)
# ────────────────────────────────────────────────────────────────────────────
print_section "PHASE 1: Smoke Test - Component Loading"
print_info "Testing all 51 components for load success and console errors"
print_info "Timeout per component: 3000ms"
print_info "Expected result: 51/51 components load without critical errors"
PHASE1_LOG="$LOG_DIR/phase1-smoke-test.log"
PHASE1_REPORT="$LOG_DIR/phase1-report.txt"
if python3 -m pytest "$DSS_DIR/test_smoke_phase1.py" \
-v \
--tb=short \
--html="$LOG_DIR/phase1-report.html" \
--self-contained-html \
2>&1 | tee "$PHASE1_LOG"; then
print_success "Phase 1 Smoke Test: PASSED"
PHASE1_RESULT="PASSED"
else
print_error "Phase 1 Smoke Test: FAILED"
PHASE1_RESULT="FAILED"
fi
# ────────────────────────────────────────────────────────────────────────────
# Phase 2: Category-Based Testing
# ────────────────────────────────────────────────────────────────────────────
print_section "PHASE 2: Category-Based Testing"
print_info "Testing component categories with specific interactions:"
print_info " - Tools: Input → Execute → Result validation"
print_info " - Metrics: Chart rendering, data validation"
print_info " - Layout: Navigation, sidebar, panels"
print_info " - Admin: CRUD operations, permissions"
print_info " - UI Elements: Component behavior"
PHASE2_LOG="$LOG_DIR/phase2-category-test.log"
PHASE2_REPORT="$LOG_DIR/phase2-report.txt"
if python3 -m pytest "$DSS_DIR/test_category_phase2.py" \
-v \
--tb=short \
--html="$LOG_DIR/phase2-report.html" \
--self-contained-html \
2>&1 | tee "$PHASE2_LOG"; then
print_success "Phase 2 Category Testing: PASSED"
PHASE2_RESULT="PASSED"
else
print_error "Phase 2 Category Testing: FAILED"
PHASE2_RESULT="FAILED"
fi
# ────────────────────────────────────────────────────────────────────────────
# Phase 3: API Integration Testing
# ────────────────────────────────────────────────────────────────────────────
print_section "PHASE 3: API Integration Testing"
if [ "$API_SERVER_RUNNING" = true ]; then
print_info "Testing all 79+ API endpoints:"
print_info " - Authentication endpoints"
print_info " - Project management"
print_info " - Browser logging"
print_info " - Figma integration"
print_info " - MCP tools"
print_info " - System & admin"
print_info " - Audit & discovery"
PHASE3_LOG="$LOG_DIR/phase3-api-test.log"
PHASE3_REPORT="$LOG_DIR/phase3-report.txt"
if python3 -m pytest "$DSS_DIR/test_api_phase3.py" \
-v \
--tb=short \
--html="$LOG_DIR/phase3-report.html" \
--self-contained-html \
2>&1 | tee "$PHASE3_LOG"; then
print_success "Phase 3 API Testing: PASSED"
PHASE3_RESULT="PASSED"
else
print_error "Phase 3 API Testing: FAILED"
PHASE3_RESULT="FAILED"
fi
else
print_error "FastAPI backend not running - skipping Phase 3"
print_info "To run Phase 3: Start FastAPI backend on localhost:8002"
PHASE3_RESULT="SKIPPED"
fi
# ────────────────────────────────────────────────────────────────────────────
# Generate Final Report
# ────────────────────────────────────────────────────────────────────────────
print_section "TEST EXECUTION COMPLETE"
cat > "$REPORT_FILE" << EOF
╔═══════════════════════════════════════════════════════════════════════════════╗
║ ║
║ DSS Admin UI - Complete Test Automation Report ║
║ ║
╚═══════════════════════════════════════════════════════════════════════════════╝
Execution Date: $(date)
Project: Design System Admin UI
Framework: Pytest-Playwright (Python)
═══════════════════════════════════════════════════════════════════════════════
PHASE 1: SMOKE TEST (Component Loading)
Status: $PHASE1_RESULT
Purpose: Verify all 51 components load without critical errors
Coverage: Component loading, DOM rendering, console error detection
Log: $PHASE1_LOG
PHASE 2: CATEGORY-BASED TESTING
Status: $PHASE2_RESULT
Purpose: Validate component categories with specific interactions
Coverage: Tools, Metrics, Layout, Admin, UI Elements
Log: $PHASE2_LOG
PHASE 3: API INTEGRATION TESTING
Status: $PHASE3_RESULT
Purpose: Verify all 79+ API endpoints are functional
Coverage: Authentication, Projects, Logs, Figma, MCP, Admin, Audit
Log: $PHASE3_LOG
═══════════════════════════════════════════════════════════════════════════════
SUMMARY:
Phase 1 (Components): $PHASE1_RESULT
Phase 2 (Categories): $PHASE2_RESULT
Phase 3 (API): $PHASE3_RESULT
Test Reports:
Phase 1: $LOG_DIR/phase1-report.html
Phase 2: $LOG_DIR/phase2-report.html
Phase 3: $LOG_DIR/phase3-report.html
Log Files:
Vite Dev Server: $LOG_DIR/vite.log
Phase 1 Details: $PHASE1_LOG
Phase 2 Details: $PHASE2_LOG
Phase 3 Details: $PHASE3_LOG
═══════════════════════════════════════════════════════════════════════════════
NEXT STEPS:
1. Review HTML reports in browser:
file://$LOG_DIR/phase1-report.html
file://$LOG_DIR/phase2-report.html
file://$LOG_DIR/phase3-report.html
2. Check log files for details:
cat $PHASE1_LOG
cat $PHASE2_LOG
cat $PHASE3_LOG
3. Fix any failing tests:
pytest <test-file> -k <test-name> -v
4. Run specific category:
pytest test_category_phase2.py::TestToolsCategory -v
═══════════════════════════════════════════════════════════════════════════════
Generated: $(date)
Report saved to: $REPORT_FILE
EOF
# Print summary to console
echo -e "\n${BLUE}╔═══════════════════════════════════════════════════════════════════════════════╗${NC}"
echo -e "${BLUE}║ TEST EXECUTION SUMMARY ║${NC}"
echo -e "${BLUE}╚═══════════════════════════════════════════════════════════════════════════════╝${NC}\n"
echo "Phase 1 - Smoke Test: $PHASE1_RESULT"
echo "Phase 2 - Category Testing: $PHASE2_RESULT"
echo "Phase 3 - API Testing: $PHASE3_RESULT"
echo -e "\n${BLUE}Log Files:${NC}"
echo " $REPORT_FILE"
echo " $PHASE1_LOG"
echo " $PHASE2_LOG"
echo " $PHASE3_LOG"
echo -e "\n${BLUE}HTML Reports:${NC}"
echo " $LOG_DIR/phase1-report.html"
echo " $LOG_DIR/phase2-report.html"
echo " $LOG_DIR/phase3-report.html"
# ────────────────────────────────────────────────────────────────────────────
# Cleanup
# ────────────────────────────────────────────────────────────────────────────
if [ "$DEV_SERVER_RUNNING" = false ] && [ ! -z "$VITE_PID" ]; then
print_info "Cleaning up: Stopping Vite dev server (PID: $VITE_PID)"
kill $VITE_PID 2>/dev/null || true
fi
# ────────────────────────────────────────────────────────────────────────────
# Final Status
# ────────────────────────────────────────────────────────────────────────────
if [ "$PHASE1_RESULT" = "PASSED" ] && [ "$PHASE2_RESULT" = "PASSED" ] && \
([ "$PHASE3_RESULT" = "PASSED" ] || [ "$PHASE3_RESULT" = "SKIPPED" ]); then
print_success "\nAll tests completed successfully!\n"
exit 0
else
print_error "\nSome tests failed. Review logs for details.\n"
exit 1
fi