69 lines
2.1 KiB
PHP
69 lines
2.1 KiB
PHP
<?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;
|
|
}
|
|
}
|