UtilsTest.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <?php
  2. namespace App\Test\Service\Access;
  3. use App\Entity\Access\Access;
  4. use App\Entity\Organization\Organization;
  5. use App\Repository\Access\AccessRepository;
  6. use App\Service\Access\HandleOptionalsRoles;
  7. use App\Service\Access\Utils;
  8. use App\Service\ServiceIterator\OptionalsRolesIterator;
  9. use PHPUnit\Framework\TestCase;
  10. use Symfony\Component\Security\Core\Role\RoleHierarchy;
  11. class UtilsTest extends TestCase
  12. {
  13. private Utils $utils;
  14. private AccessRepository $accessRepositoryMock;
  15. public function setUp():void
  16. {
  17. $roleHierarchyMock = $this->getMockBuilder(RoleHierarchy::class)->disableOriginalConstructor()->getMock();
  18. $roleHierarchyMock
  19. ->method('getReachableRoleNames')
  20. ->willReturn(["ROLE_A", "ROLE_B"]);
  21. $optionalsRolesIteratorMock = $this->getMockBuilder(OptionalsRolesIterator::class)->disableOriginalConstructor()->getMock();
  22. $optionalsRolesIteratorMock
  23. ->method('getOptionalsRoles')
  24. ->willReturn(["ROLE_OPT"]);
  25. $this->accessRepositoryMock = $this->getMockBuilder(AccessRepository::class)->disableOriginalConstructor()->getMock();
  26. $this->utils = new Utils($roleHierarchyMock, $this->accessRepositoryMock, $optionalsRolesIteratorMock);
  27. }
  28. /**
  29. * @see Utils::filterAccesses()
  30. */
  31. public function testFilterAccesses(){
  32. $accessMock1 = $this->getMockBuilder(Access::class)->disableOriginalConstructor()->getMock();
  33. $accessMock1
  34. ->method('getId')
  35. ->willReturn(1);
  36. $accessesMock[] = $accessMock1;
  37. $accessMock2 = $this->getMockBuilder(Access::class)->disableOriginalConstructor()->getMock();
  38. $accessMock2
  39. ->method('getId')
  40. ->willReturn(2);
  41. $accessesMock[] = $accessMock2;
  42. $accessMock3 = $this->getMockBuilder(Access::class)->disableOriginalConstructor()->getMock();
  43. $accessMock3
  44. ->method('getId')
  45. ->willReturn(3);
  46. $accessesMock[] = $accessMock3;
  47. $this->assertCount(2, $this->utils->filterAccesses($accessesMock, $accessMock2));
  48. }
  49. /**
  50. * @see Utils::hasRoles()
  51. */
  52. public function testHasRoles(){
  53. $accessMock1 = $this->getMockBuilder(Access::class)->disableOriginalConstructor()->getMock();
  54. $accessMock1
  55. ->method('getRoles')
  56. ->willReturn(['ROLE_A']);
  57. $this->assertTrue($this->utils->hasRoles($accessMock1, 'ROLE_A'));
  58. }
  59. /**
  60. * @see Utils::hasRoles()
  61. */
  62. public function testHasNotRoles(){
  63. $accessMock1 = $this->getMockBuilder(Access::class)->disableOriginalConstructor()->getMock();
  64. $accessMock1
  65. ->method('getRoles')
  66. ->willReturn(['ROLE_A']);
  67. $this->assertFalse($this->utils->hasRoles($accessMock1, 'ROLE_X'));
  68. }
  69. /**
  70. * @see Utils::getAllRoles()
  71. */
  72. public function testGetAllRoles(){
  73. $accessMock1 = $this->getMockBuilder(Access::class)->disableOriginalConstructor()->getMock();
  74. $accessMock1
  75. ->method('getRoles')
  76. ->willReturn(['ROLE_A']);
  77. $this->assertEquals(['ROLE_A', 'ROLE_B'], $this->utils->getAllRoles($accessMock1));
  78. }
  79. /**
  80. * @see Utils::getAdminAccess()
  81. */
  82. public function testGetAdminAccess(){
  83. $this->accessRepositoryMock
  84. ->method('findOneBy')
  85. ->willReturn(new Access());
  86. $this->assertNotEmpty($this->utils->getAdminAccess(new Organization()));
  87. }
  88. /**
  89. * @see Utils::getAdminAccess()
  90. */
  91. public function testGetAdminAccessNotFound(){
  92. $this->accessRepositoryMock
  93. ->method('findOneBy')
  94. ->willReturn(null);
  95. $this->assertNull($this->utils->getAdminAccess(new Organization()));
  96. }
  97. }