test filesystem abstraction
This commit is contained in:
parent
bc7937d2b3
commit
be2c51bfb7
10 changed files with 66 additions and 78 deletions
|
|
@ -3,9 +3,9 @@
|
|||
namespace Tests\Fakes;
|
||||
|
||||
use App\Shared\Files\FileToUpload;
|
||||
use App\Shared\Files\FileUploader;
|
||||
use App\Shared\Files\Filesystem;
|
||||
|
||||
class FakeFileUploader implements FileUploader
|
||||
class FakeFilesystem implements Filesystem
|
||||
{
|
||||
/**
|
||||
* @var array<int, array{file: FileToUpload, folder: string}>
|
||||
|
|
@ -17,6 +17,16 @@ class FakeFileUploader implements FileUploader
|
|||
*/
|
||||
public array $deletedPaths = [];
|
||||
|
||||
/**
|
||||
* @var string[]
|
||||
*/
|
||||
public array $readPaths = [];
|
||||
|
||||
/**
|
||||
* @var array<string, string>
|
||||
*/
|
||||
private array $filesByPath = [];
|
||||
|
||||
public function upload(FileToUpload $file, string $folder): string
|
||||
{
|
||||
$this->uploads[] = ['file' => $file, 'folder' => $folder];
|
||||
|
|
@ -33,4 +43,16 @@ class FakeFileUploader implements FileUploader
|
|||
{
|
||||
$this->deletedPaths[] = $path;
|
||||
}
|
||||
|
||||
public function put(string $path, string $contents): void
|
||||
{
|
||||
$this->filesByPath[$path] = $contents;
|
||||
}
|
||||
|
||||
public function read(string $path): ?string
|
||||
{
|
||||
$this->readPaths[] = $path;
|
||||
|
||||
return $this->filesByPath[$path] ?? null;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace Tests\Fakes;
|
||||
|
||||
use App\Shared\Files\StoredFileReader;
|
||||
|
||||
class FakeStoredFileReader implements StoredFileReader
|
||||
{
|
||||
/**
|
||||
* @var array<string, string>
|
||||
*/
|
||||
private array $filesByPath = [];
|
||||
|
||||
/**
|
||||
* @var string[]
|
||||
*/
|
||||
public array $readPaths = [];
|
||||
|
||||
public function put(string $path, string $contents): void
|
||||
{
|
||||
$this->filesByPath[$path] = $contents;
|
||||
}
|
||||
|
||||
public function read(string $path): ?string
|
||||
{
|
||||
$this->readPaths[] = $path;
|
||||
|
||||
return $this->filesByPath[$path] ?? null;
|
||||
}
|
||||
}
|
||||
|
|
@ -25,8 +25,7 @@ use App\Set\Set as DomainSet;
|
|||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\UploadedFile;
|
||||
use Tests\Fakes\FakeElementRepository;
|
||||
use Tests\Fakes\FakeFileUploader;
|
||||
use Tests\Fakes\FakeStoredFileReader;
|
||||
use Tests\Fakes\FakeFilesystem;
|
||||
use Tests\TestCase;
|
||||
|
||||
class ElementControllerTest extends TestCase
|
||||
|
|
@ -35,46 +34,43 @@ class ElementControllerTest extends TestCase
|
|||
|
||||
private FakeElementRepository $elementRepo;
|
||||
|
||||
private FakeFileUploader $fileUploader;
|
||||
|
||||
private FakeStoredFileReader $storedFileReader;
|
||||
private FakeFilesystem $filesystem;
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
$this->elementRepo = new FakeElementRepository();
|
||||
$this->fileUploader = new FakeFileUploader();
|
||||
$this->storedFileReader = new FakeStoredFileReader();
|
||||
$this->filesystem = new FakeFilesystem();
|
||||
$getElement = new GetElement($this->elementRepo);
|
||||
$updateElement = new UpdateElement(
|
||||
new UpdateTitle($this->elementRepo),
|
||||
new UpdateDescription($this->elementRepo),
|
||||
new UpdateIconImageUrl($this->elementRepo, $this->fileUploader),
|
||||
new UpdateIconImageUrl($this->elementRepo, $this->filesystem),
|
||||
new UpdateRichText($this->elementRepo),
|
||||
new UpdateShortPdfPath($this->elementRepo, $this->fileUploader),
|
||||
new UpdateLongPdfPath($this->elementRepo, $this->fileUploader),
|
||||
new UpdateShortPdfPath($this->elementRepo, $this->filesystem),
|
||||
new UpdateLongPdfPath($this->elementRepo, $this->filesystem),
|
||||
new UpdateYoutubeUrl($this->elementRepo),
|
||||
new UpdateIconImage(
|
||||
$this->elementRepo,
|
||||
$this->fileUploader,
|
||||
$this->filesystem,
|
||||
),
|
||||
new UpdateShortPdf(
|
||||
$this->elementRepo,
|
||||
$this->fileUploader,
|
||||
$this->filesystem,
|
||||
),
|
||||
new UpdateLongPdf(
|
||||
$this->elementRepo,
|
||||
$this->fileUploader,
|
||||
$this->filesystem,
|
||||
),
|
||||
$this->elementRepo,
|
||||
);
|
||||
$this->controller = new ElementController(
|
||||
$getElement,
|
||||
new CreateChildElement($this->elementRepo),
|
||||
new DeleteChildElement($this->elementRepo, $this->fileUploader),
|
||||
new DeleteChildElement($this->elementRepo, $this->filesystem),
|
||||
new ReorderChildElements($this->elementRepo),
|
||||
$updateElement,
|
||||
new GetElementPdf($this->storedFileReader),
|
||||
$this->fileUploader,
|
||||
new GetElementPdf($this->filesystem),
|
||||
$this->filesystem,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -252,7 +248,7 @@ class ElementControllerTest extends TestCase
|
|||
|
||||
public function testShowPdfReturnsPdfResponse(): void
|
||||
{
|
||||
$this->storedFileReader->put(
|
||||
$this->filesystem->put(
|
||||
'element-pdfs/short/baderech.pdf',
|
||||
'pdf-bytes',
|
||||
);
|
||||
|
|
@ -311,7 +307,7 @@ class ElementControllerTest extends TestCase
|
|||
);
|
||||
$this->assertSame(
|
||||
'element-icons',
|
||||
$this->fileUploader->uploads[0]['folder'],
|
||||
$this->filesystem->uploads[0]['folder'],
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -345,7 +341,7 @@ class ElementControllerTest extends TestCase
|
|||
$this->assertArrayNotHasKey('pdfPath', $body['element']);
|
||||
$this->assertSame(
|
||||
'element-pdfs/short',
|
||||
$this->fileUploader->uploads[0]['folder'],
|
||||
$this->filesystem->uploads[0]['folder'],
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -378,7 +374,7 @@ class ElementControllerTest extends TestCase
|
|||
);
|
||||
$this->assertSame(
|
||||
'element-pdfs/long',
|
||||
$this->fileUploader->uploads[0]['folder'],
|
||||
$this->filesystem->uploads[0]['folder'],
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -10,21 +10,21 @@ use App\Exceptions\BadRequestException;
|
|||
use App\Exceptions\NotFoundException;
|
||||
use App\Set\Set as DomainSet;
|
||||
use Tests\Fakes\FakeElementRepository;
|
||||
use Tests\Fakes\FakeFileUploader;
|
||||
use Tests\Fakes\FakeFilesystem;
|
||||
use Tests\TestCase;
|
||||
|
||||
class DeleteChildElementTest extends TestCase
|
||||
{
|
||||
private FakeElementRepository $elementRepository;
|
||||
|
||||
private FakeFileUploader $fileUploader;
|
||||
private FakeFilesystem $fileUploader;
|
||||
|
||||
private DeleteChildElement $deleteChildElement;
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
$this->elementRepository = new FakeElementRepository();
|
||||
$this->fileUploader = new FakeFileUploader();
|
||||
$this->fileUploader = new FakeFilesystem();
|
||||
$this->deleteChildElement = new DeleteChildElement(
|
||||
$this->elementRepository,
|
||||
$this->fileUploader,
|
||||
|
|
|
|||
|
|
@ -5,24 +5,24 @@ namespace Tests\Unit\Element\UseCases;
|
|||
use App\Element\UseCases\GetElementPdf\GetElementPdf;
|
||||
use App\Element\UseCases\GetElementPdf\GetElementPdfRequest;
|
||||
use App\Exceptions\NotFoundException;
|
||||
use Tests\Fakes\FakeStoredFileReader;
|
||||
use Tests\Fakes\FakeFilesystem;
|
||||
use Tests\TestCase;
|
||||
|
||||
class GetElementPdfTest extends TestCase
|
||||
{
|
||||
private FakeStoredFileReader $storedFileReader;
|
||||
private FakeFilesystem $filesystem;
|
||||
|
||||
private GetElementPdf $useCase;
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
$this->storedFileReader = new FakeStoredFileReader();
|
||||
$this->useCase = new GetElementPdf($this->storedFileReader);
|
||||
$this->filesystem = new FakeFilesystem();
|
||||
$this->useCase = new GetElementPdf($this->filesystem);
|
||||
}
|
||||
|
||||
public function testReturnsShortPdfFile(): void
|
||||
{
|
||||
$this->storedFileReader->put(
|
||||
$this->filesystem->put(
|
||||
'element-pdfs/short/baderech.pdf',
|
||||
'short-pdf-bytes',
|
||||
);
|
||||
|
|
@ -37,13 +37,13 @@ class GetElementPdfTest extends TestCase
|
|||
$this->assertSame('application/pdf', $result->getMimeType());
|
||||
$this->assertSame(
|
||||
['element-pdfs/short/baderech.pdf'],
|
||||
$this->storedFileReader->readPaths,
|
||||
$this->filesystem->readPaths,
|
||||
);
|
||||
}
|
||||
|
||||
public function testReturnsLongPdfFile(): void
|
||||
{
|
||||
$this->storedFileReader->put(
|
||||
$this->filesystem->put(
|
||||
'element-pdfs/long/baderech-long.pdf',
|
||||
'long-pdf-bytes',
|
||||
);
|
||||
|
|
@ -58,7 +58,7 @@ class GetElementPdfTest extends TestCase
|
|||
$this->assertSame('application/pdf', $result->getMimeType());
|
||||
$this->assertSame(
|
||||
['element-pdfs/long/baderech-long.pdf'],
|
||||
$this->storedFileReader->readPaths,
|
||||
$this->filesystem->readPaths,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -21,19 +21,19 @@ use App\Element\UseCases\UpdateElement\UpdateYoutubeUrlRequest;
|
|||
use App\Exceptions\BadRequestException;
|
||||
use App\Set\Set as DomainSet;
|
||||
use Tests\Fakes\FakeElementRepository;
|
||||
use Tests\Fakes\FakeFileUploader;
|
||||
use Tests\Fakes\FakeFilesystem;
|
||||
use Tests\TestCase;
|
||||
|
||||
class UpdateElementFieldsTest extends TestCase
|
||||
{
|
||||
private FakeElementRepository $elementRepo;
|
||||
|
||||
private FakeFileUploader $fileUploader;
|
||||
private FakeFilesystem $fileUploader;
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
$this->elementRepo = new FakeElementRepository();
|
||||
$this->fileUploader = new FakeFileUploader();
|
||||
$this->fileUploader = new FakeFilesystem();
|
||||
}
|
||||
|
||||
public function testUpdateTitleUpdatesOnlyTitle(): void
|
||||
|
|
|
|||
|
|
@ -20,21 +20,21 @@ use App\Exceptions\BadRequestException;
|
|||
use App\Exceptions\NotFoundException;
|
||||
use App\Set\Set as DomainSet;
|
||||
use Tests\Fakes\FakeElementRepository;
|
||||
use Tests\Fakes\FakeFileUploader;
|
||||
use Tests\Fakes\FakeFilesystem;
|
||||
use Tests\TestCase;
|
||||
|
||||
class UpdateElementTest extends TestCase
|
||||
{
|
||||
private FakeElementRepository $elementRepo;
|
||||
|
||||
private FakeFileUploader $fileUploader;
|
||||
private FakeFilesystem $fileUploader;
|
||||
|
||||
private UpdateElement $updateElement;
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
$this->elementRepo = new FakeElementRepository();
|
||||
$this->fileUploader = new FakeFileUploader();
|
||||
$this->fileUploader = new FakeFilesystem();
|
||||
$this->updateElement = new UpdateElement(
|
||||
new UpdateTitle($this->elementRepo),
|
||||
new UpdateDescription($this->elementRepo),
|
||||
|
|
|
|||
|
|
@ -10,21 +10,21 @@ use App\Exceptions\BadRequestException;
|
|||
use App\Exceptions\NotFoundException;
|
||||
use App\Set\Set as DomainSet;
|
||||
use Tests\Fakes\FakeElementRepository;
|
||||
use Tests\Fakes\FakeFileUploader;
|
||||
use Tests\Fakes\FakeFilesystem;
|
||||
use Tests\TestCase;
|
||||
|
||||
class UpdateIconImageTest extends TestCase
|
||||
{
|
||||
private FakeElementRepository $elementRepository;
|
||||
|
||||
private FakeFileUploader $fileUploader;
|
||||
private FakeFilesystem $fileUploader;
|
||||
|
||||
private UpdateIconImage $useCase;
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
$this->elementRepository = new FakeElementRepository();
|
||||
$this->fileUploader = new FakeFileUploader();
|
||||
$this->fileUploader = new FakeFilesystem();
|
||||
$this->useCase = new UpdateIconImage(
|
||||
$this->elementRepository,
|
||||
$this->fileUploader,
|
||||
|
|
|
|||
|
|
@ -9,21 +9,21 @@ use App\Element\UseCases\UpdateElement\UpdateLongPdfRequest;
|
|||
use App\Exceptions\BadRequestException;
|
||||
use App\Set\Set as DomainSet;
|
||||
use Tests\Fakes\FakeElementRepository;
|
||||
use Tests\Fakes\FakeFileUploader;
|
||||
use Tests\Fakes\FakeFilesystem;
|
||||
use Tests\TestCase;
|
||||
|
||||
class UpdateLongPdfTest extends TestCase
|
||||
{
|
||||
private FakeElementRepository $elementRepository;
|
||||
|
||||
private FakeFileUploader $fileUploader;
|
||||
private FakeFilesystem $fileUploader;
|
||||
|
||||
private UpdateLongPdf $useCase;
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
$this->elementRepository = new FakeElementRepository();
|
||||
$this->fileUploader = new FakeFileUploader();
|
||||
$this->fileUploader = new FakeFilesystem();
|
||||
$this->useCase = new UpdateLongPdf(
|
||||
$this->elementRepository,
|
||||
$this->fileUploader,
|
||||
|
|
|
|||
|
|
@ -10,21 +10,21 @@ use App\Exceptions\BadRequestException;
|
|||
use App\Exceptions\NotFoundException;
|
||||
use App\Set\Set as DomainSet;
|
||||
use Tests\Fakes\FakeElementRepository;
|
||||
use Tests\Fakes\FakeFileUploader;
|
||||
use Tests\Fakes\FakeFilesystem;
|
||||
use Tests\TestCase;
|
||||
|
||||
class UpdateShortPdfTest extends TestCase
|
||||
{
|
||||
private FakeElementRepository $elementRepository;
|
||||
|
||||
private FakeFileUploader $fileUploader;
|
||||
private FakeFilesystem $fileUploader;
|
||||
|
||||
private UpdateShortPdf $useCase;
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
$this->elementRepository = new FakeElementRepository();
|
||||
$this->fileUploader = new FakeFileUploader();
|
||||
$this->fileUploader = new FakeFilesystem();
|
||||
$this->useCase = new UpdateShortPdf(
|
||||
$this->elementRepository,
|
||||
$this->fileUploader,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue