ApiLegacyRequestServiceTest.php 7.6 KB

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