repository = new InMemoryMangaRepository(); $this->imageProcessor = new InMemoryImageProcessor(); $this->handler = new CreateMangaHandler( $this->repository, $this->imageProcessor ); } public function testHandleSuccess(): void { // Arrange $command = new CreateManga( title: 'One Piece', slug: 'one-piece', description: 'Description test', author: 'Eiichiro Oda', publicationYear: 1997, genres: ['action', 'adventure'], status: 'ongoing', externalId: 'external-123', imageUrl: 'http://example.com/image.jpg', rating: 4.5 ); // Act $this->handler->handle($command); // Assert $savedManga = $this->repository->findAll()[0]; $this->assertEquals('One Piece', $savedManga->getTitle()->getValue()); $this->assertEquals('one-piece', $savedManga->getSlug()->getValue()); $this->assertEquals('external-123', $savedManga->getExternalId()?->getValue()); $this->assertNotNull($savedManga->getImageUrls()); $this->assertStringStartsWith('/images/full/', $savedManga->getImageUrls()->getFull()); $this->assertStringStartsWith('/images/thumbnails/', $savedManga->getImageUrls()->getThumbnail()); } public function testHandleWithoutImage(): void { // Arrange $command = new CreateManga( title: 'One Piece', slug: 'one-piece', description: 'Description test', author: 'Eiichiro Oda', publicationYear: 1997, genres: ['action', 'adventure'], status: 'ongoing', externalId: 'external-123', imageUrl: null, rating: 4.5 ); // Act $this->handler->handle($command); // Assert $savedManga = $this->repository->findAll()[0]; $this->assertEquals('One Piece', $savedManga->getTitle()->getValue()); $this->assertNull($savedManga->getImageUrls()); } }