133 lines
4.1 KiB
PHP
133 lines
4.1 KiB
PHP
<?php
|
|
|
|
namespace App\Tests\Feature\Manga;
|
|
|
|
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
|
|
use Symfony\Component\HttpFoundation\File\UploadedFile;
|
|
|
|
class ImportVolumeTest extends WebTestCase
|
|
{
|
|
private const API_ENDPOINT = '/api/volumes/import';
|
|
|
|
public function test_it_returns_404_when_manga_not_found(): void
|
|
{
|
|
$client = static::createClient();
|
|
$file = $this->createValidCbzFile();
|
|
|
|
$client->request(
|
|
'POST',
|
|
self::API_ENDPOINT,
|
|
[
|
|
'mangaId' => 'non-existent-manga-id',
|
|
'volumeNumber' => '1'
|
|
],
|
|
['file' => $file],
|
|
['CONTENT_TYPE' => 'multipart/form-data']
|
|
);
|
|
|
|
$this->assertResponseStatusCodeSame(404);
|
|
$response = json_decode($client->getResponse()->getContent(), true);
|
|
$this->assertEquals('Manga not found', $response['error']);
|
|
}
|
|
|
|
public function test_it_returns_422_when_manga_id_is_missing(): void
|
|
{
|
|
$client = static::createClient();
|
|
$file = $this->createValidCbzFile();
|
|
|
|
$client->request(
|
|
'POST',
|
|
self::API_ENDPOINT,
|
|
[
|
|
'volumeNumber' => '1'
|
|
],
|
|
['file' => $file],
|
|
['CONTENT_TYPE' => 'multipart/form-data']
|
|
);
|
|
|
|
$this->assertResponseStatusCodeSame(422);
|
|
$response = json_decode($client->getResponse()->getContent(), true);
|
|
$this->assertStringContainsString('mangaId is required', $response[0]['message']);
|
|
}
|
|
|
|
public function test_it_returns_422_when_volume_number_is_missing(): void
|
|
{
|
|
$client = static::createClient();
|
|
$file = $this->createValidCbzFile();
|
|
|
|
$client->request(
|
|
'POST',
|
|
self::API_ENDPOINT,
|
|
[
|
|
'mangaId' => 'some-manga-id'
|
|
],
|
|
['file' => $file],
|
|
['CONTENT_TYPE' => 'multipart/form-data']
|
|
);
|
|
|
|
$this->assertResponseStatusCodeSame(422);
|
|
$response = json_decode($client->getResponse()->getContent(), true);
|
|
$this->assertStringContainsString('volumeNumber is required', $response[0]['message']);
|
|
}
|
|
|
|
public function test_it_returns_422_when_file_is_missing(): void
|
|
{
|
|
$client = static::createClient();
|
|
|
|
$client->request(
|
|
'POST',
|
|
self::API_ENDPOINT,
|
|
[
|
|
'mangaId' => 'some-manga-id',
|
|
'volumeNumber' => '1'
|
|
],
|
|
[],
|
|
['CONTENT_TYPE' => 'multipart/form-data']
|
|
);
|
|
|
|
$this->assertResponseStatusCodeSame(422);
|
|
$response = json_decode($client->getResponse()->getContent(), true);
|
|
$this->assertStringContainsString('Please upload a file', $response[0]['message']);
|
|
}
|
|
|
|
public function test_it_returns_422_when_file_is_not_cbz(): void
|
|
{
|
|
$client = static::createClient();
|
|
|
|
$tempFile = tempnam(sys_get_temp_dir(), 'test_');
|
|
file_put_contents($tempFile, 'This is not a CBZ file');
|
|
$file = new UploadedFile($tempFile, 'test.txt', 'text/plain', null, true);
|
|
|
|
$client->request(
|
|
'POST',
|
|
self::API_ENDPOINT,
|
|
[
|
|
'mangaId' => 'some-manga-id',
|
|
'volumeNumber' => '1'
|
|
],
|
|
['file' => $file],
|
|
['CONTENT_TYPE' => 'multipart/form-data']
|
|
);
|
|
|
|
$this->assertResponseStatusCodeSame(422);
|
|
$response = json_decode($client->getResponse()->getContent(), true);
|
|
$this->assertStringContainsString('valid CBZ file', $response[0]['message']);
|
|
}
|
|
|
|
private function createValidCbzFile(): UploadedFile
|
|
{
|
|
$tmpFile = tempnam(sys_get_temp_dir(), 'cbz_');
|
|
unlink($tmpFile);
|
|
|
|
$zip = new \ZipArchive();
|
|
if ($zip->open($tmpFile, \ZipArchive::CREATE | \ZipArchive::OVERWRITE) !== true) {
|
|
throw new \RuntimeException('Cannot create test CBZ file');
|
|
}
|
|
|
|
$zip->addFromString('image1.jpg', 'fake-image-data');
|
|
$zip->close();
|
|
|
|
return new UploadedFile($tmpFile, 'test-volume.cbz', 'application/x-cbz', null, true);
|
|
}
|
|
}
|