rwadurian/backend/services/referral-service/scripts/run-all-tests.sh

158 lines
4.5 KiB
Bash

#!/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