feat: ajout de la gestion des chapitres de manga, incluant la récupération et la sauvegarde des chapitres en français et en anglais, ainsi que l'optimisation de la logique de sauvegarde pour éviter les doublons
This commit is contained in:
parent
34dfa57dc0
commit
0111f1b5f1
@@ -9,12 +9,13 @@ use App\Domain\Scraping\Domain\Model\ValueObject\ImageUrl;
|
||||
use App\Domain\Scraping\Domain\Model\ValueObject\PageNumber;
|
||||
use Ramsey\Uuid\Uuid;
|
||||
use Symfony\Component\Messenger\MessageBusInterface;
|
||||
use App\Domain\Scraping\Domain\Contract\Repository\ScrapingJobRepositoryInterface;
|
||||
use App\Domain\Shared\Domain\Contract\JobRepositoryInterface;
|
||||
use App\Domain\Shared\Domain\Model\JobStatus;
|
||||
|
||||
class ScrapingStatusTest extends ApiTestCase
|
||||
{
|
||||
private MessageBusInterface $messageBus;
|
||||
private ScrapingJobRepositoryInterface $repository;
|
||||
private JobRepositoryInterface $repository;
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
@@ -23,7 +24,7 @@ class ScrapingStatusTest extends ApiTestCase
|
||||
self::bootKernel();
|
||||
|
||||
$this->messageBus = self::getContainer()->get(MessageBusInterface::class);
|
||||
$this->repository = self::getContainer()->get(ScrapingJobRepositoryInterface::class);
|
||||
$this->repository = self::getContainer()->get(JobRepositoryInterface::class);
|
||||
}
|
||||
|
||||
public function testGetScrapingStatus(): void
|
||||
@@ -32,27 +33,39 @@ class ScrapingStatusTest extends ApiTestCase
|
||||
$jobId = Uuid::uuid4()->toString();
|
||||
$job = new ScrapingJob($jobId, 'manga-123', 1, 'source-789');
|
||||
|
||||
$job->addPage(new PageNumber(1), new ImageUrl('http://example.com/page1.jpg'));
|
||||
$job->addPage(new PageNumber(2), new ImageUrl('http://example.com/page2.jpg'));
|
||||
$job->start();
|
||||
|
||||
$this->repository->save($job);
|
||||
|
||||
// When
|
||||
$response = static::createClient()->request('GET', '/api/scraping/jobs/'.$jobId.'/status');
|
||||
$response = static::createClient()->request('GET', '/api/jobs?status=in_progress');
|
||||
|
||||
// Then
|
||||
$this->assertResponseIsSuccessful();
|
||||
$this->assertJsonContains([
|
||||
'jobId' => $jobId,
|
||||
'status' => ScrapingStatus::IN_PROGRESS->value,
|
||||
'progress' => 0
|
||||
]);
|
||||
|
||||
$responseData = $response->toArray();
|
||||
|
||||
$this->assertArrayHasKey('hydra:member', $responseData);
|
||||
$this->assertIsArray($responseData['hydra:member']);
|
||||
$this->assertCount(1, $responseData['hydra:member']);
|
||||
|
||||
$jobData = $responseData['hydra:member'][0];
|
||||
$this->assertEquals('/api/jobs/' . $jobId, $jobData['@id']);
|
||||
$this->assertEquals('Job', $jobData['@type']);
|
||||
$this->assertEquals($jobId, $jobData['id']);
|
||||
$this->assertEquals('scraping_job', $jobData['type']);
|
||||
$this->assertEquals(JobStatus::IN_PROGRESS->value, $jobData['status']);
|
||||
$this->assertEquals([
|
||||
'mangaId' => 'manga-123',
|
||||
'chapterNumber' => 1,
|
||||
'sourceId' => 'source-789'
|
||||
], $jobData['context']);
|
||||
}
|
||||
|
||||
public function testGetScrapingStatusForNonExistentJob(): void
|
||||
{
|
||||
// When
|
||||
$response = static::createClient()->request('GET', '/api/scraping/jobs/non-existent-id/status', [
|
||||
$response = static::createClient()->request('GET', '/api/jobs/non-existent-id?status=in_progress', [
|
||||
'headers' => ['Accept' => 'application/json']
|
||||
]);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user