added e2e testsuite
This commit is contained in:
@@ -50,6 +50,7 @@ class EntityValidator:
|
||||
self.warnings = []
|
||||
self.entity_defs = {}
|
||||
self.relationships = defaultdict(list)
|
||||
self.skip_e2e_tests = False
|
||||
|
||||
def validate_json_syntax(self) -> bool:
|
||||
"""Validiere JSON-Syntax aller Dateien im custom-Verzeichnis."""
|
||||
@@ -743,6 +744,10 @@ class EntityValidator:
|
||||
print_success("Rebuild erfolgreich abgeschlossen")
|
||||
if result.stdout:
|
||||
print(f" {result.stdout.strip()}")
|
||||
|
||||
# E2E-Tests nach erfolgreichem Rebuild
|
||||
self.run_e2e_tests()
|
||||
|
||||
return True
|
||||
else:
|
||||
print_error("Rebuild fehlgeschlagen:")
|
||||
@@ -790,6 +795,10 @@ class EntityValidator:
|
||||
|
||||
if result.returncode == 0:
|
||||
print_success("Rebuild erfolgreich abgeschlossen")
|
||||
|
||||
# E2E-Tests nach erfolgreichem Rebuild
|
||||
self.run_e2e_tests()
|
||||
|
||||
return True
|
||||
else:
|
||||
print_error("Rebuild fehlgeschlagen:")
|
||||
@@ -801,8 +810,55 @@ class EntityValidator:
|
||||
return False
|
||||
except Exception as e:
|
||||
print_error(f"Rebuild-Fehler: {e}")
|
||||
return False
|
||||
|
||||
return False
|
||||
def run_e2e_tests(self) -> bool:
|
||||
"""Führe End-to-End Tests nach erfolgreichem Rebuild aus."""
|
||||
|
||||
# Überspringe wenn Flag gesetzt
|
||||
if self.skip_e2e_tests:
|
||||
print_info("\nE2E-Tests wurden übersprungen (--skip-e2e)")
|
||||
return True
|
||||
|
||||
print_header("11. END-TO-END TESTS")
|
||||
|
||||
# Prüfe ob E2E-Test Skript existiert
|
||||
e2e_script = self.base_path / "custom" / "scripts" / "e2e_tests.py"
|
||||
if not e2e_script.exists():
|
||||
print_warning("E2E-Test Skript nicht gefunden, überspringe Tests")
|
||||
return True
|
||||
|
||||
print_info("Starte automatisierte End-to-End Tests...")
|
||||
print_info("Dies validiert CRUD-Operationen für Custom Entities\n")
|
||||
|
||||
try:
|
||||
result = subprocess.run(
|
||||
['python3', 'e2e_tests.py'],
|
||||
cwd=str(e2e_script.parent),
|
||||
capture_output=True,
|
||||
text=True,
|
||||
timeout=120
|
||||
)
|
||||
|
||||
# Ausgabe anzeigen
|
||||
if result.stdout:
|
||||
print(result.stdout)
|
||||
|
||||
if result.returncode == 0:
|
||||
print_success("E2E-Tests erfolgreich abgeschlossen")
|
||||
return True
|
||||
else:
|
||||
print_warning("E2E-Tests haben Fehler gemeldet")
|
||||
if result.stderr:
|
||||
print(f"\n{Colors.YELLOW}{result.stderr}{Colors.END}")
|
||||
print_info("Dies ist keine kritische Fehler - der Rebuild war erfolgreich")
|
||||
return True # Nicht als Fehler werten
|
||||
|
||||
except subprocess.TimeoutExpired:
|
||||
print_warning("E2E-Tests Timeout (>120 Sekunden)")
|
||||
return True # Nicht als Fehler werten
|
||||
except Exception as e:
|
||||
print_warning(f"E2E-Tests konnten nicht ausgeführt werden: {e}")
|
||||
return True # Nicht als Fehler werten
|
||||
def print_summary(self):
|
||||
"""Drucke Zusammenfassung aller Ergebnisse."""
|
||||
print_header("ZUSAMMENFASSUNG")
|
||||
@@ -884,9 +940,15 @@ def main():
|
||||
action='store_true',
|
||||
help='Synonym für --dry-run'
|
||||
)
|
||||
parser.add_argument(
|
||||
'--skip-e2e',
|
||||
action='store_true',
|
||||
help='Überspringe E2E-Tests nach Rebuild'
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
dry_run = args.dry_run or args.no_rebuild
|
||||
skip_e2e = args.skip_e2e
|
||||
|
||||
# Finde EspoCRM Root-Verzeichnis
|
||||
script_dir = Path(__file__).parent.parent.parent
|
||||
@@ -900,9 +962,12 @@ def main():
|
||||
print(f"Arbeitsverzeichnis: {script_dir}")
|
||||
if dry_run:
|
||||
print(f"{Colors.YELLOW}Modus: DRY-RUN (kein Rebuild){Colors.END}")
|
||||
if skip_e2e:
|
||||
print(f"{Colors.YELLOW}E2E-Tests werden übersprungen{Colors.END}")
|
||||
print()
|
||||
|
||||
validator = EntityValidator(str(script_dir))
|
||||
validator.skip_e2e_tests = skip_e2e
|
||||
|
||||
# Validierungen durchführen
|
||||
all_valid = validator.validate_all()
|
||||
|
||||
Reference in New Issue
Block a user