TransactionSaleTest.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Braintree\Test\Unit\Gateway\Http\Client;
  7. use Magento\Braintree\Gateway\Http\Client\TransactionSale;
  8. use Magento\Braintree\Model\Adapter\BraintreeAdapter;
  9. use Magento\Braintree\Model\Adapter\BraintreeAdapterFactory;
  10. use Magento\Payment\Gateway\Http\TransferInterface;
  11. use Magento\Payment\Model\Method\Logger;
  12. use PHPUnit_Framework_MockObject_MockObject as MockObject;
  13. use Psr\Log\LoggerInterface;
  14. /**
  15. * Tests \Magento\Braintree\Gateway\Http\Client\TransactionSale.
  16. */
  17. class TransactionSaleTest extends \PHPUnit\Framework\TestCase
  18. {
  19. /**
  20. * @var TransactionSale
  21. */
  22. private $model;
  23. /**
  24. * @var Logger|MockObject
  25. */
  26. private $loggerMock;
  27. /**
  28. * @var BraintreeAdapter|MockObject
  29. */
  30. private $adapterMock;
  31. /**
  32. * @inheritdoc
  33. */
  34. protected function setUp()
  35. {
  36. /** @var LoggerInterface|MockObject $criticalLoggerMock */
  37. $criticalLoggerMock = $this->getMockForAbstractClass(LoggerInterface::class);
  38. $this->loggerMock = $this->getMockBuilder(Logger::class)
  39. ->disableOriginalConstructor()
  40. ->getMock();
  41. $this->adapterMock = $this->getMockBuilder(BraintreeAdapter::class)
  42. ->disableOriginalConstructor()
  43. ->getMock();
  44. /** @var BraintreeAdapterFactory|MockObject $adapterFactoryMock */
  45. $adapterFactoryMock = $this->getMockBuilder(BraintreeAdapterFactory::class)
  46. ->disableOriginalConstructor()
  47. ->getMock();
  48. $adapterFactoryMock->expects(self::once())
  49. ->method('create')
  50. ->willReturn($this->adapterMock);
  51. $this->model = new TransactionSale($criticalLoggerMock, $this->loggerMock, $adapterFactoryMock);
  52. }
  53. /**
  54. * Runs test placeRequest method (exception)
  55. *
  56. * @return void
  57. *
  58. * @expectedException \Magento\Payment\Gateway\Http\ClientException
  59. * @expectedExceptionMessage Test messages
  60. */
  61. public function testPlaceRequestException()
  62. {
  63. $this->loggerMock->expects($this->once())
  64. ->method('debug')
  65. ->with(
  66. [
  67. 'request' => $this->getTransferData(),
  68. 'client' => TransactionSale::class,
  69. 'response' => []
  70. ]
  71. );
  72. $this->adapterMock->expects($this->once())
  73. ->method('sale')
  74. ->willThrowException(new \Exception('Test messages'));
  75. /** @var TransferInterface|MockObject $transferObjectMock */
  76. $transferObjectMock = $this->getTransferObjectMock();
  77. $this->model->placeRequest($transferObjectMock);
  78. }
  79. /**
  80. * Run test placeRequest method
  81. *
  82. * @return void
  83. */
  84. public function testPlaceRequestSuccess()
  85. {
  86. $response = $this->getResponseObject();
  87. $this->adapterMock->expects($this->once())
  88. ->method('sale')
  89. ->with($this->getTransferData())
  90. ->willReturn($response);
  91. $this->loggerMock->expects($this->once())
  92. ->method('debug')
  93. ->with(
  94. [
  95. 'request' => $this->getTransferData(),
  96. 'client' => TransactionSale::class,
  97. 'response' => ['success' => 1]
  98. ]
  99. );
  100. $actualResult = $this->model->placeRequest($this->getTransferObjectMock());
  101. $this->assertTrue(is_object($actualResult['object']));
  102. $this->assertEquals(['object' => $response], $actualResult);
  103. }
  104. /**
  105. * Creates mock object for TransferInterface.
  106. *
  107. * @return TransferInterface|MockObject
  108. */
  109. private function getTransferObjectMock()
  110. {
  111. $transferObjectMock = $this->createMock(TransferInterface::class);
  112. $transferObjectMock->expects($this->once())
  113. ->method('getBody')
  114. ->willReturn($this->getTransferData());
  115. return $transferObjectMock;
  116. }
  117. /**
  118. * Creates stub for a response.
  119. *
  120. * @return \stdClass
  121. */
  122. private function getResponseObject()
  123. {
  124. $obj = new \stdClass;
  125. $obj->success = true;
  126. return $obj;
  127. }
  128. /**
  129. * Creates stub request data.
  130. *
  131. * @return array
  132. */
  133. private function getTransferData()
  134. {
  135. return [
  136. 'test-data-key' => 'test-data-value'
  137. ];
  138. }
  139. }