FallenBirdyForm/start_test.sh
2025-06-07 19:38:47 +02:00

105 lines
3.4 KiB
Bash
Executable file
Raw Permalink 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.

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