mirror of
				https://github.com/kevinveenbirkenbach/infinito.git
				synced 2025-10-31 17:29:04 +00:00 
			
		
		
		
	Created SourceMemberManager
This commit is contained in:
		| @@ -0,0 +1,50 @@ | ||||
| <?php | ||||
|  | ||||
| namespace App\Domain\SourceManagement; | ||||
|  | ||||
| use App\Entity\Source\SourceInterface; | ||||
|  | ||||
| final class SourceMemberManager implements SourceMemberManagerInterface | ||||
| { | ||||
|     /** | ||||
|      * @var SourceInterface | ||||
|      */ | ||||
|     private $source; | ||||
|  | ||||
|     public function __construct(SourceInterface $source) | ||||
|     { | ||||
|         $this->source = $source; | ||||
|     } | ||||
|  | ||||
|     public function addMember(SourceInterface $member): void | ||||
|     { | ||||
|         if (!$this->source->getMembers()->contains($member)) { | ||||
|             $this->source->getMembers()[] = $member; | ||||
|             (new self($member))->addMembership($this->source); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public function removeMember(SourceInterface $member): void | ||||
|     { | ||||
|         if ($this->source->getMembers()->contains($member)) { | ||||
|             $this->source->getMembers()->removeElement($member); | ||||
|             (new self($member))->removeMembership($this->source); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public function addMembership(SourceInterface $membership): void | ||||
|     { | ||||
|         if (!$this->source->getMemberships()->contains($membership)) { | ||||
|             $this->source->getMemberships()[] = $membership; | ||||
|             (new self($membership))->addMember($this->source); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public function removeMembership(SourceInterface $membership): void | ||||
|     { | ||||
|         if ($this->source->getMemberships()->contains($membership)) { | ||||
|             $this->source->getMemberships()->removeElement($membership); | ||||
|             (new self($membership))->removeMember($this->source); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,28 @@ | ||||
| <?php | ||||
|  | ||||
| namespace App\Domain\SourceManagement; | ||||
|  | ||||
| use App\Entity\Source\SourceInterface; | ||||
|  | ||||
| interface SourceMemberManagerInterface | ||||
| { | ||||
|     /** | ||||
|      * @param SourceInterface $member | ||||
|      */ | ||||
|     public function addMember(SourceInterface $member): void; | ||||
|  | ||||
|     /** | ||||
|      * @param SourceInterface $member | ||||
|      */ | ||||
|     public function removeMember(SourceInterface $member): void; | ||||
|  | ||||
|     /** | ||||
|      * @param SourceInterface $membership | ||||
|      */ | ||||
|     public function addMembership(SourceInterface $membership): void; | ||||
|  | ||||
|     /** | ||||
|      * @param SourceInterface $membership | ||||
|      */ | ||||
|     public function removeMembership(SourceInterface $membership): void; | ||||
| } | ||||
| @@ -103,36 +103,4 @@ abstract class AbstractSource extends AbstractEntity implements SourceInterface | ||||
|         $this->memberships = new ArrayCollection(); | ||||
|         $this->members = new ArrayCollection(); | ||||
|     } | ||||
|  | ||||
|     public function addMember(SourceInterface $member): void | ||||
|     { | ||||
|         if (!$this->members->contains($member)) { | ||||
|             $this->members[] = $member; | ||||
|             $member->addMembership($this); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public function removeMember(SourceInterface $member): void | ||||
|     { | ||||
|         if ($this->members->contains($member)) { | ||||
|             $this->members->removeElement($member); | ||||
|             $member->removeMembership($this); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public function addMembership(SourceInterface $membership): void | ||||
|     { | ||||
|         if (!$this->memberships->contains($membership)) { | ||||
|             $this->memberships[] = $membership; | ||||
|             $membership->addMember($this); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public function removeMembership(SourceInterface $membership): void | ||||
|     { | ||||
|         if ($this->memberships->contains($membership)) { | ||||
|             $this->memberships->removeElement($membership); | ||||
|             $membership->removeMember($this); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -11,29 +11,8 @@ use App\Entity\Attribut\SlugAttributInterface; | ||||
| use App\Entity\Attribut\MembersAttributInterface; | ||||
|  | ||||
| /** | ||||
|  * @todo Move the members functions to an member ship manager | ||||
|  * | ||||
|  * @author kevinfrantz | ||||
|  */ | ||||
| interface SourceInterface extends IdAttributInterface, EntityInterface, MembershipsAttributInterface, LawAttributInterface, RelationAttributInterface, SlugAttributInterface, MembersAttributInterface | ||||
| { | ||||
|     /** | ||||
|      * @param SourceInterface $member | ||||
|      */ | ||||
|     public function addMember(SourceInterface $member): void; | ||||
|  | ||||
|     /** | ||||
|      * @param SourceInterface $member | ||||
|      */ | ||||
|     public function removeMember(SourceInterface $member): void; | ||||
|  | ||||
|     /** | ||||
|      * @param SourceInterface $membership | ||||
|      */ | ||||
|     public function addMembership(SourceInterface $membership): void; | ||||
|  | ||||
|     /** | ||||
|      * @param SourceInterface $membership | ||||
|      */ | ||||
|     public function removeMembership(SourceInterface $membership): void; | ||||
| } | ||||
|   | ||||
| @@ -0,0 +1,56 @@ | ||||
| <?php | ||||
|  | ||||
| namespace Tests\Unit\Domain\SourceManagement; | ||||
|  | ||||
| use PHPUnit\Framework\TestCase; | ||||
| use App\Entity\Source\SourceInterface; | ||||
| use App\Domain\SourceManagement\SourceMemberManagerInterface; | ||||
| use App\Entity\Source\AbstractSource; | ||||
| use App\Domain\SourceManagement\SourceMemberManager; | ||||
|  | ||||
| class SourceMemberManagerTest extends TestCase | ||||
| { | ||||
|     /** | ||||
|      * @var SourceInterface | ||||
|      */ | ||||
|     private $source; | ||||
|  | ||||
|     /** | ||||
|      * @var SourceMemberManagerInterface | ||||
|      */ | ||||
|     private $sourceMemberManager; | ||||
|  | ||||
|     private function createSource(): SourceInterface | ||||
|     { | ||||
|         return new class() extends AbstractSource { | ||||
|         }; | ||||
|     } | ||||
|  | ||||
|     public function setUp(): void | ||||
|     { | ||||
|         $this->source = $this->createSource(); | ||||
|         $this->sourceMemberManager = new SourceMemberManager($this->source); | ||||
|     } | ||||
|  | ||||
|     public function testAddAndRemoveMember(): void | ||||
|     { | ||||
|         $member = $this->createSource(); | ||||
|         $this->assertNull($this->sourceMemberManager->addMember($member)); | ||||
|         $this->assertEquals($member, $this->source->getMembers()->get(0)); | ||||
|         $this->assertEquals($this->source, $member->getMemberships()->get(0)); | ||||
|         $this->assertNull($this->sourceMemberManager->removeMember($member)); | ||||
|         $this->assertEquals(0, $this->source->getMembers()->count()); | ||||
|         $this->assertEquals(0, $member->getMemberships()->count()); | ||||
|     } | ||||
|  | ||||
|     public function testAddAndRemoveMembership(): void | ||||
|     { | ||||
|         $membership = $this->createSource(); | ||||
|         $this->assertNull($this->sourceMemberManager->addMembership($membership)); | ||||
|         $this->assertEquals($membership, $this->source->getMemberships()->get(0)); | ||||
|         $this->assertEquals($this->source, $membership->getMembers()->get(0)); | ||||
|         $this->assertNull($this->sourceMemberManager->removeMembership($membership)); | ||||
|         $this->assertEquals(0, $this->source->getMemberships()->count()); | ||||
|         $this->assertEquals(0, $membership->getMembers()->count()); | ||||
|     } | ||||
| } | ||||
| @@ -40,28 +40,6 @@ class AbstractSourceTest extends TestCase | ||||
|         $this->assertInstanceOf(Collection::class, $this->source->getMembers()); | ||||
|     } | ||||
|  | ||||
|     public function testAddAndRemoveMember(): void | ||||
|     { | ||||
|         $member = $this->getSourceDummy(); | ||||
|         $this->assertNull($this->source->addMember($member)); | ||||
|         $this->assertEquals($member, $this->source->getMembers()->get(0)); | ||||
|         $this->assertEquals($this->source, $member->getMemberships()->get(0)); | ||||
|         $this->assertNull($this->source->removeMember($member)); | ||||
|         $this->assertEquals(0, $this->source->getMembers()->count()); | ||||
|         $this->assertEquals(0, $member->getMemberships()->count()); | ||||
|     } | ||||
|  | ||||
|     public function testAddAndRemoveMembership(): void | ||||
|     { | ||||
|         $membership = $this->getSourceDummy(); | ||||
|         $this->assertNull($this->source->addMembership($membership)); | ||||
|         $this->assertEquals($membership, $this->source->getMemberships()->get(0)); | ||||
|         $this->assertEquals($this->source, $membership->getMembers()->get(0)); | ||||
|         $this->assertNull($this->source->removeMembership($membership)); | ||||
|         $this->assertEquals(0, $this->source->getMemberships()->count()); | ||||
|         $this->assertEquals(0, $membership->getMembers()->count()); | ||||
|     } | ||||
|  | ||||
|     public function testSlugInit(): void | ||||
|     { | ||||
|         $this->expectException(\TypeError::class); | ||||
|   | ||||
| @@ -5,6 +5,7 @@ namespace tests\Unit\Repository; | ||||
| use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase; | ||||
| use Doctrine\ORM\EntityManager; | ||||
| use App\Entity\Source\Complex\UserSource; | ||||
| use App\Domain\SourceManagement\SourceMemberManager; | ||||
|  | ||||
| /** | ||||
|  * @todo refactor this to an integration test! | ||||
| @@ -30,7 +31,8 @@ class UserSourceRepositoryTest extends KernelTestCase | ||||
|     { | ||||
|         $insertSource = new UserSource(); | ||||
|         $origineSource = new UserSource(); | ||||
|         $origineSource->addMember($insertSource); | ||||
|         $origineSourceMemberManager = new SourceMemberManager($origineSource); | ||||
|         $origineSourceMemberManager->addMember($insertSource); | ||||
|         $this->entityManager->persist($insertSource); | ||||
|         $this->entityManager->persist($origineSource); | ||||
|         $this->entityManager->flush(); | ||||
| @@ -40,7 +42,7 @@ class UserSourceRepositoryTest extends KernelTestCase | ||||
|             ->get(0)); | ||||
|         $this->assertEquals($origineSource, $insertSource->getMemberships() | ||||
|             ->get(0)); | ||||
|         $this->assertNull($origineSource->removeMember($insertSource)); | ||||
|         $this->assertNull($origineSourceMemberManager->removeMember($insertSource)); | ||||
|         $this->assertEquals(0, $origineSource->getMembers() | ||||
|             ->count()); | ||||
|         $this->assertEquals(0, $insertSource->getMemberships() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user