87 lines
2.3 KiB
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,
|
|
);
|
|
}
|
|
}
|