123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Signifyd\Test\Unit\Model\SignifydGateway\Client;
- use Magento\Signifyd\Model\SignifydGateway\Client\ResponseHandler;
- use Magento\Framework\Json\DecoderInterface;
- use Magento\Signifyd\Model\SignifydGateway\ApiCallException;
- use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
- use \Zend_Http_Response as Response;
- use \PHPUnit_Framework_MockObject_MockObject as MockObject;
- class ResponseHandlerTest extends \PHPUnit\Framework\TestCase
- {
- /**
- * @var string
- */
- private static $errorMessage = 'Some error';
- /**
- * @var string
- */
- private static $testJson = '{"id": 1}';
- /**
- * @var int
- */
- private static $successfulCode = 200;
- /**
- * @var int
- */
- private static $phpVersionId = 50000;
- /**
- * @var ObjectManager
- */
- private $objectManager;
- /**
- * @var ResponseHandler|MockObject
- */
- private $responseHandler;
- /**
- * @var DecoderInterface|MockObject
- */
- private $dataDecoder;
- /**
- * @var Response|MockObject
- */
- private $response;
- public function setUp()
- {
- $this->objectManager = new ObjectManager($this);
- $this->dataDecoder = $this->getMockBuilder(DecoderInterface::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->response = $this->getMockBuilder(Response::class)
- ->disableOriginalConstructor()
- ->setMethods(['getStatus', 'getBody'])
- ->getMock();
- $this->responseHandler = $this->objectManager->getObject(ResponseHandler::class, [
- 'dataDecoder' => $this->dataDecoder
- ]);
- }
- /**
- * @dataProvider errorsProvider
- */
- public function testHandleFailureMessage($code, $message)
- {
- $this->response->expects($this->any())
- ->method('getStatus')
- ->willReturn($code);
- $this->response->expects($this->once())
- ->method('getBody')
- ->willReturn(self::$errorMessage);
- try {
- $this->responseHandler->handle($this->response);
- } catch (ApiCallException $e) {
- $this->assertEquals($e->getMessage(), sprintf($message, self::$errorMessage));
- }
- }
- /**
- * @return array
- */
- public function errorsProvider()
- {
- return [
- [400, 'Bad Request - The request could not be parsed. Response: %s'],
- [401, 'Unauthorized - user is not logged in, could not be authenticated. Response: %s'],
- [403, 'Forbidden - Cannot access resource. Response: %s'],
- [404, 'Not Found - resource does not exist. Response: %s'],
- [
- 409,
- 'Conflict - with state of the resource on server. Can occur with (too rapid) PUT requests. Response: %s'
- ],
- [500, 'Server error. Response: %s']
- ];
- }
- /**
- * @expectedException \Magento\Signifyd\Model\SignifydGateway\ApiCallException
- * @expectedExceptionMessage Response is not valid JSON: Decoding failed: Syntax error
- */
- public function testHandleEmptyJsonException()
- {
- $this->response->expects($this->any())
- ->method('getStatus')
- ->willReturn(self::$successfulCode);
- $this->response->expects($this->once())
- ->method('getBody')
- ->willReturn('');
- $r = new \ReflectionObject($this->responseHandler);
- $prop = $r->getProperty('phpVersionId');
- $prop->setAccessible(true);
- $prop->setValue(self::$phpVersionId);
- $this->responseHandler->handle($this->response);
- }
- /**
- * @expectedException \Magento\Signifyd\Model\SignifydGateway\ApiCallException
- * @expectedExceptionMessage Response is not valid JSON: Some error
- */
- public function testHandleInvalidJson()
- {
- $this->response->expects($this->any())
- ->method('getStatus')
- ->willReturn(self::$successfulCode);
- $this->response->expects($this->once())
- ->method('getBody')
- ->willReturn('param');
- $this->dataDecoder = $this->getMockBuilder(DecoderInterface::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->dataDecoder->expects($this->once())
- ->method('decode')
- ->with('param')
- ->willThrowException(new \Exception(self::$errorMessage, 30));
- $this->responseHandler = $this->objectManager->getObject(ResponseHandler::class, [
- 'dataDecoder' => $this->dataDecoder
- ]);
- $this->responseHandler->handle($this->response);
- }
- public function testHandle()
- {
- $this->response->expects($this->any())
- ->method('getStatus')
- ->willReturn(self::$successfulCode);
- $this->response->expects($this->once())
- ->method('getBody')
- ->willReturn(self::$testJson);
- $this->dataDecoder->expects($this->once())
- ->method('decode')
- ->willReturn(json_decode(self::$testJson, 1));
- $decodedResponseBody = $this->responseHandler->handle($this->response);
- $this->assertEquals($decodedResponseBody, ['id' => 1]);
- }
- }
|