diff --git a/app/Node/NodeRepository.php b/app/Node/NodeRepository.php index ffd6d94..4fca50e 100644 --- a/app/Node/NodeRepository.php +++ b/app/Node/NodeRepository.php @@ -7,4 +7,6 @@ use App\Node\Node; interface NodeRepository { public function create(CreateNodeDto $dto): Node; + + public function find(int $id): ?Node; } diff --git a/tests/Fakes/FakeNodeRepository.php b/tests/Fakes/FakeNodeRepository.php index d214340..994f4a5 100644 --- a/tests/Fakes/FakeNodeRepository.php +++ b/tests/Fakes/FakeNodeRepository.php @@ -8,11 +8,44 @@ use App\Node\NodeRepository; class FakeNodeRepository implements NodeRepository { + private array $existingNodes = []; + public function create(CreateNodeDto $dto): Node { - return new Node( + $id = $this->nextId(); + $node = new Node( + id: $id, text: $dto->text, title: $dto->title, + parentNode: $dto->parentNode, + ); + $this->existingNodes[$id] = $node; + + return $node; + } + + private function nextId(): int + { + return count($this->existingNodes); + } + + public function find(int $id): ?Node + { + $node = array_find( + $this->existingNodes, + function (Node $node) use ($id) { + return $node->getId() === $id; + } + ); + if ($node === null) { + return nullj; + } + + return new Node( + id: $id, + title: $node->getTitle(), + text: $node->getText(), + parentNode: $node->getParentNode(), ); } }