Goal-Calibration/tests/Fakes/FakeScheduledNodeRepository.php

87 lines
2.3 KiB
PHP

<?php
namespace Tests\Fakes;
use App\ScheduledNode\CreateScheduledNodeDto;
use App\ScheduledNode\ScheduledNode;
use App\ScheduledNode\ScheduledNodeRepository;
use App\User\User;
class FakeScheduledNodeRepository implements ScheduledNodeRepository
{
private array $existingScheduledNodes = [];
private int $numberOfTimesCreateCalled = 0;
public function create(CreateScheduledNodeDto $dto): ScheduledNode
{
$this->numberOfTimesCreateCalled++;
$id = $this->nextId();
$scheduledNode = new ScheduledNode(
id: $id,
date: $dto->date,
plan: $dto->plan,
node: $dto->node,
completed: false,
);
$this->existingScheduledNodes[$id] = $scheduledNode;
return $scheduledNode;
}
public function update(ScheduledNode $node): ScheduledNode
{
$this->existingScheduledNodes[$node->getId()] = $node;
return new ScheduledNode(
id: $node->getId(),
date: $node->getDate(),
plan: $node->getPlan(),
node: $node->getNode(),
completed: $node->getCompleted()
);
}
public function find(int $id): ?ScheduledNode
{
return array_find(
$this->existingScheduledNodes,
function (ScheduledNode $scheduledNode) use ($id) {
return $scheduledNode->getId() === $id;
}
);
}
public function getNumberOfTimesCreateCalled(): int
{
return $this->numberOfTimesCreateCalled;
}
private function nextId(): int
{
return count($this->existingScheduledNodes);
}
public function findByUser(User $user): array
{
$scheduledNodes = array_filter(
$this->existingScheduledNodes,
function (ScheduledNode $node) use ($user) {
return $node->getPlan()->getUser()->getId() === $user->getId();
}
);
return array_map(
function (ScheduledNode $node) {
return new ScheduledNode(
id: $node->getId(),
date: $node->getDate(),
plan: $node->getPlan(),
node: $node->getNode(),
completed: $node->getCompleted(),
);
},
$scheduledNodes,
);
}
}