#!/bin/bash # ============================================ # 完整测试运行脚本 # Run all tests for referral-service # ============================================ set -e echo "============================================" echo "Referral Service - Complete Test Suite" echo "============================================" echo "" # Colors for output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # Track test results UNIT_RESULT=0 INTEGRATION_RESULT=0 E2E_RESULT=0 DOCKER_RESULT=0 # Function to print status print_status() { if [ $1 -eq 0 ]; then echo -e "${GREEN}✓ $2 PASSED${NC}" else echo -e "${RED}✗ $2 FAILED${NC}" fi } # Change to project directory SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$SCRIPT_DIR/.." echo "Working directory: $(pwd)" echo "" # ============================================ # 1. Install dependencies # ============================================ echo -e "${YELLOW}Step 1: Installing dependencies...${NC}" npm install echo "" # ============================================ # 2. Generate Prisma client # ============================================ echo -e "${YELLOW}Step 2: Generating Prisma client...${NC}" npx prisma generate echo "" # ============================================ # 3. Build the project # ============================================ echo -e "${YELLOW}Step 3: Building the project...${NC}" npm run build echo "" # ============================================ # 4. Run Unit Tests # ============================================ echo "============================================" echo -e "${YELLOW}Step 4: Running Unit Tests...${NC}" echo "============================================" if npm test; then UNIT_RESULT=0 else UNIT_RESULT=1 fi echo "" # ============================================ # 5. Run Integration Tests # ============================================ echo "============================================" echo -e "${YELLOW}Step 5: Running Integration Tests...${NC}" echo "============================================" if npm run test:integration 2>/dev/null || npm test -- --testRegex="integration.spec.ts$"; then INTEGRATION_RESULT=0 else INTEGRATION_RESULT=1 fi echo "" # ============================================ # 6. Run E2E Tests # ============================================ echo "============================================" echo -e "${YELLOW}Step 6: Running E2E Tests...${NC}" echo "============================================" if npm run test:e2e 2>/dev/null || npm test -- --testRegex="e2e-spec.ts$"; then E2E_RESULT=0 else E2E_RESULT=1 fi echo "" # ============================================ # 7. Run Docker Tests (optional) # ============================================ echo "============================================" echo -e "${YELLOW}Step 7: Running Docker Tests...${NC}" echo "============================================" if command -v docker &> /dev/null && command -v docker-compose &> /dev/null; then echo "Docker is available, running containerized tests..." # Build and run tests in Docker if docker-compose -f docker-compose.test.yml build test && \ docker-compose -f docker-compose.test.yml up --abort-on-container-exit test; then DOCKER_RESULT=0 else DOCKER_RESULT=1 fi # Cleanup docker-compose -f docker-compose.test.yml down -v else echo -e "${YELLOW}Docker not available, skipping Docker tests${NC}" DOCKER_RESULT=-1 fi echo "" # ============================================ # Summary # ============================================ echo "============================================" echo "TEST SUMMARY" echo "============================================" print_status $UNIT_RESULT "Unit Tests" print_status $INTEGRATION_RESULT "Integration Tests" print_status $E2E_RESULT "E2E Tests" if [ $DOCKER_RESULT -eq -1 ]; then echo -e "${YELLOW}○ Docker Tests SKIPPED${NC}" else print_status $DOCKER_RESULT "Docker Tests" fi echo "============================================" # Calculate overall result TOTAL_FAILURES=$((UNIT_RESULT + INTEGRATION_RESULT + E2E_RESULT)) if [ $DOCKER_RESULT -gt 0 ]; then TOTAL_FAILURES=$((TOTAL_FAILURES + DOCKER_RESULT)) fi if [ $TOTAL_FAILURES -eq 0 ]; then echo -e "${GREEN}All tests passed!${NC}" exit 0 else echo -e "${RED}Some tests failed!${NC}" exit 1 fi