@echo off
REM 用户管理系统 - Windows测试执行脚本

echo ==========================================
echo 用户管理系统 - 测试执行脚本
echo ==========================================

REM 颜色定义
chcp 65001 >nul

:menu
echo.
echo 请选择测试类型:
echo 1. 运行所有测试
echo 2. 运行单元测试
echo 3. 运行集成测试
echo 4. 运行E2E测试
echo 5. 运行鲁棒性测试
echo 6. 生成覆盖率报告
echo 7. 运行性能基准测试
echo 8. 运行竞态检测
echo 0. 退出
echo.
set /p choice=请输入选项(0-8):

if "%choice%"=="1" goto all_tests
if "%choice%"=="2" goto unit_tests
if "%choice%"=="3" goto integration_tests
if "%choice%"=="4" goto e2e_tests
if "%choice%"=="5" goto robust_tests
if "%choice%"=="6" goto coverage
if "%choice%"=="7" goto benchmark
if "%choice%"=="8" goto race
if "%choice%"=="0" goto end
goto menu

:check_go
echo [INFO] 检查Go环境...
where go >nul 2>&1
if %errorlevel% neq 0 (
    echo [ERROR] Go未安装
    pause
    exit /b 1
)
goto :eof

:all_tests
call :check_go
echo ==========================================
echo 运行所有测试
echo ==========================================
call :unit_tests
echo [INFO] ✅ 所有测试准备完成
echo ==========================================
pause
goto menu

:unit_tests
call :check_go
echo ==========================================
echo 运行单元测试
echo ==========================================
echo [INFO] 测试Domain层...
go test -v ./internal/domain/... -run "Test.*"
echo [INFO] ✅ 单元测试完成
pause
goto menu

:integration_tests
call :check_go
echo ==========================================
echo 运行集成测试
echo ==========================================
echo [INFO] 测试集成层...
go test -v ./internal/integration/... -run "Test.*"
echo [INFO] ✅ 集成测试完成
pause
goto menu

:e2e_tests
call :check_go
echo ==========================================
echo 运行端到端测试
echo ==========================================
echo [INFO] 测试E2E流程...
go test -v ./internal/e2e/... -run "Test.*"
echo [INFO] ✅ 端到端测试完成
pause
goto menu

:robust_tests
call :check_go
echo ==========================================
echo 运行鲁棒性测试
echo ==========================================
echo [INFO] 测试鲁棒性...
go test -v ./internal/robustness/... -run "Test.*"
echo [INFO] ✅ 鲁棒性完成
pause
goto menu

:coverage
call :check_go
echo ==========================================
echo 运行测试并生成覆盖率报告
echo ==========================================
go test -v -coverprofile=coverage.out ./...
go tool cover -html=coverage.out -o coverage.html
echo [INFO] 覆盖率报告已生成: coverage.html
go tool cover -func=coverage.out
echo [INFO] ✅ 覆盖率测试完成
pause
goto menu

:benchmark
call :check_go
echo ==========================================
echo 运行性能基准测试
echo ==========================================
go test -bench=. -benchmem ./internal/domain/...
echo [INFO] ✅ 性能基准测试完成
pause
goto menu

:race
call :check_go
echo ==========================================
echo 运行竞态检测
echo ==========================================
go test -race ./...
echo [INFO] ✅ 竞态检测完成
pause
goto menu

:end
echo 退出测试脚本
exit /b 0
