tex/src/CompilerFake.php

63 lines
1.8 KiB
PHP

<?php
namespace Zoomyboy\Tex;
use Illuminate\Http\File;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Collection;
use PHPUnit\Framework\Assert;
class CompilerFake extends Compiler
{
/**
* @var array<int, Document>
*/
private array $compiledDocuments = [];
/**
* @param class-string<Document> $documentClass
* @param callable(Document): bool $check
*/
public function assertCompiled(string $documentClass, callable $check): void
{
$compilations = $this->getCompilations($documentClass);
Assert::assertFalse(
$compilations->isEmpty(),
'The TeX Document "'.$documentClass.'" has not been compiled at all.'
);
Assert::assertFalse(
$compilations->isEmpty(),
'The TeX Document "'.$documentClass.'" has not been compiled.'
);
$validDocuments = $compilations->filter(fn ($compilation) => $check($compilation));
Assert::assertNotEmpty($validDocuments, 'Failed that TeX Document "'.$documentClass.'" has been compiled with given check.');
}
/**
* @param class-string<Document> $documentClass
*
* @return Collection<int, Document>
*/
protected function getCompilations(string $documentClass): Collection
{
return collect($this->compiledDocuments)->filter(fn ($rendered) => get_class($rendered) === $documentClass);
}
public function compile(Document $document): self
{
$path = '/tmp/'.$document->filename().'.pdf';
$file = UploadedFile::fake()->create($document->filename().'.pdf', 100, 'application/pdf');
file_put_contents($path, $file->get());
$this->file = new File($path, true);
$this->compiledDocuments[] = $document;
return $this;
}
}