InternalRequestsServiceTest.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. <?php
  2. namespace App\Tests\Unit\Service\Security;
  3. use App\Entity\Access\Access;
  4. use App\Service\Security\InternalRequestsService;
  5. use PHPUnit\Framework\MockObject\MockObject;
  6. use PHPUnit\Framework\TestCase;
  7. use Symfony\Bundle\SecurityBundle\Security;
  8. use Symfony\Component\Security\Core\User\UserInterface;
  9. class TestableInternalRequestsService extends InternalRequestsService
  10. {
  11. public function isInternalIp(string $ip): bool
  12. {
  13. return parent::isInternalIp($ip);
  14. }
  15. public function tokenIsValid(string|null $token): bool
  16. {
  17. return parent::tokenIsValid($token);
  18. }
  19. }
  20. class InternalRequestsServiceTest extends TestCase
  21. {
  22. public const internalRequestsToken = 'azerty';
  23. private Security $security;
  24. public function setUp(): void
  25. {
  26. $this->security = $this->getMockBuilder(Security::class)->disableOriginalConstructor()->getMock();
  27. }
  28. private function getInternalRequestsServiceMockFor(string $methodName, ?string $token = null): TestableInternalRequestsService|MockObject
  29. {
  30. return $this->getMockBuilder(TestableInternalRequestsService::class)
  31. ->setConstructorArgs([$token ?? self::internalRequestsToken, $this->security])
  32. ->setMethodsExcept([$methodName])
  33. ->getMock();
  34. }
  35. public function testIsInternalIp(): void
  36. {
  37. $internalRequestsService = $this->getInternalRequestsServiceMockFor('isInternalIp');
  38. $this->assertTrue($internalRequestsService->isInternalIp('127.0.0.0'));
  39. $this->assertTrue($internalRequestsService->isInternalIp('127.0.0.1'));
  40. $this->assertTrue($internalRequestsService->isInternalIp('10.8.0.1'));
  41. $this->assertTrue($internalRequestsService->isInternalIp('10.8.0.255'));
  42. $this->assertFalse($internalRequestsService->isInternalIp('141.94.117.32'));
  43. $this->assertTrue($internalRequestsService->isInternalIp('141.94.117.33'));
  44. $this->assertTrue($internalRequestsService->isInternalIp('141.94.117.50'));
  45. $this->assertTrue($internalRequestsService->isInternalIp('141.94.117.61'));
  46. $this->assertFalse($internalRequestsService->isInternalIp('141.94.117.62'));
  47. $this->assertTrue($internalRequestsService->isInternalIp('172.20.0.0'));
  48. $this->assertTrue($internalRequestsService->isInternalIp('172.20.255.255'));
  49. }
  50. public function testTokenIsValid(): void
  51. {
  52. $internalRequestsService = $this->getInternalRequestsServiceMockFor('tokenIsValid');
  53. $this->assertTrue($internalRequestsService->tokenIsValid(self::internalRequestsToken));
  54. $this->assertFalse($internalRequestsService->tokenIsValid('foo'));
  55. }
  56. public function testTokenIsValidWithEmptyToken(): void
  57. {
  58. $internalRequestsService = $this->getInternalRequestsServiceMockFor('tokenIsValid', '');
  59. // A token can not be valid if it is an empty string, even if it's equal to the internal token
  60. $this->assertFalse($internalRequestsService->tokenIsValid(''));
  61. }
  62. public function testIsSuperAdmin(): void
  63. {
  64. $internalRequestsService = $this->getInternalRequestsServiceMockFor('isSuperAdmin', '');
  65. $user = $this->getMockBuilder(Access::class)->getMock();
  66. $user->method('getSuperAdminAccess')->willReturn(true);
  67. $this->security->expects($this->once())->method('getUser')->willReturn($user);
  68. $this->assertTrue(
  69. $internalRequestsService->isSuperAdmin()
  70. );
  71. }
  72. public function testIsSuperAdminIsNot(): void
  73. {
  74. $internalRequestsService = $this->getInternalRequestsServiceMockFor('isSuperAdmin', '');
  75. $user = $this->getMockBuilder(Access::class)->getMock();
  76. $user->method('getSuperAdminAccess')->willReturn(false);
  77. $this->security->expects($this->once())->method('getUser')->willReturn($user);
  78. $this->assertFalse(
  79. $internalRequestsService->isSuperAdmin()
  80. );
  81. }
  82. public function testIsSuperAdminNoUser(): void
  83. {
  84. $internalRequestsService = $this->getInternalRequestsServiceMockFor('isSuperAdmin', '');
  85. $this->security->expects($this->once())->method('getUser')->willReturn(null);
  86. $this->assertFalse(
  87. $internalRequestsService->isSuperAdmin()
  88. );
  89. }
  90. public function testIsAllowed(): void
  91. {
  92. $internalRequestsService = $this->getInternalRequestsServiceMockFor('isAllowed');
  93. $internalRequestsService->expects(self::once())->method('isInternalIp')->with('128.0.0.1')->willReturn(true);
  94. $internalRequestsService->expects(self::once())->method('tokenIsValid')->with('azerty')->willReturn(true);
  95. $result = $internalRequestsService->isAllowed('128.0.0.1', 'azerty');
  96. $this->assertTrue($result);
  97. }
  98. public function testIsAllowedInvalidIp(): void
  99. {
  100. $internalRequestsService = $this->getInternalRequestsServiceMockFor('isAllowed');
  101. $internalRequestsService->expects(self::once())->method('isInternalIp')->with('128.0.0.1')->willReturn(false);
  102. $internalRequestsService->expects(self::never())->method('tokenIsValid');
  103. $result = $internalRequestsService->isAllowed('128.0.0.1', 'azerty');
  104. $this->assertFalse($result);
  105. }
  106. public function testIsAllowedInvalidToken(): void
  107. {
  108. $internalRequestsService = $this->getInternalRequestsServiceMockFor('isAllowed');
  109. $internalRequestsService->expects(self::once())->method('isInternalIp')->with('128.0.0.1')->willReturn(true);
  110. $internalRequestsService->expects(self::once())->method('tokenIsValid')->with('azerty')->willReturn(false);
  111. $result = $internalRequestsService->isAllowed('128.0.0.1', 'azerty');
  112. $this->assertFalse($result);
  113. }
  114. }