Files
Mangarr/tests/Feature/Manga/DownloadCbzTest.php
Jérémy Guillot 41c1fc5e2e fix(manga): générer le CBZ de téléchargement depuis les dossiers de pages
Les endpoints de téléchargement chapitre/volume plantaient (500 "file does
not exist") car le FileService traitait `pagesDirectory` comme un CBZ. Le
service reconstruit maintenant l'archive à la volée à partir des images du
dossier, et le nom du fichier chapitre inclut le titre du manga et le numéro.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 14:48:17 +02:00

82 lines
2.4 KiB
PHP

<?php
namespace App\Tests\Feature\Manga;
use App\Tests\Factory\ChapterFactory;
use App\Tests\Factory\MangaFactory;
use App\Tests\Feature\AbstractApiTestCase;
use Symfony\Component\HttpFoundation\Response;
use Zenstruck\Foundry\Test\Factories;
use Zenstruck\Foundry\Test\ResetDatabase;
class DownloadCbzTest extends AbstractApiTestCase
{
use ResetDatabase;
use Factories;
public function testItDownloadsChapterCbz(): void
{
// Arrange
$manga = MangaFactory::createOne([
'title' => 'One Piece',
'slug' => 'one-piece',
]);
$chapter = ChapterFactory::createOne([
'manga' => $manga,
'number' => 1.0,
'title' => 'Chapter 1',
'visible' => true,
'pagesDirectory' => '/app/tests/Shared/Files/test-pages',
]);
$chapterId = $chapter->getId();
// Act
static::createClient()->request('GET', "/api/manga/chapters/{$chapterId}/download");
// Then
$this->assertResponseIsSuccessful();
$response = static::getClient()->getResponse();
$this->assertEquals('application/x-cbz', $response->headers->get('Content-Type'));
$this->assertStringContainsString('attachment; filename=', $response->headers->get('Content-Disposition'));
$this->assertStringContainsString('Ch.001.cbz', $response->headers->get('Content-Disposition'));
}
public function testItReturns404ForNonExistentChapter(): void
{
// When
static::createClient()->request('GET', '/api/manga/chapters/999999/download');
// Then
$this->assertResponseStatusCodeSame(404);
}
public function testItReturns404ForChapterWithoutCbz(): void
{
// Arrange
$manga = MangaFactory::createOne([
'title' => 'Test Manga',
'slug' => 'test-manga',
]);
$chapter = ChapterFactory::createOne([
'manga' => $manga,
'number' => 1.0,
'title' => 'Test Chapter',
'visible' => true,
'cbzPath' => null, // No CBZ file
]);
$this->entityManager->flush();
$chapterId = $chapter->getId();
// When
static::createClient()->request('GET', "/api/manga/chapters/{$chapterId}/download");
// Then
$this->assertResponseStatusCodeSame(Response::HTTP_NOT_FOUND);
}
}