mangas = $mangas; $this->feeds = $feeds; $this->aggregates = $aggregates; } public function authenticate(): void { // No need to implement for tests } public function refreshToken(): void { // No need to implement for tests } public function searchManga(string $title): array { $results = []; foreach ($this->mangas as $id => $manga) { if (isset($manga['attributes']['title']['en']) && str_contains( strtolower($manga['attributes']['title']['en']), strtolower($title) ) ) { $results[] = array_merge(['id' => $id], $manga); } } return ['data' => $results]; } public function getMangaRatings(array $mangaIds): array { $statistics = []; foreach ($mangaIds as $id) { $statistics[$id] = [ 'rating' => ['average' => 4.5] // Default rating for tests ]; } return ['statistics' => $statistics]; } public function getMangaFeed(string $mangaId, int $offset = 0, int $limit = 500, string $order = 'asc'): array { if (!isset($this->feeds[$mangaId])) { return [ 'data' => [], 'total' => 0 ]; } $feed = $this->feeds[$mangaId]; if ($order === 'desc') { $feed = array_reverse($feed); } return [ 'data' => array_slice($feed, $offset, $limit), 'total' => count($feed) ]; } public function getMangaAggregate(string $mangaId): array { if (!isset($this->aggregates[$mangaId])) { return [ 'result' => 'ok', 'volumes' => [] ]; } return [ 'result' => 'ok', 'volumes' => $this->aggregates[$mangaId] ]; } public function getManga(string $mangaId): array { if (!isset($this->mangas[$mangaId])) { return ['data' => null]; } return [ 'result' => 'ok', 'data' => array_merge(['id' => $mangaId], $this->mangas[$mangaId]) ]; } public function getMangaRecommendations(string $mangaId): array { return ['data' => []]; } public function addManga(string $id, array $data): void { $this->mangas[$id] = $data; } public function addFeed(string $mangaId, array $feed): void { $this->feeds[$mangaId] = $feed; } public function addAggregate(string $mangaId, array $aggregate): void { $this->aggregates[$mangaId] = $aggregate; } }