Files
Mangarr/tests/Domain/Manga/Adapter/InMemoryMangadexClient.php
2025-02-11 18:28:30 +01:00

123 lines
3.0 KiB
PHP

<?php
namespace App\Tests\Domain\Manga\Adapter;
use App\Domain\Manga\Domain\Contract\Client\MangadexClientInterface;
class InMemoryMangadexClient implements MangadexClientInterface
{
private array $mangas = [];
private array $feeds = [];
private array $aggregates = [];
public function __construct(
array $mangas = [],
array $feeds = [],
array $aggregates = []
) {
$this->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 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;
}
}