From aaab0e53793c6076ab1e72b2c58d9436d6dd133b Mon Sep 17 00:00:00 2001 From: Yisroel Baum Date: Sat, 8 Aug 2026 22:18:58 +0300 Subject: [PATCH] test element persistence --- .../Element/EloquentElementRepositoryTest.php | 86 +++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 backend/tests/Feature/Element/EloquentElementRepositoryTest.php diff --git a/backend/tests/Feature/Element/EloquentElementRepositoryTest.php b/backend/tests/Feature/Element/EloquentElementRepositoryTest.php new file mode 100644 index 0000000..edddeac --- /dev/null +++ b/backend/tests/Feature/Element/EloquentElementRepositoryTest.php @@ -0,0 +1,86 @@ +createSet('Bible'); + $repository = app(ElementRepository::class); + $genesisBook = $repository->create(new CreateElementDto( + set: $set, + name: 'Genesis', + kind: 'book', + parentElement: null, + )); + $exodusBook = $repository->create(new CreateElementDto( + set: $set, + name: 'Exodus', + kind: 'book', + parentElement: null, + )); + $genesisPortion = $repository->create(new CreateElementDto( + set: $set, + name: 'Genesis', + kind: 'portion', + parentElement: $genesisBook, + )); + $noahPortion = $repository->create(new CreateElementDto( + set: $set, + name: 'Noah', + kind: 'portion', + parentElement: $genesisBook, + )); + + $this->assertSame(1, $genesisBook->getPosition()); + $this->assertSame(2, $exodusBook->getPosition()); + $this->assertSame(1, $genesisPortion->getPosition()); + $this->assertSame(2, $noahPortion->getPosition()); + $this->assertDatabaseHas('elements', [ + 'id' => $genesisPortion->getId(), + 'set_id' => $set->getId(), + 'name' => 'Genesis', + 'kind' => 'portion', + 'parent_element_id' => $genesisBook->getId(), + 'position' => 1, + ]); + + $foundElement = $repository->find($noahPortion->getId()); + + $this->assertNotNull($foundElement); + $this->assertSame('Noah', $foundElement->getName()); + $this->assertSame('portion', $foundElement->getKind()); + $this->assertSame($set->getId(), $foundElement->getSet()->getId()); + $this->assertSame( + $genesisBook->getId(), + $foundElement->getParentElement()?->getId(), + ); + } + + private function createSet(string $name): Set + { + $creator = app(UserRepository::class)->create(new CreateUserDto( + email: new EmailAddress(strtolower($name) . '@example.com'), + passwordHash: 'hashed-password', + )); + + return app(SetRepository::class)->create(new CreateSetDto( + name: $name, + creator: $creator, + )); + } +}