chore: replace nelexa/zip with maennchen/zipstream-php
This commit is contained in:
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;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user