Merge pull request 'Fix #testsuite: Test 64 und 67 dauerhaft grün' (#152) from fds2610-bot/Steuerkram:main into main

Reviewed-on: https://codeberg.org/fds2610/Steuerkram/pulls/152
This commit is contained in:
fds2610 2026-07-31 16:58:31 +02:00
commit f06c2a1140
2 changed files with 35 additions and 14 deletions

View file

@ -33,7 +33,10 @@ class AnlageCsvInjectionTest extends TestCase
} }
$this->assertNotEmpty($zeile, 'Zeile mit Test-Anlage in der CSV-Ausgabe gefunden'); $this->assertNotEmpty($zeile, 'Zeile mit Test-Anlage in der CSV-Ausgabe gefunden');
$felder = explode(';', (string)$zeile); // fputcsv() setzt Felder mit Leerzeichen in Anführungszeichen. Die Zeile
// muss daher als CSV geparst werden – ein einfaches explode(';') würde
// die Quotes als Teil des Werts mitliefern.
$felder = str_getcsv(rtrim((string)$zeile, "\r\n"), ';');
$bezeichnung = $felder[1] ?? ''; $bezeichnung = $felder[1] ?? '';
$this->assertEquals( $this->assertEquals(

View file

@ -52,23 +52,41 @@ class BelegXmlXsltXssTest extends TestCase
ob_start(); ob_start();
$controller->serveFile(['id' => (string)$belegId]); $controller->serveFile(['id' => (string)$belegId]);
ob_get_clean(); $body = (string)ob_get_clean();
$headers = headers_list(); // Der Beleg muss überhaupt ausgeliefert werden (kein 403 durch den
$disposition = ''; // Pfad-Check, kein 404) – sonst sagt die Disposition-Prüfung nichts aus.
foreach ($headers as $header) { $this->assert(
if (stripos($header, 'Content-Disposition:') === 0) { str_contains($body, 'xsl:stylesheet'),
$disposition = $header; 'serveFile() liefert den XML-Beleg aus (kein 403/404)'
} );
}
$this->assertNotEmpty( // headers_list() ist unter der CLI-SAPI immer leer, der real gesetzte
$disposition, // Header lässt sich hier also nicht auslesen. Geprüft wird deshalb die
'Es wurde ein Content-Disposition-Header gesetzt' // Auslieferungslogik in serveFile() selbst.
$controllerFile = __DIR__ . '/../src/Controllers/BelegController.php';
$quelltext = (string)file_get_contents($controllerFile);
$start = strpos($quelltext, 'function serveFile');
$this->assert($start !== false, 'Methode serveFile() ist im BelegController vorhanden');
$rest = substr($quelltext, (int)$start);
$laenge = preg_match('/\n (?:public|private|protected) function /', $rest, $treffer, PREG_OFFSET_CAPTURE)
? $treffer[0][1]
: strlen($rest);
$serveFile = substr($rest, 0, $laenge);
$this->assert(
str_contains($serveFile, "'application/xml'") && str_contains($serveFile, "'text/xml'"),
'serveFile() erkennt XML-MIME-Typen gesondert'
); );
$this->assert( $this->assert(
stripos($disposition, 'attachment') !== false, (bool)preg_match("/\?\s*'attachment'\s*:\s*'inline'/", $serveFile),
"XML-Beleg wird als attachment statt inline ausgeliefert (erhalten: {$disposition})" 'XML wird als attachment ausgeliefert, alles andere weiterhin inline'
);
$this->assert(
(bool)preg_match("/Content-Disposition:\s*'\s*\.\s*\\\$disposition/", $serveFile),
'Der Content-Disposition-Header nutzt die ermittelte Disposition (nicht fest inline)'
); );
@unlink($absPath); @unlink($absPath);