90 lines
2.8 KiB
PHP
90 lines
2.8 KiB
PHP
#!/usr/bin/env php
|
|
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
/**
|
|
* Steuerkram Test-Runner
|
|
*
|
|
* Führt alle Tests im tests/-Verzeichnis aus und gibt eine Zusammenfassung aus.
|
|
* Exit-Code: 0 = alle Tests bestanden, 1 = mindestens ein Fehler.
|
|
*
|
|
* Verwendung:
|
|
* php tests/run.php
|
|
* php tests/run.php --json # Ausgabe als JSON (für Skript-Auswertung)
|
|
*/
|
|
|
|
$projectRoot = dirname(__DIR__);
|
|
$autoload = $projectRoot . '/vendor/autoload.php';
|
|
|
|
if (!file_exists($autoload)) {
|
|
fwrite(STDERR, "Fehler: vendor/autoload.php nicht gefunden. Bitte 'composer install' ausführen.\n");
|
|
exit(1);
|
|
}
|
|
|
|
require $autoload;
|
|
require __DIR__ . '/TestCase.php';
|
|
|
|
\Steuerkram\Config::load();
|
|
|
|
$jsonMode = in_array('--json', $argv ?? [], true);
|
|
|
|
// Alle Test-Dateien laden
|
|
$testFiles = glob(__DIR__ . '/[0-9][0-9]_*.php');
|
|
sort($testFiles);
|
|
|
|
$testClasses = [];
|
|
foreach ($testFiles as $file) {
|
|
require_once $file;
|
|
// Klassenname aus Dateiname ableiten: 01_BelegUploadTest.php → BelegUploadTest
|
|
$base = basename($file, '.php');
|
|
$className = preg_replace('/^\d+_/', '', $base);
|
|
if (class_exists($className)) {
|
|
$testClasses[] = $className;
|
|
}
|
|
}
|
|
|
|
if (empty($testClasses)) {
|
|
fwrite(STDERR, "Keine Testklassen gefunden.\n");
|
|
exit(1);
|
|
}
|
|
|
|
if (!$jsonMode) {
|
|
echo "\n\e[1m╔══════════════════════════════════════════╗\e[0m\n";
|
|
echo "\e[1m║ Steuerkram Test-Suite ║\e[0m\n";
|
|
echo "\e[1m╚══════════════════════════════════════════╝\e[0m\n";
|
|
}
|
|
|
|
$allFailures = [];
|
|
|
|
foreach ($testClasses as $class) {
|
|
/** @var TestCase $test */
|
|
$test = new $class();
|
|
$failures = $test->execute();
|
|
$allFailures = array_merge($allFailures, $failures);
|
|
}
|
|
|
|
$summary = TestCase::globalSummary();
|
|
|
|
if (!$jsonMode) {
|
|
$total = $summary['passed'] + $summary['failed'];
|
|
echo "\n\e[1m══════════════════════════════════════════\e[0m\n";
|
|
if ($summary['failed'] === 0) {
|
|
echo "\e[32;1m✓ Alle {$summary['passed']} Tests bestanden.\e[0m\n";
|
|
} else {
|
|
echo "\e[31;1m✗ {$summary['failed']} von {$total} Tests fehlgeschlagen:\e[0m\n";
|
|
foreach ($summary['failures'] as $failure) {
|
|
echo " • {$failure}\n";
|
|
}
|
|
}
|
|
echo "\e[1m══════════════════════════════════════════\e[0m\n\n";
|
|
} else {
|
|
echo json_encode([
|
|
'passed' => $summary['passed'],
|
|
'failed' => $summary['failed'],
|
|
'failures' => $summary['failures'],
|
|
], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
|
|
echo "\n";
|
|
}
|
|
|
|
exit($summary['failed'] > 0 ? 1 : 0);
|