114 lines
3.3 KiB
PHP
114 lines
3.3 KiB
PHP
<?php
|
|
|
|
namespace Tests\Unit\Node\UseCases;
|
|
|
|
use App\Node\Node;
|
|
use App\Node\NodeRepository;
|
|
use App\Node\UseCases\CreateNode;
|
|
use App\Node\UseCases\CreateNodeRequest;
|
|
use App\Text\CreateTextDto;
|
|
use App\Text\Text;
|
|
use DomainException;
|
|
use PHPUnit\Framework\TestCase;
|
|
use Tests\Fakes\FakeNodeRepository;
|
|
use Tests\Fakes\FakeTextRepository;
|
|
|
|
class CreateNodeTest extends TestCase
|
|
{
|
|
private FakeTextRepository $textRepo;
|
|
private FakeNodeRepository $nodeRepo;
|
|
private CreateNode $useCase;
|
|
|
|
public function setUp(): void
|
|
{
|
|
$this->textRepo = new FakeTextRepository();
|
|
$this->textRepo->create(new CreateTextDto(
|
|
name: 'text'
|
|
));
|
|
$this->nodeRepo = new FakeNodeRepository();
|
|
$this->useCase = new CreateNode(
|
|
nodeRepo: $this->nodeRepo,
|
|
textRepo: $this->textRepo,
|
|
);
|
|
}
|
|
|
|
public function test_create_node(): void
|
|
{
|
|
$node = $this->useCase->execute(new CreateNodeRequest(
|
|
textId: 0,
|
|
title: 'test',
|
|
parentNodeId: null,
|
|
));
|
|
$this->assertInstanceOf(NodeRepository::class, $this->nodeRepo);
|
|
$this->assertInstanceOf(Node::class, $node);
|
|
$this->assertEquals('test', $node->getTitle());
|
|
$this->assertEquals(0, $node->getId());
|
|
$this->assertEquals(null, $node->getParentNode());
|
|
}
|
|
|
|
public function test_node_belongs_to_text(): void
|
|
{
|
|
$node = $this->useCase->execute(new CreateNodeRequest(
|
|
textId: 0,
|
|
title: 'test',
|
|
parentNodeId: null,
|
|
));
|
|
$this->assertInstanceOf(Text::class, $node->getText());
|
|
}
|
|
|
|
public function test_throws_if_text_doesnt_exist(): void
|
|
{
|
|
$this->expectException(DomainException::class);
|
|
$this->expectExceptionMessage("Text with id: 1 doesnt exist");
|
|
$this->useCase->execute(new CreateNodeRequest(
|
|
textId: 1,
|
|
title: 'test',
|
|
parentNodeId: null,
|
|
));
|
|
}
|
|
|
|
public function test_has_parent_node(): void
|
|
{
|
|
$node1 = $this->useCase->execute(new CreateNodeRequest(
|
|
textId: 0,
|
|
title: 'test',
|
|
parentNodeId: null,
|
|
));
|
|
$node2 = $this->useCase->execute(new CreateNodeRequest(
|
|
textId: 0,
|
|
title: 'test',
|
|
parentNodeId: $node1->getId(),
|
|
));
|
|
$this->assertEquals(
|
|
$node1->getId(),
|
|
$node2->getParentNode()->getId()
|
|
);
|
|
}
|
|
|
|
public function test_nonexistant_parent_id_throws(): void
|
|
{
|
|
$this->expectException(DomainException::class);
|
|
$this->expectExceptionMessage("Node with id: 0 doesnt exist");
|
|
$this->useCase->execute(new CreateNodeRequest(
|
|
textId: 0,
|
|
title: 'test',
|
|
parentNodeId: 0,
|
|
));
|
|
}
|
|
|
|
public function test_one_root_node_per_text(): void
|
|
{
|
|
$this->expectException(DomainException::class);
|
|
$this->expectExceptionMessage('A root node already exists for this text');
|
|
$this->useCase->execute(new CreateNodeRequest(
|
|
textId: 0,
|
|
title: 'test',
|
|
parentNodeId: null,
|
|
));
|
|
$this->useCase->execute(new CreateNodeRequest(
|
|
textId: 0,
|
|
title: 'test',
|
|
parentNodeId: null,
|
|
));
|
|
}
|
|
}
|