WebhookMessageReaderTest.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Signifyd\Test\Unit\Model\SignifydGateway\Response;
  7. use Magento\Framework\Json\DecoderInterface;
  8. use Magento\Signifyd\Model\SignifydGateway\Response\WebhookRequest;
  9. use Magento\Signifyd\Model\SignifydGateway\Response\WebhookMessageReader;
  10. use Magento\Signifyd\Model\SignifydGateway\Response\WebhookMessage;
  11. use Magento\Signifyd\Model\SignifydGateway\Response\WebhookMessageFactory;
  12. /**
  13. * Class WebhookMessageReaderTest
  14. */
  15. class WebhookMessageReaderTest extends \PHPUnit\Framework\TestCase
  16. {
  17. /**
  18. * @var WebhookMessageReader
  19. */
  20. private $model;
  21. /**
  22. * @var DecoderInterface|\PHPUnit_Framework_MockObject_MockObject
  23. */
  24. private $decoder;
  25. /**
  26. * @var WebhookMessageFactory|\PHPUnit_Framework_MockObject_MockObject
  27. */
  28. private $webhookMessageFactory;
  29. /**
  30. * @var WebhookRequest|\PHPUnit_Framework_MockObject_MockObject
  31. */
  32. private $webhookRequest;
  33. /**
  34. * @inheritdoc
  35. */
  36. protected function setUp()
  37. {
  38. $this->decoder = $this->getMockBuilder(DecoderInterface::class)
  39. ->getMockForAbstractClass();
  40. $this->webhookMessageFactory = $this->getMockBuilder(WebhookMessageFactory::class)
  41. ->setMethods(['create'])
  42. ->disableOriginalConstructor()
  43. ->getMock();
  44. $this->webhookRequest = $this->getMockBuilder(WebhookRequest::class)
  45. ->disableOriginalConstructor()
  46. ->getMock();
  47. $this->model = new WebhookMessageReader(
  48. $this->decoder,
  49. $this->webhookMessageFactory
  50. );
  51. }
  52. /**
  53. * Tests successful reading webhook message from request.
  54. *
  55. */
  56. public function testReadSuccess()
  57. {
  58. $rawBody = 'body';
  59. $topic = 'topic';
  60. $decodedData = ['status' => "DISMISSED", 'orderId' => '19418'];
  61. $this->webhookRequest->expects($this->once())
  62. ->method('getBody')
  63. ->willReturn($rawBody);
  64. $this->webhookRequest->expects($this->once())
  65. ->method('getEventTopic')
  66. ->willReturn('topic');
  67. $this->decoder->expects($this->once())
  68. ->method('decode')
  69. ->with($rawBody)
  70. ->willReturn($decodedData);
  71. $webhookMessage = $this->getMockBuilder(WebhookMessage::class)
  72. ->disableOriginalConstructor()
  73. ->getMock();
  74. $this->webhookMessageFactory->expects($this->once())
  75. ->method('create')
  76. ->with(
  77. [
  78. 'data' => $decodedData,
  79. 'eventTopic' => $topic
  80. ]
  81. )
  82. ->willReturn($webhookMessage);
  83. $this->assertEquals(
  84. $webhookMessage,
  85. $this->model->read($this->webhookRequest)
  86. );
  87. }
  88. /**
  89. * Tests reading failure webhook message from request.
  90. *
  91. * @expectedException \InvalidArgumentException
  92. */
  93. public function testReadFail()
  94. {
  95. $this->decoder->expects($this->once())
  96. ->method('decode')
  97. ->willThrowException(new \Exception('Error'));
  98. $this->model->read($this->webhookRequest);
  99. }
  100. }