Goal-Calibration/tests/Fakes/FakePlanRepository.php

64 lines
1.4 KiB
PHP

<?php
namespace Tests\Fakes;
use App\Plan\CreatePlanDto;
use App\Plan\Plan;
use App\Plan\PlanRepository;
use App\User\User;
class FakePlanRepository implements PlanRepository
{
/**
* @var Plan[]
*/
private array $existingPlans = [];
public function create(CreatePlanDto $dto): Plan
{
$id = $this->nextId();
$plan = new Plan(
id: $id,
name: $dto->name,
user: $dto->user,
);
$this->existingPlans[$id] = $plan;
return $plan;
}
private function nextId(): int
{
return count($this->existingPlans);
}
public function find(int $id): ?Plan
{
return array_find(
$this->existingPlans,
function (Plan $plan) use ($id) {
return $plan->getId() === $id;
}
);
}
public function findByUser(User $user): array
{
$plans = array_filter(
$this->existingPlans,
function (Plan $plan) use ($user) {
return $plan->getUser()->getId() === $user->getId();
}
);
return array_map(
function (Plan $plan) {
return new Plan(
id: $plan->getId(),
name: $plan->getName(),
user: $plan->getUser(),
);
},
$plans
);
}
}