Files
Mangarr/tests/Feature/Manga/ImportChapterTest.php
ext.jeremy.guillot@maxicoffee.domains ffceda606f feat: commit before changing gitea
2026-02-08 17:58:01 +01:00

132 lines
3.8 KiB
PHP

<?php
namespace App\Tests\Feature\Manga;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
use Symfony\Component\HttpFoundation\File\UploadedFile;
class ImportChapterTest extends WebTestCase
{
private const API_ENDPOINT = '/api/chapters/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',
'chapterNumber' => '1.5'
],
['file' => $file]
);
$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,
[
'chapterNumber' => '1.5'
],
['file' => $file]
);
$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_chapter_number_is_missing(): void
{
$client = static::createClient();
$file = $this->createValidCbzFile();
$client->request(
'POST',
self::API_ENDPOINT,
[
'mangaId' => 'some-manga-id'
],
['file' => $file]
);
$this->assertResponseStatusCodeSame(422);
$response = json_decode($client->getResponse()->getContent(), true);
$this->assertStringContainsString('chapterNumber 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',
'chapterNumber' => '1.5'
]
);
$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();
// Create a non-CBZ file
$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');
$client->request(
'POST',
self::API_ENDPOINT,
[
'mangaId' => 'some-manga-id',
'chapterNumber' => '1.5'
],
['file' => $file]
);
$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-chapter.cbz', 'application/x-cbz');
}
}