request('GET', '/api/mangas'); // Then $this->assertResponseIsSuccessful(); $this->assertJsonContains([ 'total' => 0, 'page' => 1, 'limit' => 20, 'hasNextPage' => false, 'hasPreviousPage' => false, 'items' => [] ]); } public function testGetMangaListWithPagination(): void { // Given $this->createMangas(25); // When $client = static::createClient(); $response = $client->request('GET', '/api/mangas', [ 'query' => [ 'page' => 2, 'limit' => 10 ] ]); // Then $this->assertResponseIsSuccessful(); $data = $response->toArray(); $this->assertCount(10, $data['items']); $this->assertEquals(25, $data['total']); $this->assertEquals(2, $data['page']); $this->assertEquals(10, $data['limit']); $this->assertTrue($data['hasNextPage']); $this->assertTrue($data['hasPreviousPage']); } public function testGetMangaListWithSorting(): void { // Given $this->createManga('Manga B'); $this->createManga('Manga A'); $this->createManga('Manga C'); // When $client = static::createClient(); $response = $client->request('GET', '/api/mangas', [ 'query' => [ 'sortBy' => 'title', 'sortOrder' => 'asc' ] ]); // Then $this->assertResponseIsSuccessful(); $data = $response->toArray(); $this->assertCount(3, $data['items']); $this->assertEquals('Manga A', $data['items'][0]['title']); $this->assertEquals('Manga B', $data['items'][1]['title']); $this->assertEquals('Manga C', $data['items'][2]['title']); } private function createMangas(int $count): void { for ($i = 1; $i <= $count; $i++) { $this->createManga("Manga $i"); } } private function createManga(string $title): void { $manga = new Manga(); $manga->setTitle($title) ->setSlug(strtolower(str_replace(' ', '-', $title))) ->setDescription('Description test') ->setAuthor('Author test') ->setPublicationYear(2020) ->setGenres(['action']) ->setStatus('ongoing') ->setRating(4.5) ->setMonitored(false) ; $this->entityManager->persist($manga); $this->entityManager->flush(); } }