CreditMemoObserverTest.php 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. <?php
  2. namespace Vertex\Tax\Test\Unit\Observer;
  3. use Magento\Framework\Event;
  4. use Magento\Framework\Event\Observer;
  5. use Magento\Framework\Exception\NoSuchEntityException;
  6. use Magento\Framework\Message\ManagerInterface;
  7. use Magento\Sales\Model\Order;
  8. use Magento\Sales\Model\Order\Creditmemo;
  9. use Magento\Store\Model\Store;
  10. use Vertex\Services\Invoice\Request;
  11. use Vertex\Services\Invoice\Response;
  12. use Vertex\Services\Invoice\ResponseInterface;
  13. use Vertex\Tax\Model\Api\Data\InvoiceRequestBuilder;
  14. use Vertex\Tax\Model\Config;
  15. use Vertex\Tax\Model\ConfigurationValidator;
  16. use Vertex\Tax\Model\CountryGuard;
  17. use Vertex\Tax\Model\OrderHasInvoiceDeterminer;
  18. use Vertex\Tax\Model\Repository\OrderInvoiceStatusRepository;
  19. use Vertex\Tax\Model\TaxInvoice;
  20. use Vertex\Tax\Observer\CreditMemoObserver;
  21. use Vertex\Tax\Test\Unit\TestCase;
  22. use PHPUnit_Framework_MockObject_MockObject as MockObject;
  23. class CreditMemoObserverTest extends TestCase
  24. {
  25. /** @var MockObject|Config */
  26. private $configMock;
  27. /** @var MockObject|ConfigurationValidator */
  28. private $configValidatorMock;
  29. /** @var MockObject|CountryGuard */
  30. private $countryGuardMock;
  31. /** @var CreditMemoObserver */
  32. private $creditMemoObserver;
  33. /** @var MockObject|ManagerInterface */
  34. private $managerInterfaceMock;
  35. /** @var MockObject|TaxInvoice */
  36. private $taxInvoiceMock;
  37. /** @var MockObject|InvoiceRequestBuilder */
  38. private $invoiceRequestBuilderMock;
  39. /** @var MockObject|OrderHasInvoiceDeterminer */
  40. private $hasInvoiceDeterminer;
  41. /** @var MockObject|OrderInvoiceStatusRepository */
  42. private $orderInvoiceStatusRepositoryMock;
  43. protected function setUp()
  44. {
  45. parent::setUp();
  46. $this->configMock = $this->getMockBuilder(Config::class)
  47. ->setMethods(['isVertexActive', 'invoiceOrderStatus'])
  48. ->disableOriginalConstructor()
  49. ->getMock();
  50. $this->countryGuardMock = $this->getMockBuilder(CountryGuard::class)
  51. ->setMethods(['isOrderServiceableByVertex'])
  52. ->disableOriginalConstructor()
  53. ->getMock();
  54. $this->taxInvoiceMock = $this->getMockBuilder(TaxInvoice::class)
  55. ->setMethods(['sendInvoiceRequest', 'sendRefundRequest'])
  56. ->disableOriginalConstructor()
  57. ->getMock();
  58. $this->managerInterfaceMock = $this->getMockBuilder(ManagerInterface::class)
  59. ->setMethods(['addSuccessMessage'])
  60. ->disableOriginalConstructor()
  61. ->getMockForAbstractClass();
  62. $this->configValidatorMock = $this->getMockBuilder(ConfigurationValidator::class)
  63. ->setMethods(['execute', 'isValid'])
  64. ->disableOriginalConstructor()
  65. ->getMockForAbstractClass();
  66. $result = new ConfigurationValidator\Result();
  67. $result->setValid(true);
  68. $this->configValidatorMock->method('execute')
  69. ->willReturn($result);
  70. $this->invoiceRequestBuilderMock = $this->getMockBuilder(InvoiceRequestBuilder::class)
  71. ->setMethods(['buildFromCreditmemo'])
  72. ->disableOriginalConstructor()
  73. ->getMock();
  74. $this->hasInvoiceDeterminer = $this->getMockBuilder(OrderHasInvoiceDeterminer::class)
  75. ->setMethods(['hasinvoice'])
  76. ->disableOriginalConstructor()
  77. ->getMock();
  78. $this->orderInvoiceStatusRepositoryMock = $this->getMockBuilder(OrderInvoiceStatusRepository::class)
  79. ->setMethods(['getByOrderId'])
  80. ->disableOriginalConstructor()
  81. ->getMock();
  82. $this->orderInvoiceStatusRepositoryMock
  83. ->method('getByOrderId')
  84. ->willThrowException(new NoSuchEntityException(__('No Such Entity')));
  85. $this->creditMemoObserver = $this->getObject(
  86. CreditMemoObserver::class,
  87. [
  88. 'config' => $this->configMock,
  89. 'countryGuard' => $this->countryGuardMock,
  90. 'taxInvoice' => $this->taxInvoiceMock,
  91. 'messageManager' => $this->managerInterfaceMock,
  92. 'configValidator' => $this->configValidatorMock,
  93. 'invoiceRequestBuilder' => $this->invoiceRequestBuilderMock,
  94. 'hasInvoiceDeterminer' => $this->hasInvoiceDeterminer,
  95. 'orderInvoiceStatusRepository' => $this->orderInvoiceStatusRepositoryMock,
  96. ]
  97. );
  98. }
  99. /**
  100. * Test if creditmemo is sent to Vertex
  101. *
  102. * @return void
  103. */
  104. public function testSendRefundRequest()
  105. {
  106. /** @var MockObject|Event $eventMock */
  107. $eventMock = $this->createPartialMock(Event::class, ['getCreditmemo']);
  108. /** @var MockObject|Observer $observerMock */
  109. $observerMock = $this->createPartialMock(Observer::class, ['getEvent']);
  110. /** @var MockObject|Store $storeMock */
  111. $storeMock = $this->createMock(Store::class);
  112. /** @var MockObject|Order $orderMock */
  113. $orderMock = $this->createPartialMock(Order::class, ['getStore', 'getId', 'getStatus']);
  114. $orderMock->method('getStore')->willReturn($storeMock);
  115. /** @var MockObject|Creditmemo $creditMemoMock */
  116. $creditMemoMock = $this->createMock(Creditmemo::class);
  117. $creditMemoMock->method('getOrder')->willReturn($orderMock);
  118. /** @var MockObject|ResponseInterface $responseMock */
  119. $responseMock = $this->createPartialMock(Response::class, ['getItems']);
  120. $responseMock->method('getItems')->willReturn([]);
  121. $observerMock->expects($this->once())
  122. ->method('getEvent')
  123. ->willReturn($eventMock);
  124. $eventMock->expects($this->once())
  125. ->method('getCreditmemo')
  126. ->willReturn($creditMemoMock);
  127. $this->configMock->expects($this->once())
  128. ->method('isVertexActive')
  129. ->with(null)
  130. ->willReturn(true);
  131. $this->hasInvoiceDeterminer->expects($this->once())
  132. ->method('hasInvoice')
  133. ->willReturn(true);
  134. $this->countryGuardMock->expects($this->once())
  135. ->method('isOrderServiceableByVertex')
  136. ->with($orderMock)
  137. ->willReturn(true);
  138. $this->configValidatorMock
  139. ->method('isValid')
  140. ->willReturn(true);
  141. $request = new Request();
  142. $this->invoiceRequestBuilderMock->expects($this->once())
  143. ->method('buildFromCreditmemo')
  144. ->with($creditMemoMock)
  145. ->willReturn($request);
  146. $this->taxInvoiceMock->expects($this->once())
  147. ->method('sendRefundRequest')
  148. ->with($request, $orderMock)
  149. ->willReturn($responseMock);
  150. $this->managerInterfaceMock->expects($this->once())
  151. ->method('addSuccessMessage')
  152. ->with('The Vertex invoice has been refunded.')
  153. ->willReturn($this->managerInterfaceMock);
  154. $this->creditMemoObserver->execute($observerMock);
  155. }
  156. }