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 $documents filename => PDF bytes */ private function response(array $documents): Crawler { $xml = ''; foreach ($documents as $name => $pdf) { $xml .= sprintf( '%sdata:application/pdf;base64,%s', $name, base64_encode($pdf), ); } $xml .= ''; $crawler = new Crawler(); $crawler->addXmlContent($xml); return $crawler; } }