#!/bin/bash # test_dicom2pacs.sh - Automatisiertes Testskript für dicom2pacs set -e # Beende bei Fehlern # Farben für Ausgabe GREEN='\033[0;32m' RED='\033[0;31m' YELLOW='\033[1;33m' NC='\033[0m' # No Color echo "=== dicom2pacs Test-Suite ===" echo "" # 1. Prüfe ob venv existiert if [ ! -d "venv" ]; then echo -e "${YELLOW}Warnung: venv nicht gefunden. Erstelle es...${NC}" python3 -m venv venv fi # 2. Aktiviere venv echo "Aktiviere virtuelles Environment..." source venv/bin/activate # 3. Prüfe ob pydicom installiert ist if ! python3 -c "import pydicom" 2>/dev/null; then echo "Installiere pydicom..." pip install pydicom fi # 4. Erstelle Test-Ordner TEST_DIR="$HOME/Downloads/test_dicom" echo "" echo "Erstelle Test-Ordner: $TEST_DIR" mkdir -p "$TEST_DIR" # 5. Kopiere Test-DICOM-Dateien echo "Kopiere Test-DICOM-Dateien..." # Prüfe ob gebaute App existiert if [ -d "dist/dicom2pacs.app" ]; then PYDICOM_PATH="dist/dicom2pacs.app/Contents/Resources/lib/python3.13/pydicom/data/test_files" if [ -d "$PYDICOM_PATH" ]; then cp "$PYDICOM_PATH/CT_small.dcm" "$TEST_DIR/" 2>/dev/null || echo "CT_small.dcm nicht gefunden" cp "$PYDICOM_PATH/MR_small.dcm" "$TEST_DIR/" 2>/dev/null || echo "MR_small.dcm nicht gefunden" cp "$PYDICOM_PATH/image_dfl.dcm" "$TEST_DIR/" 2>/dev/null || echo "image_dfl.dcm nicht gefunden" fi fi # Alternative: Prüfe ob pydicom im venv installiert ist if [ -d "venv/lib/python3.13/site-packages/pydicom/data/test_files" ]; then PYDICOM_VENV_PATH="venv/lib/python3.13/site-packages/pydicom/data/test_files" cp "$PYDICOM_VENV_PATH/CT_small.dcm" "$TEST_DIR/" 2>/dev/null || true cp "$PYDICOM_VENV_PATH/MR_small.dcm" "$TEST_DIR/" 2>/dev/null || true cp "$PYDICOM_VENV_PATH/image_dfl.dcm" "$TEST_DIR/" 2>/dev/null || true fi # Prüfe ob Dateien kopiert wurden DICOM_COUNT=$(find "$TEST_DIR" -name "*.dcm" 2>/dev/null | wc -l | tr -d ' ') if [ "$DICOM_COUNT" -eq 0 ]; then echo -e "${RED}FEHLER: Keine DICOM-Testdateien gefunden!${NC}" echo "Bitte manuell DICOM-Dateien nach $TEST_DIR kopieren" exit 1 fi echo -e "${GREEN}✓ $DICOM_COUNT DICOM-Dateien gefunden${NC}" # 6. Prüfe Konfiguration echo "" echo "Prüfe Konfiguration..." CONFIG_FILE="$HOME/.dicom2pacs.conf" if [ ! -f "$CONFIG_FILE" ]; then echo -e "${YELLOW}Konfigurationsdatei nicht gefunden. Wird beim ersten Start erstellt.${NC}" else echo -e "${GREEN}✓ Konfigurationsdatei gefunden${NC}" cat "$CONFIG_FILE" fi # 7. Test-Parameter TEST_NAME="Mustermann" TEST_VORNAME="Max" TEST_GEBURTSDATUM="19800101" TEST_PATIENTEN_ID="TEST12345" echo "" echo "=== Test-Parameter ===" echo "Name: $TEST_NAME" echo "Vorname: $TEST_VORNAME" echo "Geburtsdatum: $TEST_GEBURTSDATUM" echo "Patienten-ID: $TEST_PATIENTEN_ID" echo "Test-Ordner: $TEST_DIR" echo "" # 8. Prüfe ob App existiert if [ ! -f "dicom2pacs.py" ]; then echo -e "${RED}FEHLER: dicom2pacs.py nicht gefunden!${NC}" exit 1 fi # 9. Test-Menü echo "=== Test-Menü ===" echo "1. GUI-Test (manuell - App öffnet sich)" echo "2. Unit-Test (prüft Module ohne GUI)" echo "3. Integrationstest (vollständiger Test)" echo "4. Aufräumen (löscht Test-Ordner)" echo "" read -p "Wählen Sie eine Option (1-4): " choice case $choice in 1) echo "" echo -e "${GREEN}Starte GUI-Test...${NC}" echo "Die App öffnet sich jetzt." echo "Bitte wählen Sie den Ordner: $TEST_DIR" echo "" python dicom2pacs.py "$TEST_NAME" "$TEST_VORNAME" "$TEST_GEBURTSDATUM" "$TEST_PATIENTEN_ID" ;; 2) echo "" echo -e "${GREEN}Starte Unit-Tests...${NC}" python3 << 'EOF' import sys import os sys.path.insert(0, os.getcwd()) print("Teste dicom_processing...") try: import dicom_processing print("✓ dicom_processing importiert") # Test is_dicom_file test_file = os.path.expanduser("~/Downloads/test_dicom/CT_small.dcm") if os.path.exists(test_file): result = dicom_processing.is_dicom_file(test_file) print(f"✓ is_dicom_file: {result}") else: print("⚠ Test-Datei nicht gefunden") except Exception as e: print(f"✗ Fehler: {e}") print("\nTeste file_management...") try: import file_management print("✓ file_management importiert") test_dir = os.path.expanduser("~/Downloads/test_dicom") if os.path.exists(test_dir): files = file_management.find_dicom_files(test_dir) if files != 'non_found': dicom_files, count = files print(f"✓ find_dicom_files: {count} Dateien gefunden") else: print("⚠ Keine DICOM-Dateien gefunden") else: print("⚠ Test-Ordner nicht gefunden") except Exception as e: print(f"✗ Fehler: {e}") print("\nTeste network_utils...") try: import network_utils print("✓ network_utils importiert") except Exception as e: print(f"✗ Fehler: {e}") print("\n✓ Unit-Tests abgeschlossen") EOF ;; 3) echo "" echo -e "${GREEN}Starte Integrationstest...${NC}" echo "Dieser Test führt die App im Hintergrund aus." echo "Bitte beachten Sie, dass die GUI geöffnet wird." echo "" read -p "Fortfahren? (j/n): " confirm if [ "$confirm" = "j" ] || [ "$confirm" = "J" ]; then python dicom2pacs.py "$TEST_NAME" "$TEST_VORNAME" "$TEST_GEBURTSDATUM" "$TEST_PATIENTEN_ID" & echo "App gestartet. PID: $!" echo "Bitte testen Sie die App manuell." fi ;; 4) echo "" echo -e "${YELLOW}Lösche Test-Ordner...${NC}" if [ -d "$TEST_DIR" ]; then rm -rf "$TEST_DIR" echo -e "${GREEN}✓ Test-Ordner gelöscht${NC}" else echo "Test-Ordner existiert nicht" fi # Lösche auch Transfer-Ordner falls vorhanden TRANSFER_DIR="$HOME/Downloads/D2OTrans" if [ -d "$TRANSFER_DIR" ]; then echo "Lösche Transfer-Ordner..." rm -rf "$TRANSFER_DIR" echo -e "${GREEN}✓ Transfer-Ordner gelöscht${NC}" fi ;; *) echo -e "${RED}Ungültige Option${NC}" exit 1 ;; esac echo "" echo -e "${GREEN}=== Test abgeschlossen ===${NC}"