chore: replace nelexa/zip with maennchen/zipstream-php

This commit is contained in:
fromme committed 2026-10-01 10:48:49 +02:00
1 parent 289741d5d4
commit 2bb0148e49
4 files changed
+87 -81

No files matched your search

@@ -0,0 +1,68 @@
<?php
declare(strict_types=1);
namespace App\Tests\BusProNet\XmlParser;
use App\BusProNet\XmlParser\DocumentsParser;
use PHPUnit\Framework\TestCase;
use Symfony\Component\DomCrawler\Crawler;
class DocumentsParserTest extends TestCase
{
public function testSingleDocumentIsReturnedAsPdf(): void
{
$file = new DocumentsParser()->parseDocuments($this->response(['Rechnung' => 'pdf-one']));
self::assertNotNull($file);
self::assertSame('Rechnung.pdf', $file->filename);
self::assertSame('application/pdf', $file->mimeType);
self::assertSame('pdf-one', $file->content);
}
public function testMultipleDocumentsAreBundledIntoZip(): void
{
$file = new DocumentsParser()->parseDocuments($this->response([
'Rechnung' => 'pdf-one',
'Reiseplan' => 'pdf-two',
]));
self::assertNotNull($file);
self::assertSame('reisedokumente.zip', $file->filename);
self::assertSame('application/zip', $file->mimeType);
$path = tempnam(sys_get_temp_dir(), 'docs');
try {
file_put_contents($path, $file->content);
$zip = new \ZipArchive();
self::assertTrue($zip->open($path, \ZipArchive::CHECKCONS));
self::assertSame(2, $zip->numFiles);
self::assertSame('pdf-one', $zip->getFromName('Rechnung.pdf'));
self::assertSame('pdf-two', $zip->getFromName('Reiseplan.pdf'));
$zip->close();
} finally {
unlink($path);
}
}
/**
* @param array<string, string> $documents filename => PDF bytes
*/
private function response(array $documents): Crawler
{
$xml = '<antwort><reisedokumente>';
foreach ($documents as $name => $pdf) {
$xml .= sprintf(
'<reisedokument><datei>%s</datei><pdf>data:application/pdf;base64,%s</pdf></reisedokument>',
$name,
base64_encode($pdf),
);
}
$xml .= '</reisedokumente></antwort>';
$crawler = new Crawler();
$crawler->addXmlContent($xml);
return $crawler;
}
}