63 lines
1.8 KiB
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;
|
|
}
|
|
}
|