MockTrait.php 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <?php
  2. namespace AlibabaCloud\Credentials;
  3. use Exception;
  4. use GuzzleHttp\Exception\RequestException;
  5. use GuzzleHttp\Handler\MockHandler;
  6. use GuzzleHttp\Psr7\Response;
  7. use Psr\Http\Message\RequestInterface;
  8. use Psr\Http\Message\ResponseInterface;
  9. /**
  10. * Trait MockTrait
  11. *
  12. * @package AlibabaCloud\Credentials
  13. */
  14. trait MockTrait
  15. {
  16. /**
  17. * @var array
  18. */
  19. private static $mockQueue = [];
  20. /**
  21. * @var MockHandler
  22. */
  23. private static $mock;
  24. /**
  25. * @param integer $status
  26. * @param array $headers
  27. * @param array|string|object $body
  28. */
  29. public static function mockResponse($status = 200, array $headers = [], $body = null)
  30. {
  31. if (is_array($body) || is_object($body)) {
  32. $body = json_encode($body);
  33. }
  34. self::$mockQueue[] = new Response($status, $headers, $body);
  35. self::createHandlerStack();
  36. }
  37. private static function createHandlerStack()
  38. {
  39. self::$mock = new MockHandler(self::$mockQueue);
  40. }
  41. /**
  42. * @param string $message
  43. * @param RequestInterface $request
  44. * @param ResponseInterface|null $response
  45. * @param Exception|null $previous
  46. * @param array $handlerContext
  47. */
  48. public static function mockRequestException(
  49. $message,
  50. RequestInterface $request,
  51. ResponseInterface $response = null,
  52. Exception $previous = null,
  53. array $handlerContext = []
  54. ) {
  55. self::$mockQueue[] = new RequestException(
  56. $message,
  57. $request,
  58. $response,
  59. $previous,
  60. $handlerContext
  61. );
  62. self::createHandlerStack();
  63. }
  64. /**
  65. * @return void
  66. */
  67. public static function cancelMock()
  68. {
  69. self::$mockQueue = [];
  70. self::$mock = null;
  71. }
  72. /**
  73. * @return bool
  74. */
  75. public static function hasMock()
  76. {
  77. return (bool)self::$mockQueue;
  78. }
  79. /**
  80. * @return MockHandler
  81. */
  82. public static function getMock()
  83. {
  84. return self::$mock;
  85. }
  86. }