Files
Mangarr/tests/Feature/Manga/ImportChapterTest.php
ext.jeremy.guillot@maxicoffee.domains dae215dd3d
All checks were successful
Build and Deploy / deploy (push) Successful in 9m36s
feat: ajout de claude + correction des tests
2026-03-09 17:09:31 +01:00

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 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],
['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,
[
'chapterNumber' => '1.5'
],
['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_chapter_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('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'
],
[],
['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',
'chapterNumber' => '1.5'
],
['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-chapter.cbz', 'application/x-cbz', null, true);
}
}