64 lines
1.4 KiB
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
|
|
);
|
|
}
|
|
}
|