ApiLegacyRequestServiceTest.php 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. <?php
  2. namespace App\Tests\Service\ApiLegacy;
  3. use App\Entity\Access\Access;
  4. use App\Entity\Person\Person;
  5. use App\Service\ApiLegacy\ApiLegacyRequestService;
  6. use Lexik\Bundle\JWTAuthenticationBundle\Services\JWTTokenManagerInterface;
  7. use PHPUnit\Framework\TestCase;
  8. use Symfony\Component\HttpKernel\Exception\HttpException;
  9. use Symfony\Component\Security\Core\Authentication\Token\NullToken;
  10. use Symfony\Component\Security\Core\Authentication\Token\SwitchUserToken;
  11. use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
  12. use Symfony\Bundle\SecurityBundle\Security;
  13. use Symfony\Contracts\HttpClient\HttpClientInterface;
  14. use Symfony\Contracts\HttpClient\ResponseInterface;
  15. class ApiLegacyRequestServiceTest extends TestCase
  16. {
  17. private HttpClientInterface $apiLegacyClient;
  18. private Security $security;
  19. private JWTTokenManagerInterface $jwtManager;
  20. public function setUp(): void
  21. {
  22. $this->apiLegacyClient = $this->getMockBuilder(HttpClientInterface::class)->disableOriginalConstructor()->getMock();
  23. $this->security = $this->getMockBuilder(Security::class)->disableOriginalConstructor()->getMock();
  24. $this->jwtManager = $this->getMockBuilder(JWTTokenManagerInterface::class)->disableOriginalConstructor()->getMock();
  25. }
  26. /**
  27. * @see ApiLegacyRequestService::request()
  28. */
  29. public function testRequest(): void
  30. {
  31. $api1RequestService = $this
  32. ->getMockBuilder(ApiLegacyRequestService::class)
  33. ->setConstructorArgs([$this->apiLegacyClient, $this->security, $this->jwtManager])
  34. ->setMethodsExcept(['request'])
  35. ->getMock();
  36. $person = $this->getMockBuilder(Person::class)->disableOriginalConstructor()->getMock();
  37. $user = $this->getMockBuilder(Access::class)->disableOriginalConstructor()->getMock();
  38. $user->method('getId')->willReturn(1);
  39. $user->method('getPerson')->willReturn($person);
  40. $token = $this->getMockBuilder(UsernamePasswordToken::class)->disableOriginalConstructor()->getMock();
  41. $token->method('getUser')->willReturn($user);
  42. $this->security->method('getToken')->willReturn($token);
  43. $this->jwtManager->method('create')->with($person)->willReturn('XYZ');
  44. $_REQUEST['BEARER'] = 'XYZ';
  45. $expectedHeaders = [
  46. 'custom' => 'foo',
  47. 'authorization' => 'BEARER XYZ',
  48. 'Accept' => '*/*',
  49. 'Charset' => 'UTF-8',
  50. 'Accept-Encoding' => 'gzip, deflate, br',
  51. 'Content-Type' => 'application/ld+json',
  52. 'x-accessid' => '1'
  53. ];
  54. $response = $this->getMockBuilder(ResponseInterface::class)->disableOriginalConstructor()->getMock();
  55. $this->apiLegacyClient
  56. ->expects(self::once())
  57. ->method('request')
  58. ->with('GET', 'an/url', ['headers' => $expectedHeaders])
  59. ->willReturn($response);
  60. $api1RequestService->request(
  61. 'GET',
  62. '/an/url',
  63. [],
  64. ['headers' => ['custom' => 'foo']]
  65. );
  66. }
  67. /**
  68. * @see ApiLegacyRequestService::request()
  69. */
  70. public function testRequestNoToken(): void
  71. {
  72. $api1RequestService = $this
  73. ->getMockBuilder(ApiLegacyRequestService::class)
  74. ->setConstructorArgs([$this->apiLegacyClient, $this->security, $this->jwtManager])
  75. ->setMethodsExcept(['request'])
  76. ->getMock();
  77. $this->security->method('getToken')->willReturn(null);
  78. $this->expectException(HttpException::class);
  79. $this->expectExceptionMessage('Request error : Invalid security token');
  80. $api1RequestService->request('GET', '/an/url');
  81. }
  82. /**
  83. * @see ApiLegacyRequestService::request()
  84. */
  85. public function testRequestNullToken(): void
  86. {
  87. $api1RequestService = $this
  88. ->getMockBuilder(ApiLegacyRequestService::class)
  89. ->setConstructorArgs([$this->apiLegacyClient, $this->security, $this->jwtManager])
  90. ->setMethodsExcept(['request'])
  91. ->getMock();
  92. $token = $this->getMockBuilder(NullToken::class)->disableOriginalConstructor()->getMock();
  93. $this->security->method('getToken')->willReturn($token);
  94. $this->expectException(HttpException::class);
  95. $this->expectExceptionMessage('Request error : Invalid security token');
  96. $api1RequestService->request('GET', '/an/url');
  97. }
  98. /**
  99. * @see ApiLegacyRequestService::request()
  100. */
  101. public function testRequestInvalidToken(): void
  102. {
  103. $api1RequestService = $this
  104. ->getMockBuilder(ApiLegacyRequestService::class)
  105. ->setConstructorArgs([$this->apiLegacyClient, $this->security, $this->jwtManager])
  106. ->setMethodsExcept(['request'])
  107. ->getMock();
  108. $token = $this->getMockBuilder(UsernamePasswordToken::class)->disableOriginalConstructor()->getMock();
  109. $token->method('getUser')->willReturn(null);
  110. $this->security->method('getToken')->willReturn($token);
  111. $this->expectException(HttpException::class);
  112. $this->expectExceptionMessage('Request error : Invalid security token');
  113. $api1RequestService->request('GET', '/an/url');
  114. }
  115. /**
  116. * @see ApiLegacyRequestService::request()
  117. */
  118. public function testRequestSwitchUser(): void
  119. {
  120. $api1RequestService = $this
  121. ->getMockBuilder(ApiLegacyRequestService::class)
  122. ->setConstructorArgs([$this->apiLegacyClient, $this->security, $this->jwtManager])
  123. ->setMethodsExcept(['request'])
  124. ->getMock();
  125. $user = $this->getMockBuilder(Access::class)->disableOriginalConstructor()->getMock();
  126. $user->method('getId')->willReturn(10);
  127. $person = $this->getMockBuilder(Person::class)->disableOriginalConstructor()->getMock();
  128. $originalUser = $this->getMockBuilder(Access::class)->disableOriginalConstructor()->getMock();
  129. $originalUser->method('getId')->willReturn(20);
  130. $originalUser->method('getPerson')->willReturn($person);
  131. $originalToken = $this->getMockBuilder(SwitchUserToken::class)->disableOriginalConstructor()->getMock();
  132. $originalToken->method('getUser')->willReturn($originalUser);
  133. $token = $this->getMockBuilder(SwitchUserToken::class)->disableOriginalConstructor()->getMock();
  134. $token->method('getUser')->willReturn($user);
  135. $token->method('getOriginalToken')->willReturn($originalToken);
  136. $this->security->method('getToken')->willReturn($token);
  137. $this->jwtManager->method('create')->with($person)->willReturn('123');
  138. $_REQUEST['BEARER'] = '123';
  139. $expectedHeaders = [
  140. 'authorization' => 'BEARER 123',
  141. 'Accept' => '*/*',
  142. 'Charset' => 'UTF-8',
  143. 'Accept-Encoding' => 'gzip, deflate, br',
  144. 'Content-Type' => 'application/ld+json',
  145. 'x-accessid' => '20',
  146. 'x-switch-access' => '10',
  147. ];
  148. $response = $this->getMockBuilder(ResponseInterface::class)->disableOriginalConstructor()->getMock();
  149. $this->apiLegacyClient
  150. ->expects(self::once())
  151. ->method('request')
  152. ->with('GET', 'an/url', ['headers' => $expectedHeaders])
  153. ->willReturn($response);
  154. $api1RequestService->request('GET', '/an/url');
  155. }
  156. /**
  157. * @see ApiLegacyRequestService::request()
  158. */
  159. public function testRequestSwitchInvalidUser(): void
  160. {
  161. $api1RequestService = $this
  162. ->getMockBuilder(ApiLegacyRequestService::class)
  163. ->setConstructorArgs([$this->apiLegacyClient, $this->security, $this->jwtManager])
  164. ->setMethodsExcept(['request'])
  165. ->getMock();
  166. $user = $this->getMockBuilder(Access::class)->disableOriginalConstructor()->getMock();
  167. $user->method('getId')->willReturn(10);
  168. $originalToken = $this->getMockBuilder(SwitchUserToken::class)->disableOriginalConstructor()->getMock();
  169. $originalToken->method('getUser')->willReturn(null);
  170. $token = $this->getMockBuilder(SwitchUserToken::class)->disableOriginalConstructor()->getMock();
  171. $token->method('getUser')->willReturn($user);
  172. $token->method('getOriginalToken')->willReturn($originalToken);
  173. $this->security->method('getToken')->willReturn($token);
  174. $this->expectException(HttpException::class);
  175. $this->expectExceptionMessage('Request error : Switch original user missing');
  176. $api1RequestService->request('GET', '/an/url');
  177. }
  178. }