From 1845e0cdbab269c30db87883d8131136029e977a Mon Sep 17 00:00:00 2001 From: Kevin Frantz Date: Sat, 24 Nov 2018 22:17:03 +0100 Subject: [PATCH] Optimized AbstractSource entity for members --- application/src/Entity/Meta/Relation.php | 2 +- .../src/Entity/Source/AbstractSource.php | 8 +- .../Repository/UserSourceRepositoryTest.php | 85 ++++++++----------- 3 files changed, 39 insertions(+), 56 deletions(-) diff --git a/application/src/Entity/Meta/Relation.php b/application/src/Entity/Meta/Relation.php index 17b3b36..9f7be55 100644 --- a/application/src/Entity/Meta/Relation.php +++ b/application/src/Entity/Meta/Relation.php @@ -62,7 +62,7 @@ class Relation extends AbstractMeta implements RelationInterface /** * @ORM\OneToOne(targetEntity="Law",cascade={"persist", "remove"}) - * @ORM\JoinColumn(name="law_id", referencedColumnName="id") + * @ORM\JoinColumn(name="law_id", referencedColumnName="id",onDelete="CASCADE") * * @var LawInterface */ diff --git a/application/src/Entity/Source/AbstractSource.php b/application/src/Entity/Source/AbstractSource.php index e9957d5..65e4e05 100644 --- a/application/src/Entity/Source/AbstractSource.php +++ b/application/src/Entity/Source/AbstractSource.php @@ -72,17 +72,17 @@ abstract class AbstractSource extends AbstractEntity implements SourceInterface * Many Sources have many Source Members. * * @var Collection|SourceInterface[] - * @ORM\ManyToMany(targetEntity="AbstractSource", inversedBy="memberships",cascade={"persist"}) + * @ORM\ManyToMany(targetEntity="AbstractSource", inversedBy="memberships",cascade={"persist", "remove"}) * @ORM\JoinTable(name="source_members", - * joinColumns={@ORM\JoinColumn(name="source_id", referencedColumnName="id")}, - * inverseJoinColumns={@ORM\JoinColumn(name="member_id", referencedColumnName="id")} + * joinColumns={@ORM\JoinColumn(name="source_id", referencedColumnName="id",onDelete="CASCADE")}, + * inverseJoinColumns={@ORM\JoinColumn(name="member_id", referencedColumnName="id",onDelete="CASCADE")} * ) */ protected $members; /** * @var Collection|SourceInterface[] - * @ORM\ManyToMany(targetEntity="AbstractSource",mappedBy="members",cascade={"persist"}) + * @ORM\ManyToMany(targetEntity="AbstractSource",mappedBy="members") */ protected $memberships; diff --git a/application/tests/Unit/Repository/UserSourceRepositoryTest.php b/application/tests/Unit/Repository/UserSourceRepositoryTest.php index b7734d8..ca4a887 100644 --- a/application/tests/Unit/Repository/UserSourceRepositoryTest.php +++ b/application/tests/Unit/Repository/UserSourceRepositoryTest.php @@ -4,11 +4,13 @@ namespace tests\Unit\Repository; use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase; use Doctrine\ORM\EntityManager; -use App\Entity\UserInterface; -use App\Repository\UserSourceRepository; -use App\Entity\Source\Complex\UserSourceInterface; use App\Entity\Source\Complex\UserSource; +/** + * @todo refactor this to an integration test! + * + * @author kevinfrantz + */ class UserSourceRepositoryTest extends KernelTestCase { /** @@ -16,70 +18,51 @@ class UserSourceRepositoryTest extends KernelTestCase */ protected $entityManager; - /** - * @var UserSourceRepository - */ - protected $userSourceRepository; - - /** - * @var UserSourceInterface - */ - protected $loadedUserSource; - - /** - * @var UserInterface - */ - protected $user; - - /** - * @var UserSourceInterface - */ - protected $userSource; - public function setUp(): void { $kernel = self::bootKernel(); $this->entityManager = $kernel->getContainer() ->get('doctrine') ->getManager(); - $this->userSourceRepository = $this->entityManager->getRepository(UserSource::class); - $this->userSource = new UserSource(); } - public function testMemberships(): void + public function testAddAndRemoveMember(): void { - $userSource2 = new UserSource(); - $this->userSource->getMemberships()->add($userSource2); - $this->entityManager->persist($this->userSource); + $insertSource = new UserSource(); + $origineSource = new UserSource(); + $origineSource->addMember($insertSource); + $this->entityManager->persist($insertSource); + $this->entityManager->persist($origineSource); $this->entityManager->flush(); - $userSource2Id = $userSource2->getId(); - $userSourceId = $this->userSource->getId(); - $this->loadedUserSource = $this->userSourceRepository->find($userSourceId); - $this->assertGreaterThan(0, $userSource2Id); - $this->assertEquals($userSource2, $this->loadedUserSource->getMemberships()->get(0)); - $this->deleteUserSource(); - $this->assertGreaterThan(0, $userSource2Id); - $this->entityManager->remove($userSource2); + $this->assertGreaterThan(0, $insertSource->getId()); + $this->assertGreaterThan(0, $origineSource->getId()); + $this->assertEquals($insertSource, $origineSource->getMembers() + ->get(0)); + $this->assertEquals($origineSource, $insertSource->getMemberships() + ->get(0)); + $this->assertNull($origineSource->removeMember($insertSource)); + $this->assertEquals(0, $origineSource->getMembers() + ->count()); + $this->assertEquals(0, $insertSource->getMemberships() + ->count()); + $this->entityManager->remove($origineSource); $this->entityManager->flush(); - $this->assertNull($this->userSourceRepository->find($userSource2Id)); + $this->assertGreaterThan(0, $insertSource->getId()); + $this->entityManager->remove($insertSource); + $this->entityManager->flush(); + $this->expectException(\TypeError::class); + $insertSource->getId(); } public function testCreation(): void { - $this->entityManager->persist($this->userSource); + $userSource = new UserSource(); + $this->entityManager->persist($userSource); $this->entityManager->flush(); - $userSourceId = $this->userSource->getId(); - /* - * @var UserSourceInterface - */ - $this->loadedUserSource = $this->userSourceRepository->find($userSourceId); - $this->assertEquals($userSourceId, $this->loadedUserSource->getId()); - $this->deleteUserSource(); - } - - private function deleteUserSource(): void - { - $this->entityManager->remove($this->loadedUserSource); + $userSourceId = $userSource->getId(); + $loadedUserSource = $this->entityManager->getRepository(UserSource::class)->find($userSourceId); + $this->assertEquals($userSourceId, $loadedUserSource->getId()); + $this->entityManager->remove($loadedUserSource); $this->entityManager->flush(); }