Vincent GUFFON 4 tahun lalu
induk
melakukan
d5f3f9c765

+ 1 - 1
src/Repository/Access/AccessRepository.php

@@ -16,7 +16,7 @@ use Symfony\Component\HttpFoundation\RequestStack;
  * @method Access[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
  * @method null loadUserByIdentifier(string $identifier)
  */
-final class AccessRepository extends ServiceEntityRepository implements UserLoaderInterface
+class AccessRepository extends ServiceEntityRepository implements UserLoaderInterface
 {
     const ACCESS_NAME_HEADER = 'X-AccessId';
 

+ 4 - 1
src/Service/Access/AccessProfileCreator.php

@@ -7,7 +7,7 @@ use App\ApiResources\Profile\AccessProfile;
 use App\Entity\Access\Access;
 use App\Repository\Access\AccessRepository;
 use App\Service\Organization\OrganizationProfileCreator;
-use Doctrine\Common\Collections\ArrayCollection;
+use App\Test\Service\Access\AccessProfileCreatorTest;
 use Symfony\Component\Security\Core\Exception\AuthenticationException;
 use Symfony\Component\Security\Core\Role\RoleHierarchyInterface;
 
@@ -40,6 +40,7 @@ class AccessProfileCreator
      * @param Access $access
      * @return AccessProfile
      * @throws \Exception
+     * @see AccessProfileCreatorTest::testGetAccessProfileFailed
      */
     public function getAccessProfile(Access $access): AccessProfile{
         $validAccesses = $this->accessRepository->findAllValidAccesses($access);
@@ -62,6 +63,7 @@ class AccessProfileCreator
      * Créer une ressource AccessProfile à partir d'une entité Access
      * @param Access $access
      * @return AccessProfile
+     * @see AccessProfileCreatorTest::testCreateAccessProfile
      */
     public function createAccessProfile(Access $access): AccessProfile{
         $accessProfile = new AccessProfile();
@@ -78,6 +80,7 @@ class AccessProfileCreator
      * Classe permettant de créer et Setter les éléments de base d'une ressource AccessProfile à partir d'une entité Access
      * @param Access $access
      * @return AccessProfile
+     * @see AccessProfileCreatorTest::testCreateLightAccessProfile()
      */
     public function createLightAccessProfile(Access $access): AccessProfile{
         $accessProfile = new AccessProfile();

+ 5 - 3
src/Service/Access/Utils.php

@@ -4,6 +4,7 @@ declare(strict_types=1);
 namespace App\Service\Access;
 
 use App\Entity\Access\Access;
+use App\Test\Service\Access\UtilsTest;
 
 /**
  * Class Utils : service rassemblant des fonctions d'aides pour les questions se rapportant à l'access
@@ -20,11 +21,12 @@ class Utils
      * @param array<Access> $accesses
      * @param Access $access
      * @return array
+     * @see UtilsTest::testFilterAccesses()
      */
     public function filterAccesses(array $accesses, Access $access): array {
-        return array_filter($accesses, function($validAccess) use($access){
-            /** @var Access $validAccess */
-            return $validAccess->getId() !== $access->getId();
+        return array_filter($accesses, function($a) use($access){
+            /** @var Access $a */
+            return $a->getId() !== $access->getId();
         });
     }
 }

+ 46 - 13
tests/Service/Access/AccessProfileCreatorTest.php

@@ -6,20 +6,25 @@ use App\ApiResources\Profile\OrganizationProfile;
 use App\Entity\Access\Access;
 use App\Entity\Organization\Organization;
 use App\Entity\Person\Person;
+use App\Repository\Access\AccessRepository;
 use App\Service\Access\AccessProfileCreator;
+use App\Service\Access\Utils;
 use App\Service\Organization\OrganizationProfileCreator;
 use PHPUnit\Framework\TestCase;
+use Symfony\Component\Security\Core\Exception\AuthenticationException;
 use Symfony\Component\Security\Core\Role\RoleHierarchy;
 
 class AccessProfileCreatorTest extends TestCase
 {
     private Access  $access;
-    private Person $person;
+    private $accessProfileCreator;
+    private $accessRepositoryMock;
+    private $accessUtilsMock;
 
     public function setUp():void
     {
-        $this->person = new Person();
-        $this->person
+        $person = new Person();
+        $person
             ->setName('Foo')
             ->setGivenName('Bar')
         ;
@@ -27,29 +32,57 @@ class AccessProfileCreatorTest extends TestCase
         $this->access = new Access();
         $this->access
             ->setAdminAccess(true)
-            ->setPerson($this->person)
+            ->setPerson($person)
             ->setOrganization(new Organization())
         ;
-    }
 
-    /**
-     * @see AccessProfileCreator::getAccessProfile()
-     */
-    public function testGetAccessProfile(){
         $roleHierarchyMock = $this->getMockBuilder(RoleHierarchy::class)->disableOriginalConstructor()->getMock();
         $roleHierarchyMock
             ->method('getReachableRoleNames')
             ->willReturn(["ROLE_A", "ROLE_B"]);
 
-        $organizationProfileCreator = $this->getMockBuilder(OrganizationProfileCreator::class)->disableOriginalConstructor()->getMock();
-        $organizationProfileCreator
+        $organizationProfileCreatorMock = $this->getMockBuilder(OrganizationProfileCreator::class)->disableOriginalConstructor()->getMock();
+        $organizationProfileCreatorMock
             ->method('getOrganizationProfile')
             ->with($this->access->getOrganization())
             ->willReturn(new OrganizationProfile());
 
-        $accessProfileCreator = new AccessProfileCreator($roleHierarchyMock,$organizationProfileCreator);
-        $accessProfile = $accessProfileCreator->getAccessProfile($this->access);
+        $this->accessRepositoryMock = $this->getMockBuilder(AccessRepository::class)->disableOriginalConstructor()->getMock();
+        $this->accessUtilsMock = $this->getMockBuilder(Utils::class)->disableOriginalConstructor()->getMock();
+
+        $this->accessProfileCreator = new AccessProfileCreator(
+            $roleHierarchyMock,
+            $organizationProfileCreatorMock,
+            $this->accessRepositoryMock,
+            $this->accessUtilsMock
+        );
+    }
+
+    /**
+     * @see AccessProfileCreator::getAccessProfile()
+     */
+    public function testGetAccessProfileFailed(){
+        $this->accessRepositoryMock
+            ->method('findAllValidAccesses')
+            ->with($this->access)
+            ->willReturn([]);
+        $this->expectException(AuthenticationException::class);
+        $this->accessProfileCreator->getAccessProfile($this->access);
+    }
+
+    /**
+     * @see AccessProfileCreator::createAccessProfile()
+     */
+    public function testCreateAccessProfile(){
+        $accessProfile = $this->accessProfileCreator->createAccessProfile($this->access);
+        $this->assertInstanceOf(AccessProfile::class, $accessProfile);
+    }
 
+    /**
+     * @see AccessProfileCreator::createLightAccessProfile()
+     */
+    public function testCreateLightAccessProfile(){
+        $accessProfile = $this->accessProfileCreator->createLightAccessProfile($this->access);
         $this->assertInstanceOf(AccessProfile::class, $accessProfile);
     }
 }

+ 40 - 0
tests/Service/Access/UtilsTest.php

@@ -0,0 +1,40 @@
+<?php
+
+namespace App\Test\Service\Access;
+
+use App\Entity\Access\Access;
+use App\Service\Access\Utils;
+use PHPUnit\Framework\TestCase;
+
+class UtilsTest extends TestCase
+{
+
+    public function setUp():void
+    {
+
+    }
+
+    /**
+     * @see Utils::filterAccesses()
+     */
+    public function testFilterAccesses(){
+        $accessMock1 = $this->getMockBuilder(Access::class)->disableOriginalConstructor()->getMock();
+        $accessMock1
+            ->method('getId')
+            ->willReturn(1);
+        $accessesMock[] = $accessMock1;
+        $accessMock2 = $this->getMockBuilder(Access::class)->disableOriginalConstructor()->getMock();
+        $accessMock2
+            ->method('getId')
+            ->willReturn(2);
+        $accessesMock[] = $accessMock2;
+        $accessMock3 = $this->getMockBuilder(Access::class)->disableOriginalConstructor()->getMock();
+        $accessMock3
+            ->method('getId')
+            ->willReturn(3);
+        $accessesMock[] = $accessMock3;
+
+        $utils = new Utils();
+        $this->assertCount(2, $utils->filterAccesses($accessesMock, $accessMock2));
+    }
+}