create a simple script to run all tests
This commit is contained in:
parent
3569b219c7
commit
41ffe82660
3 changed files with 123 additions and 424 deletions
23
README.md
23
README.md
|
@ -38,6 +38,19 @@ Das Stop-Skript stoppt alle Container und räumt auf.
|
|||
|
||||
Das Projekt verfügt über eine umfassende Test-Suite mit verschiedenen Test-Arten:
|
||||
|
||||
### Einfachster Weg (Empfohlen)
|
||||
Verwenden Sie das bereitgestellte Test-Skript für einen vollständigen Test-Durchlauf:
|
||||
```bash
|
||||
./start_test.sh
|
||||
```
|
||||
|
||||
Das Test-Skript führt automatisch folgende Tests aus:
|
||||
- Django Tests (13 Tests im Docker Container)
|
||||
- Pytest Unit Tests (77 Tests)
|
||||
- Pytest Integration Tests (11 Tests)
|
||||
- Pytest Functional Tests (6 Tests)
|
||||
- Generiert einen HTML Coverage Report
|
||||
|
||||
### Django Tests (im Docker Container)
|
||||
Führen Sie die Standard Django Tests aus:
|
||||
```bash
|
||||
|
@ -47,28 +60,28 @@ docker exec django_fbf_web_1 python manage.py test
|
|||
### Komplette Test-Suite (Unit, Integration, Functional)
|
||||
Für die vollständige Test-Suite (94 Tests):
|
||||
```bash
|
||||
python -m pytest test/ -v
|
||||
python3 -m pytest test/ -v
|
||||
```
|
||||
|
||||
### Nur Unit Tests
|
||||
```bash
|
||||
python -m pytest test/unit/ -v
|
||||
python3 -m pytest test/unit/ -v
|
||||
```
|
||||
|
||||
### Nur Integration Tests
|
||||
```bash
|
||||
python -m pytest test/integration/ -v
|
||||
python3 -m pytest test/integration/ -v
|
||||
```
|
||||
|
||||
### Nur Functional Tests
|
||||
```bash
|
||||
python -m pytest test/functional/ -v
|
||||
python3 -m pytest test/functional/ -v
|
||||
```
|
||||
|
||||
### Test-Coverage Report
|
||||
Um einen Bericht über die Test-Abdeckung zu erhalten:
|
||||
```bash
|
||||
python -m pytest test/ --cov=app --cov-report=html
|
||||
python3 -m pytest test/ --cov=app --cov-report=html
|
||||
```
|
||||
|
||||
**Hinweis:** Stellen Sie sicher, dass das Projekt läuft (`./start_project.sh`) bevor Sie die Tests ausführen.
|
||||
|
|
|
@ -1,419 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Django FBF Project Rebuild Script
|
||||
# This script stops the project, runs all tests, and restarts if tests pass
|
||||
|
||||
set -e # Exit on any error
|
||||
|
||||
# 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_DIR="/Users/maximilianfischer/git/django_fbf"
|
||||
TEST_DIR="$PROJECT_DIR/test"
|
||||
APP_DIR="$PROJECT_DIR/app"
|
||||
DOCKER_COMPOSE_FILE="$PROJECT_DIR/docker-compose.yaml"
|
||||
DOCKER_COMPOSE_PROD_FILE="$PROJECT_DIR/docker-compose.prod.yml"
|
||||
|
||||
# Logging
|
||||
LOG_FILE="$PROJECT_DIR/rebuild_$(date +%Y%m%d_%H%M%S).log"
|
||||
|
||||
log() {
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
|
||||
}
|
||||
|
||||
log_info() {
|
||||
echo -e "${BLUE}[INFO]${NC} $1" | tee -a "$LOG_FILE"
|
||||
}
|
||||
|
||||
log_success() {
|
||||
echo -e "${GREEN}[SUCCESS]${NC} $1" | tee -a "$LOG_FILE"
|
||||
}
|
||||
|
||||
log_warning() {
|
||||
echo -e "${YELLOW}[WARNING]${NC} $1" | tee -a "$LOG_FILE"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1" | tee -a "$LOG_FILE"
|
||||
}
|
||||
|
||||
# Function to check if Docker is running
|
||||
check_docker() {
|
||||
if ! docker info > /dev/null 2>&1; then
|
||||
log_error "Docker is not running. Please start Docker first."
|
||||
exit 1
|
||||
fi
|
||||
log_info "Docker is running"
|
||||
}
|
||||
|
||||
# Function to stop the project
|
||||
stop_project() {
|
||||
log_info "Stopping Django FBF project..."
|
||||
|
||||
cd "$PROJECT_DIR"
|
||||
|
||||
# Stop using existing stop script if available
|
||||
if [ -f "./stop_project.sh" ]; then
|
||||
log_info "Using existing stop_project.sh script"
|
||||
./stop_project.sh 2>&1 | tee -a "$LOG_FILE"
|
||||
else
|
||||
# Stop using docker-compose
|
||||
if [ -f "$DOCKER_COMPOSE_FILE" ]; then
|
||||
log_info "Stopping containers using docker-compose"
|
||||
docker-compose -f "$DOCKER_COMPOSE_FILE" down 2>&1 | tee -a "$LOG_FILE"
|
||||
fi
|
||||
|
||||
# Also stop production containers if they exist
|
||||
if [ -f "$DOCKER_COMPOSE_PROD_FILE" ]; then
|
||||
log_info "Stopping production containers"
|
||||
docker-compose -f "$DOCKER_COMPOSE_PROD_FILE" down 2>&1 | tee -a "$LOG_FILE"
|
||||
fi
|
||||
fi
|
||||
|
||||
log_success "Project stopped successfully"
|
||||
}
|
||||
|
||||
# Function to run tests
|
||||
run_tests() {
|
||||
log_info "Running Django FBF tests..."
|
||||
|
||||
cd "$PROJECT_DIR"
|
||||
|
||||
# Set up Python virtual environment if it exists
|
||||
if [ -d "./venv" ]; then
|
||||
log_info "Activating virtual environment"
|
||||
source ./venv/bin/activate
|
||||
fi
|
||||
|
||||
# Method 1: Try using our custom test runner
|
||||
if [ -f "$TEST_DIR/run_tests.py" ]; then
|
||||
log_info "Running tests using custom test runner"
|
||||
if python3 "$TEST_DIR/run_tests.py" 2>&1 | tee -a "$LOG_FILE"; then
|
||||
log_success "Custom test runner completed successfully"
|
||||
return 0
|
||||
else
|
||||
log_warning "Custom test runner failed, trying Django manage.py"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Method 2: Try using Django's manage.py test command
|
||||
if [ -f "$APP_DIR/manage.py" ]; then
|
||||
log_info "Running tests using Django manage.py"
|
||||
cd "$APP_DIR"
|
||||
|
||||
# Set Django settings module for testing
|
||||
export DJANGO_SETTINGS_MODULE="core.settings"
|
||||
|
||||
# Run Django tests
|
||||
if python3 manage.py test test --verbosity=2 --keepdb 2>&1 | tee -a "$LOG_FILE"; then
|
||||
log_success "Django tests completed successfully"
|
||||
return 0
|
||||
else
|
||||
log_error "Django tests failed"
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Method 3: Try using pytest if installed
|
||||
log_info "Trying pytest as fallback"
|
||||
if command -v pytest &> /dev/null; then
|
||||
cd "$TEST_DIR"
|
||||
if pytest -v 2>&1 | tee -a "$LOG_FILE"; then
|
||||
log_success "Pytest completed successfully"
|
||||
return 0
|
||||
else
|
||||
log_error "Pytest failed"
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
log_error "No suitable test runner found"
|
||||
return 1
|
||||
}
|
||||
|
||||
# Function to check code quality (optional)
|
||||
check_code_quality() {
|
||||
log_info "Checking code quality..."
|
||||
|
||||
cd "$PROJECT_DIR"
|
||||
|
||||
# Check if flake8 is available
|
||||
if command -v flake8 &> /dev/null; then
|
||||
log_info "Running flake8 linter"
|
||||
if flake8 app/ --max-line-length=88 --exclude=migrations 2>&1 | tee -a "$LOG_FILE"; then
|
||||
log_success "Code quality check passed"
|
||||
else
|
||||
log_warning "Code quality issues found (not blocking)"
|
||||
fi
|
||||
else
|
||||
log_info "flake8 not available, skipping code quality check"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to start the project
|
||||
start_project() {
|
||||
log_info "Starting Django FBF project..."
|
||||
|
||||
cd "$PROJECT_DIR"
|
||||
|
||||
# Start using existing start script if available
|
||||
if [ -f "./start_project.sh" ]; then
|
||||
log_info "Using existing start_project.sh script"
|
||||
if ./start_project.sh 2>&1 | tee -a "$LOG_FILE"; then
|
||||
log_success "Project started successfully using start script"
|
||||
return 0
|
||||
else
|
||||
log_error "Failed to start project using start script"
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
# Start using docker-compose
|
||||
if [ -f "$DOCKER_COMPOSE_FILE" ]; then
|
||||
log_info "Starting containers using docker-compose"
|
||||
if docker-compose -f "$DOCKER_COMPOSE_FILE" up -d 2>&1 | tee -a "$LOG_FILE"; then
|
||||
log_success "Containers started successfully"
|
||||
|
||||
# Wait a moment for containers to be ready
|
||||
log_info "Waiting for containers to be ready..."
|
||||
sleep 10
|
||||
|
||||
# Check if containers are running
|
||||
if docker-compose -f "$DOCKER_COMPOSE_FILE" ps | grep -q "Up"; then
|
||||
log_success "Containers are running"
|
||||
return 0
|
||||
else
|
||||
log_error "Containers failed to start properly"
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
log_error "Failed to start containers"
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
log_error "No docker-compose.yaml file found"
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to verify project is running
|
||||
verify_project() {
|
||||
log_info "Verifying project is running..."
|
||||
|
||||
# Check if containers are running
|
||||
cd "$PROJECT_DIR"
|
||||
if [ -f "$DOCKER_COMPOSE_FILE" ]; then
|
||||
if docker-compose -f "$DOCKER_COMPOSE_FILE" ps | grep -q "Up"; then
|
||||
log_success "Project containers are running"
|
||||
|
||||
# Try to check if web service is responding
|
||||
log_info "Checking web service availability..."
|
||||
sleep 5
|
||||
|
||||
# Try to curl the application (adjust port as needed)
|
||||
if curl -f -s http://localhost:8000 > /dev/null 2>&1; then
|
||||
log_success "Web service is responding"
|
||||
elif curl -f -s http://localhost:80 > /dev/null 2>&1; then
|
||||
log_success "Web service is responding on port 80"
|
||||
else
|
||||
log_warning "Web service may not be responding yet (this might be normal)"
|
||||
fi
|
||||
|
||||
return 0
|
||||
else
|
||||
log_error "Project containers are not running"
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
log_warning "Could not verify project status"
|
||||
return 0
|
||||
}
|
||||
|
||||
# Function to create backup before rebuild
|
||||
create_backup() {
|
||||
log_info "Creating backup before rebuild..."
|
||||
|
||||
cd "$PROJECT_DIR"
|
||||
|
||||
# Create backup directory
|
||||
BACKUP_DIR="$PROJECT_DIR/backups/$(date +%Y%m%d_%H%M%S)"
|
||||
mkdir -p "$BACKUP_DIR"
|
||||
|
||||
# Backup database if possible
|
||||
if [ -f "./bin/backupDB" ]; then
|
||||
log_info "Creating database backup"
|
||||
if ./bin/backupDB 2>&1 | tee -a "$LOG_FILE"; then
|
||||
log_success "Database backup created"
|
||||
else
|
||||
log_warning "Database backup failed"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Backup important files
|
||||
log_info "Backing up configuration files"
|
||||
cp -r app/ "$BACKUP_DIR/" 2>/dev/null || true
|
||||
cp docker-compose.yaml "$BACKUP_DIR/" 2>/dev/null || true
|
||||
cp docker-compose.prod.yml "$BACKUP_DIR/" 2>/dev/null || true
|
||||
|
||||
log_success "Backup created in $BACKUP_DIR"
|
||||
}
|
||||
|
||||
# Function to show project status
|
||||
show_status() {
|
||||
log_info "Project Status:"
|
||||
echo "===========================================" | tee -a "$LOG_FILE"
|
||||
|
||||
cd "$PROJECT_DIR"
|
||||
|
||||
if [ -f "$DOCKER_COMPOSE_FILE" ]; then
|
||||
echo "Docker Containers:" | tee -a "$LOG_FILE"
|
||||
docker-compose -f "$DOCKER_COMPOSE_FILE" ps 2>&1 | tee -a "$LOG_FILE"
|
||||
echo "" | tee -a "$LOG_FILE"
|
||||
fi
|
||||
|
||||
echo "Recent log entries:" | tee -a "$LOG_FILE"
|
||||
tail -10 "$LOG_FILE"
|
||||
echo "===========================================" | tee -a "$LOG_FILE"
|
||||
}
|
||||
|
||||
# Main execution
|
||||
main() {
|
||||
log_info "Starting Django FBF project rebuild process"
|
||||
log_info "Log file: $LOG_FILE"
|
||||
|
||||
# Parse command line arguments
|
||||
SKIP_BACKUP=false
|
||||
SKIP_QUALITY_CHECK=false
|
||||
FORCE_RESTART=false
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
--skip-backup)
|
||||
SKIP_BACKUP=true
|
||||
shift
|
||||
;;
|
||||
--skip-quality-check)
|
||||
SKIP_QUALITY_CHECK=true
|
||||
shift
|
||||
;;
|
||||
--force-restart)
|
||||
FORCE_RESTART=true
|
||||
shift
|
||||
;;
|
||||
--help)
|
||||
echo "Usage: $0 [OPTIONS]"
|
||||
echo "Options:"
|
||||
echo " --skip-backup Skip backup creation"
|
||||
echo " --skip-quality-check Skip code quality check"
|
||||
echo " --force-restart Restart even if tests fail"
|
||||
echo " --help Show this help message"
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
log_error "Unknown option: $1"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Start rebuild process
|
||||
trap 'log_error "Rebuild process interrupted"; exit 1' INT TERM
|
||||
|
||||
# Step 1: Check prerequisites
|
||||
check_docker
|
||||
|
||||
# Step 2: Create backup (optional)
|
||||
if [ "$SKIP_BACKUP" = false ]; then
|
||||
create_backup
|
||||
else
|
||||
log_info "Skipping backup creation"
|
||||
fi
|
||||
|
||||
# Step 3: Stop the project
|
||||
stop_project
|
||||
|
||||
# Step 4: Run tests
|
||||
if run_tests; then
|
||||
log_success "All tests passed!"
|
||||
|
||||
# Step 5: Check code quality (optional)
|
||||
if [ "$SKIP_QUALITY_CHECK" = false ]; then
|
||||
check_code_quality
|
||||
else
|
||||
log_info "Skipping code quality check"
|
||||
fi
|
||||
|
||||
# Step 6: Start the project
|
||||
if start_project; then
|
||||
# Step 7: Verify project is running
|
||||
if verify_project; then
|
||||
log_success "Project rebuild completed successfully!"
|
||||
show_status
|
||||
exit 0
|
||||
else
|
||||
log_error "Project verification failed"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
log_error "Failed to start project"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
log_error "Tests failed!"
|
||||
|
||||
if [ "$FORCE_RESTART" = true ]; then
|
||||
log_warning "Force restart enabled, starting project anyway"
|
||||
if start_project; then
|
||||
log_warning "Project started despite test failures"
|
||||
show_status
|
||||
exit 2 # Different exit code to indicate tests failed but project started
|
||||
else
|
||||
log_error "Failed to start project even with force restart"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
log_error "Project not restarted due to test failures"
|
||||
log_info "Use --force-restart to start anyway"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Handle help request
|
||||
if [[ "${1:-}" == "--help" ]] || [[ "${1:-}" == "-h" ]]; then
|
||||
echo "Django FBF Project Rebuild Script"
|
||||
echo "=================================="
|
||||
echo ""
|
||||
echo "This script performs a complete rebuild of the Django FBF project:"
|
||||
echo "1. Creates a backup (optional)"
|
||||
echo "2. Stops the running project"
|
||||
echo "3. Runs all tests"
|
||||
echo "4. Checks code quality (optional)"
|
||||
echo "5. Restarts the project if tests pass"
|
||||
echo "6. Verifies the project is running"
|
||||
echo ""
|
||||
echo "Usage: $0 [OPTIONS]"
|
||||
echo ""
|
||||
echo "Options:"
|
||||
echo " --skip-backup Skip backup creation before rebuild"
|
||||
echo " --skip-quality-check Skip code quality check with flake8"
|
||||
echo " --force-restart Restart project even if tests fail"
|
||||
echo " --help, -h Show this help message"
|
||||
echo ""
|
||||
echo "Exit codes:"
|
||||
echo " 0 - Success"
|
||||
echo " 1 - Error or tests failed"
|
||||
echo " 2 - Tests failed but project started (with --force-restart)"
|
||||
echo ""
|
||||
echo "Log files are created in the project directory with timestamp."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Run main function
|
||||
main "$@"
|
105
start_test.sh
Executable file
105
start_test.sh
Executable file
|
@ -0,0 +1,105 @@
|
|||
#!/bin/bash
|
||||
|
||||
# start_test.sh - Test Runner for Fallen Birdy Form
|
||||
# Führt alle Tests aus und zeigt eine Zusammenfassung an
|
||||
|
||||
echo "🧪 ===== FALLEN BIRDY FORM - TEST SUITE ====="
|
||||
echo "📅 Start: $(date '+%d.%m.%Y %H:%M:%S')"
|
||||
echo ""
|
||||
|
||||
# Farben für die Ausgabe
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m'
|
||||
|
||||
# Test Counters
|
||||
TOTAL_TESTS=0
|
||||
TOTAL_FAILED=0
|
||||
ALL_PASSED=true
|
||||
|
||||
echo -e "${BLUE}🔍 Überprüfung der Voraussetzungen...${NC}"
|
||||
|
||||
# Prüfen ob Docker Container läuft
|
||||
if ! docker ps | grep -q "django_fbf_web_1"; then
|
||||
echo -e "${RED}❌ Django Container läuft nicht!${NC}"
|
||||
echo " Bitte starten Sie das Projekt zuerst mit: ./start_project.sh"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}✅ Container läuft${NC}"
|
||||
echo ""
|
||||
|
||||
# 1. Django Tests
|
||||
echo -e "${BLUE}1️⃣ Django Tests (im Docker Container)...${NC}"
|
||||
echo "----------------------------------------"
|
||||
|
||||
DJANGO_RESULT=$(docker exec django_fbf_web_1 python manage.py test 2>&1)
|
||||
DJANGO_EXIT=$?
|
||||
|
||||
if [ $DJANGO_EXIT -eq 0 ]; then
|
||||
DJANGO_COUNT=$(echo "$DJANGO_RESULT" | grep -o "Ran [0-9]\+ tests" | grep -o "[0-9]\+" || echo "0")
|
||||
echo -e "${GREEN}✅ Django Tests: $DJANGO_COUNT Tests bestanden${NC}"
|
||||
TOTAL_TESTS=$((TOTAL_TESTS + DJANGO_COUNT))
|
||||
else
|
||||
echo -e "${RED}❌ Django Tests: Fehler aufgetreten${NC}"
|
||||
echo "$DJANGO_RESULT" | tail -5
|
||||
ALL_PASSED=false
|
||||
TOTAL_FAILED=$((TOTAL_FAILED + 1))
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# 2. Pytest Tests (alle zusammen)
|
||||
echo -e "${BLUE}2️⃣ Pytest Tests (Unit, Integration, Functional)...${NC}"
|
||||
echo "------------------------------------------------"
|
||||
|
||||
if command -v python3 >/dev/null 2>&1 && python3 -c "import pytest" 2>/dev/null; then
|
||||
PYTEST_RESULT=$(python3 -m pytest test/ -v --tb=short 2>&1)
|
||||
PYTEST_EXIT=$?
|
||||
|
||||
if [ $PYTEST_EXIT -eq 0 ]; then
|
||||
PYTEST_COUNT=$(echo "$PYTEST_RESULT" | grep -E "=+ [0-9]+ passed" | grep -o "[0-9]\+ passed" | grep -o "[0-9]\+" || echo "0")
|
||||
echo -e "${GREEN}✅ Pytest Tests: $PYTEST_COUNT Tests bestanden${NC}"
|
||||
TOTAL_TESTS=$((TOTAL_TESTS + PYTEST_COUNT))
|
||||
else
|
||||
PYTEST_FAILED=$(echo "$PYTEST_RESULT" | grep -E "=+ [0-9]+ failed" | grep -o "[0-9]\+ failed" | grep -o "[0-9]\+" || echo "0")
|
||||
echo -e "${RED}❌ Pytest Tests: $PYTEST_FAILED Tests fehlgeschlagen${NC}"
|
||||
echo "$PYTEST_RESULT" | tail -10
|
||||
ALL_PASSED=false
|
||||
TOTAL_FAILED=$((TOTAL_FAILED + PYTEST_FAILED))
|
||||
fi
|
||||
else
|
||||
echo -e "${YELLOW}⚠️ Pytest nicht verfügbar - überspringe externe Tests${NC}"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# Zusammenfassung
|
||||
echo "🎯 ===== TEST ZUSAMMENFASSUNG ====="
|
||||
echo "📊 Gesamt Tests ausgeführt: $TOTAL_TESTS"
|
||||
|
||||
if [ "$ALL_PASSED" = true ] && [ $TOTAL_FAILED -eq 0 ]; then
|
||||
echo -e "${GREEN}🎉 ALLE TESTS BESTANDEN! 🎉${NC}"
|
||||
EXIT_CODE=0
|
||||
else
|
||||
echo -e "${RED}❌ Es gab Fehler bei den Tests${NC}"
|
||||
echo " Fehlgeschlagene Tests: $TOTAL_FAILED"
|
||||
EXIT_CODE=1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "⏱️ Beendet: $(date '+%d.%m.%Y %H:%M:%S')"
|
||||
echo "=================================="
|
||||
|
||||
# Coverage Report (optional)
|
||||
if [ "$ALL_PASSED" = true ] && command -v python3 >/dev/null 2>&1; then
|
||||
echo ""
|
||||
echo -e "${BLUE}📈 Generiere Test Coverage Report...${NC}"
|
||||
if python3 -m pytest test/ --cov=app --cov-report=html -q >/dev/null 2>&1; then
|
||||
echo -e "${GREEN}✅ Coverage Report: htmlcov/index.html${NC}"
|
||||
else
|
||||
echo -e "${YELLOW}⚠️ Coverage Report nicht verfügbar${NC}"
|
||||
fi
|
||||
fi
|
||||
|
||||
exit $EXIT_CODE
|
Loading…
Add table
Add a link
Reference in a new issue