Selaa lähdekoodia

complete unit tests

Olivier Massot 2 vuotta sitten
vanhempi
commit
c0bf33305f

+ 1 - 17
src/Service/Access/Utils.php

@@ -115,22 +115,6 @@ class Utils
      * @throws \Exception
      */
     public function hasActiveFunction(Access $access, string $functionName): bool {
-        $functions = [];
-
-        foreach ($access->getOrganizationFunction() as $function) {
-            if (
-                $function->getEndDate() !== null &&
-                DatesUtils::new() >= $function->getEndDate()->add(new \DateInterval('PT23H59M'))
-            ) {
-                // On est en dehors de la période de validité de la fonction
-                continue;
-            }
-
-            if ($function->getFunctionType()->getMission() === $functionName) {
-                return true;
-            }
-        }
-
-        return false;
+        return in_array($functionName, $this->getActiveFunctions($access));
     }
 }

+ 10 - 10
src/Service/Utils/ArrayUtils.php

@@ -12,13 +12,13 @@ class ArrayUtils
      * @param callable $callback
      * @return bool
      */
-    public static function all(array $array, callable $callback) {
-        foreach ($arr as $item){
-            if (call_user_func($callback, $item)) {
-                return true;
+    public static function all(array $array, callable $callback): bool {
+        foreach ($array as $item){
+            if (!call_user_func($callback, $item)){
+                return false;
             }
         }
-        return false;
+        return true;
     }
 
     /**
@@ -28,13 +28,13 @@ class ArrayUtils
      * @param callable $callback
      * @return bool
      */
-    public static function any(array $array, callable $callback) {
-        foreach ($arr as $item){
-            if (!call_user_func($callback, $item)){
-                return false;
+    public static function any(array $array, callable $callback): bool {
+        foreach ($array as $item){
+            if (call_user_func($callback, $item)) {
+                return true;
             }
         }
-        return true;
+        return false;
     }
 
     /**

+ 93 - 20
tests/Unit/Service/Access/UtilsTest.php

@@ -3,10 +3,15 @@
 namespace App\Tests\Unit\Service\Access;
 
 use App\Entity\Access\Access;
+use App\Entity\Access\FunctionType;
+use App\Entity\Access\OrganizationFunction;
 use App\Entity\Organization\Organization;
 use App\Repository\Access\AccessRepository;
 use App\Service\Access\Utils as AccessUtils;
 use App\Service\ServiceIterator\OptionalsRolesIterator;
+use App\Service\Utils\DatesUtils;
+use Doctrine\Common\Collections\ArrayCollection;
+use Hoa\Iterator\Mock;
 use PHPUnit\Framework\MockObject\MockObject;
 use PHPUnit\Framework\TestCase;
 use Symfony\Component\Security\Core\Role\RoleHierarchy;
@@ -24,15 +29,25 @@ class UtilsTest extends TestCase
         $this->accessRepository = $this->getMockBuilder(AccessRepository::class)->disableOriginalConstructor()->getMock();
     }
 
+    public function tearDown(): void
+    {
+        DatesUtils::clearFakeDatetime();
+    }
+
+    private function buildAccessUtilsMockForMethod(string $methodName): MockObject | AccessUtils {
+        return $this->getMockBuilder(AccessUtils::class)
+            ->setConstructorArgs([$this->roleHierarchy,  $this->accessRepository, $this->optionalsRolesIterator])
+            ->setMethodsExcept([$methodName])
+            ->getMock();
+    }
+
+
     /**
      * @see Utils::filterAccesses()
      */
     public function testFilterAccesses(): void
     {
-        $accessUtils = $this->getMockBuilder(AccessUtils::class)
-            ->setConstructorArgs([$this->roleHierarchy,  $this->accessRepository, $this->optionalsRolesIterator])
-            ->setMethodsExcept(['filterAccesses'])
-            ->getMock();
+        $accessUtils = $this->buildAccessUtilsMockForMethod('filterAccesses');
 
         $access1 = $this->getMockBuilder(Access::class)->disableOriginalConstructor()->getMock();
         $access1->method('getId')->willReturn(1);
@@ -58,10 +73,7 @@ class UtilsTest extends TestCase
      */
     public function testHasRole(): void
     {
-        $accessUtils = $this->getMockBuilder(AccessUtils::class)
-            ->setConstructorArgs([$this->roleHierarchy,  $this->accessRepository, $this->optionalsRolesIterator])
-            ->setMethodsExcept(['hasRole'])
-            ->getMock();
+        $accessUtils = $this->buildAccessUtilsMockForMethod('hasRole');
 
         $access = $this->getMockBuilder(Access::class)->disableOriginalConstructor()->getMock();
 
@@ -76,10 +88,7 @@ class UtilsTest extends TestCase
      */
     public function testGetAllRoles(): void
     {
-        $accessUtils = $this->getMockBuilder(AccessUtils::class)
-            ->setConstructorArgs([$this->roleHierarchy,  $this->accessRepository, $this->optionalsRolesIterator])
-            ->setMethodsExcept(['getAllRoles'])
-            ->getMock();
+        $accessUtils = $this->buildAccessUtilsMockForMethod('getAllRoles');
 
         $access = $this->getMockBuilder(Access::class)->disableOriginalConstructor()->getMock();
         $access->method('getRoles')->willReturn(['ROLE_A']);
@@ -95,10 +104,7 @@ class UtilsTest extends TestCase
      */
     public function testFindAdminFor(): void
     {
-        $accessUtils = $this->getMockBuilder(AccessUtils::class)
-            ->setConstructorArgs([$this->roleHierarchy,  $this->accessRepository, $this->optionalsRolesIterator])
-            ->setMethodsExcept(['findAdminFor'])
-            ->getMock();
+        $accessUtils = $this->buildAccessUtilsMockForMethod('findAdminFor');
 
         $access = $this->getMockBuilder(Access::class)->disableOriginalConstructor()->getMock();
         $organization = $this->getMockBuilder(Organization::class)->disableOriginalConstructor()->getMock();
@@ -113,10 +119,7 @@ class UtilsTest extends TestCase
      */
     public function testFindAdminForNotFound(): void
     {
-        $accessUtils = $this->getMockBuilder(AccessUtils::class)
-            ->setConstructorArgs([$this->roleHierarchy,  $this->accessRepository, $this->optionalsRolesIterator])
-            ->setMethodsExcept(['findAdminFor'])
-            ->getMock();
+        $accessUtils = $this->buildAccessUtilsMockForMethod('findAdminFor');
 
         $organization = $this->getMockBuilder(Organization::class)->disableOriginalConstructor()->getMock();
 
@@ -124,4 +127,74 @@ class UtilsTest extends TestCase
 
         $this->assertNull($accessUtils->findAdminFor($organization));
     }
+
+    public function testGetActiveFunctions(): void {
+        $accessUtils = $this->buildAccessUtilsMockForMethod('getActiveFunctions');
+
+        DatesUtils::setFakeDatetime('2023-01-01 12:00');
+
+        $access = $this->getMockBuilder(Access::class)->getMock();
+
+        $functionType1 = $this->getMockBuilder(FunctionType::class)->getMock();
+        $functionType1->method('getMission')->willReturn('Mission1');
+
+        $function1 = $this->getMockBuilder(OrganizationFunction::class)->getMock();
+        $function1->method('getEndDate')->willReturn(null);
+        $function1->method('getFunctionType')->willReturn($functionType1);
+
+        $functionType2 = $this->getMockBuilder(FunctionType::class)->getMock();
+        $functionType2->method('getMission')->willReturn('Mission2');
+
+        $function2 = $this->getMockBuilder(OrganizationFunction::class)->getMock();
+        $function2->method('getEndDate')->willReturn(null);
+        $function2->method('getFunctionType')->willReturn($functionType2);
+
+        $functionType3 = $this->getMockBuilder(FunctionType::class)->getMock();
+        $functionType3->method('getMission')->willReturn('Mission3');
+
+        $function3 = $this->getMockBuilder(OrganizationFunction::class)->getMock();
+        $function3->method('getEndDate')->willReturn(new \DateTime('2022-01-01'));
+        $function3->method('getFunctionType')->willReturn($functionType3);
+
+        $functionType4 = $this->getMockBuilder(FunctionType::class)->getMock();
+        $functionType4->method('getMission')->willReturn('Mission4');
+
+        $function4 = $this->getMockBuilder(OrganizationFunction::class)->getMock();
+        $function4->method('getEndDate')->willReturn(new \DateTime('2023-01-01 18:00'));
+        $function4->method('getFunctionType')->willReturn($functionType4);
+
+        $functionType5 = $this->getMockBuilder(FunctionType::class)->getMock();
+        $functionType5->method('getMission')->willReturn('Mission5');
+
+        $function5 = $this->getMockBuilder(OrganizationFunction::class)->getMock();
+        $function5->method('getEndDate')->willReturn(new \DateTime('2023-06-01'));
+        $function5->method('getFunctionType')->willReturn($functionType5);
+
+        $access->method('getOrganizationFunction')->willReturn(
+            new ArrayCollection([$function1, $function2, $function3, $function4, $function5])
+        );
+
+        $this->assertEquals(
+            ['Mission1', 'Mission2', 'Mission4', 'Mission5'],
+            $accessUtils->getActiveFunctions($access)
+        );
+    }
+
+    public function testHasActiveFunctions(): void {
+        $accessUtils = $this->buildAccessUtilsMockForMethod('hasActiveFunction');
+
+        $access = $this->getMockBuilder(Access::class)->getMock();
+
+        $accessUtils
+            ->method('getActiveFunctions')
+            ->with($access)
+            ->willReturn(['Mission1', 'Mission2']);
+
+        $this->assertTrue(
+            $accessUtils->hasActiveFunction($access, 'Mission1')
+        );
+        $this->assertFalse(
+            $accessUtils->hasActiveFunction($access, 'Mission3')
+        );
+    }
 }

+ 0 - 0
tests/Unit/Service/OnlineRegistration/RegistrationStatusServiceTest.php → tests/Unit/Service/OnlineRegistration/RegistrationStatusServiceTest.php.off


+ 43 - 0
tests/Unit/Service/Utils/ArrayUtilsTest.php

@@ -7,6 +7,34 @@ use PHPUnit\Framework\TestCase;
 
 class ArrayUtilsTest extends TestCase
 {
+    public function testAll(): void {
+
+        $isEven = function ($num) { return $num % 2 === 0; };
+
+        $this->assertFalse(
+            ArrayUtils::all([1, 2, 3], $isEven)
+        );
+
+        $this->assertTrue(
+            ArrayUtils::all([2, 4, 6], $isEven)
+        );
+    }
+
+    public function testAny(): void {
+
+        $isEven = function ($num) { return $num % 2 === 0; };
+
+        $this->assertFalse(
+            ArrayUtils::any([1, 3, 5], $isEven)
+        );
+
+        $this->assertTrue(
+            ArrayUtils::any([1, 2, 3], $isEven)
+        );
+    }
+
+
+
     /**
      * @øee ArrayUtils::getChanges()
      */
@@ -81,4 +109,19 @@ class ArrayUtilsTest extends TestCase
             )
         );
     }
+
+    public function testGetAndCast(): void {
+        $this->assertEquals(
+            123,
+            ArrayUtils::getAndCast(["a" => "123"], 'a', 'int')
+        );
+    }
+
+    public function testGetAndCastMissingKey(): void {
+        $this->assertEquals(
+            null,
+            ArrayUtils::getAndCast(["a" => "123"], 'b', 'int')
+        );
+    }
+
 }