|
|
@@ -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')
|
|
|
+ );
|
|
|
+ }
|
|
|
}
|