ApiLegacyRequestServiceTest.php 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. <?php /** @noinspection DuplicatedCode */
  2. namespace App\Test\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. public function testRequest(): void
  23. {
  24. $api1RequestService = $this
  25. ->getMockBuilder(ApiLegacyRequestService::class)
  26. ->setConstructorArgs([$this->apiLegacyClient, $this->security])
  27. ->setMethodsExcept(['request'])
  28. ->getMock();
  29. $user = $this->getMockBuilder(Access::class)->disableOriginalConstructor()->getMock();
  30. $user->method('getId')->willReturn(1);
  31. $token = $this->getMockBuilder(UsernamePasswordToken::class)->disableOriginalConstructor()->getMock();
  32. $token->method('getUser')->willReturn($user);
  33. $this->security->method('getToken')->willReturn($token);
  34. $_REQUEST['BEARER'] = '123';
  35. $expectedHeaders = [
  36. 'custom' => 'foo',
  37. 'authorization' => 'BEARER 123',
  38. 'Accept' => '*/*',
  39. 'Charset' => 'UTF-8',
  40. 'Accept-Encoding' => 'gzip, deflate, br',
  41. 'Content-Type' => 'application/ld+json',
  42. 'x-accessid' => '1'
  43. ];
  44. $response = $this->getMockBuilder(ResponseInterface::class)->disableOriginalConstructor()->getMock();
  45. $this->apiLegacyClient
  46. ->expects(self::once())
  47. ->method('request')
  48. ->with('GET', 'an/url', ['headers' => $expectedHeaders])
  49. ->willReturn($response);
  50. $api1RequestService->request(
  51. 'GET',
  52. '/an/url',
  53. [],
  54. ['headers' => ['custom' => 'foo']]
  55. );
  56. }
  57. public function testRequestNoToken(): void
  58. {
  59. $api1RequestService = $this
  60. ->getMockBuilder(ApiLegacyRequestService::class)
  61. ->setConstructorArgs([$this->apiLegacyClient, $this->security])
  62. ->setMethodsExcept(['request'])
  63. ->getMock();
  64. $this->security->method('getToken')->willReturn(null);
  65. $this->expectException(HttpException::class);
  66. $this->expectExceptionMessage('Request error : Invalid security token');
  67. $api1RequestService->request('GET', '/an/url');
  68. }
  69. public function testRequestNullToken(): void
  70. {
  71. $api1RequestService = $this
  72. ->getMockBuilder(ApiLegacyRequestService::class)
  73. ->setConstructorArgs([$this->apiLegacyClient, $this->security])
  74. ->setMethodsExcept(['request'])
  75. ->getMock();
  76. $token = $this->getMockBuilder(NullToken::class)->disableOriginalConstructor()->getMock();
  77. $this->security->method('getToken')->willReturn($token);
  78. $this->expectException(HttpException::class);
  79. $this->expectExceptionMessage('Request error : Invalid security token');
  80. $api1RequestService->request('GET', '/an/url');
  81. }
  82. public function testRequestInvalidToken(): void
  83. {
  84. $api1RequestService = $this
  85. ->getMockBuilder(ApiLegacyRequestService::class)
  86. ->setConstructorArgs([$this->apiLegacyClient, $this->security])
  87. ->setMethodsExcept(['request'])
  88. ->getMock();
  89. $token = $this->getMockBuilder(UsernamePasswordToken::class)->disableOriginalConstructor()->getMock();
  90. $token->method('getUser')->willReturn(null);
  91. $this->security->method('getToken')->willReturn($token);
  92. $this->expectException(HttpException::class);
  93. $this->expectExceptionMessage('Request error : Invalid security token');
  94. $api1RequestService->request('GET', '/an/url');
  95. }
  96. public function testRequestSwitchUser(): void
  97. {
  98. $api1RequestService = $this
  99. ->getMockBuilder(ApiLegacyRequestService::class)
  100. ->setConstructorArgs([$this->apiLegacyClient, $this->security])
  101. ->setMethodsExcept(['request'])
  102. ->getMock();
  103. $user = $this->getMockBuilder(Access::class)->disableOriginalConstructor()->getMock();
  104. $user->method('getId')->willReturn(10);
  105. $originalUser = $this->getMockBuilder(Access::class)->disableOriginalConstructor()->getMock();
  106. $originalUser->method('getId')->willReturn(20);
  107. $originalToken = $this->getMockBuilder(SwitchUserToken::class)->disableOriginalConstructor()->getMock();
  108. $originalToken->method('getUser')->willReturn($originalUser);
  109. $token = $this->getMockBuilder(SwitchUserToken::class)->disableOriginalConstructor()->getMock();
  110. $token->method('getUser')->willReturn($user);
  111. $token->method('getOriginalToken')->willReturn($originalToken);
  112. $this->security->method('getToken')->willReturn($token);
  113. $_REQUEST['BEARER'] = '123';
  114. $expectedHeaders = [
  115. 'authorization' => 'BEARER 123',
  116. 'Accept' => '*/*',
  117. 'Charset' => 'UTF-8',
  118. 'Accept-Encoding' => 'gzip, deflate, br',
  119. 'Content-Type' => 'application/ld+json',
  120. 'x-accessid' => '20',
  121. 'x-switch-access' => '10',
  122. ];
  123. $response = $this->getMockBuilder(ResponseInterface::class)->disableOriginalConstructor()->getMock();
  124. $this->apiLegacyClient
  125. ->expects(self::once())
  126. ->method('request')
  127. ->with('GET', 'an/url', ['headers' => $expectedHeaders])
  128. ->willReturn($response);
  129. $api1RequestService->request('GET', '/an/url');
  130. }
  131. public function testRequestSwitchInvalidUser(): void
  132. {
  133. $api1RequestService = $this
  134. ->getMockBuilder(ApiLegacyRequestService::class)
  135. ->setConstructorArgs([$this->apiLegacyClient, $this->security])
  136. ->setMethodsExcept(['request'])
  137. ->getMock();
  138. $user = $this->getMockBuilder(Access::class)->disableOriginalConstructor()->getMock();
  139. $user->method('getId')->willReturn(10);
  140. $originalToken = $this->getMockBuilder(SwitchUserToken::class)->disableOriginalConstructor()->getMock();
  141. $originalToken->method('getUser')->willReturn(null);
  142. $token = $this->getMockBuilder(SwitchUserToken::class)->disableOriginalConstructor()->getMock();
  143. $token->method('getUser')->willReturn($user);
  144. $token->method('getOriginalToken')->willReturn($originalToken);
  145. $this->security->method('getToken')->willReturn($token);
  146. $this->expectException(HttpException::class);
  147. $this->expectExceptionMessage('Request error : Switch original user missing');
  148. $api1RequestService->request('GET', '/an/url');
  149. }
  150. }