CreditmemoLoaderTest.php 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Sales\Test\Unit\Controller\Adminhtml\Order;
  7. /**
  8. * Class CreditmemoLoaderTest
  9. *
  10. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  11. */
  12. class CreditmemoLoaderTest extends \PHPUnit\Framework\TestCase
  13. {
  14. /**
  15. * @var \Magento\Sales\Controller\Adminhtml\Order\CreditmemoLoader
  16. */
  17. private $loader;
  18. /**
  19. * @var \Magento\Sales\Api\CreditmemoRepositoryInterface|\PHPUnit_Framework_MockObject_MockObject
  20. */
  21. private $creditmemoRepositoryMock;
  22. /**
  23. * @var \Magento\Sales\Model\Order\CreditmemoFactory|\PHPUnit_Framework_MockObject_MockObject
  24. */
  25. private $creditmemoFactoryMock;
  26. /**
  27. * @var \PHPUnit_Framework_MockObject_MockObject
  28. */
  29. private $orderFactoryMock;
  30. /**
  31. * @var \PHPUnit_Framework_MockObject_MockObject
  32. */
  33. private $invoiceRepositoryMock;
  34. /**
  35. * @var \PHPUnit_Framework_MockObject_MockObject
  36. */
  37. private $eventManagerMock;
  38. /**
  39. * @var \PHPUnit_Framework_MockObject_MockObject
  40. */
  41. private $sessionMock;
  42. /**
  43. * @var \PHPUnit_Framework_MockObject_MockObject
  44. */
  45. private $messageManagerMock;
  46. /**
  47. * @var \PHPUnit_Framework_MockObject_MockObject
  48. */
  49. private $registryMock;
  50. /**
  51. * @var \PHPUnit_Framework_MockObject_MockObject
  52. */
  53. private $helperMock;
  54. /**
  55. * @var \PHPUnit_Framework_MockObject_MockObject
  56. */
  57. private $stockConfiguration;
  58. protected function setUp()
  59. {
  60. $data = [];
  61. $this->creditmemoRepositoryMock = $this->getMockBuilder(\Magento\Sales\Api\CreditmemoRepositoryInterface::class)
  62. ->disableOriginalConstructor()
  63. ->getMock();
  64. $this->creditmemoFactoryMock = $this->createMock(\Magento\Sales\Model\Order\CreditmemoFactory::class);
  65. $this->orderFactoryMock = $this->getMockBuilder(\Magento\Sales\Model\OrderFactory::class)
  66. ->disableOriginalConstructor()
  67. ->setMethods(['create'])
  68. ->getMock();
  69. $this->invoiceRepositoryMock = $this->getMockBuilder(\Magento\Sales\Api\InvoiceRepositoryInterface::class)
  70. ->disableOriginalConstructor()
  71. ->setMethods(['create'])
  72. ->getMockForAbstractClass();
  73. $this->eventManagerMock = $this->getMockBuilder(\Magento\Framework\Event\Manager::class)
  74. ->disableOriginalConstructor()
  75. ->setMethods([])
  76. ->getMock();
  77. $this->sessionMock = $this->getMockBuilder(\Magento\Backend\Model\Session::class)
  78. ->disableOriginalConstructor()
  79. ->setMethods([])
  80. ->getMock();
  81. $this->messageManagerMock = $this->getMockBuilder(\Magento\Framework\Message\Manager::class)
  82. ->disableOriginalConstructor()
  83. ->setMethods([])
  84. ->getMock();
  85. $this->registryMock = $this->getMockBuilder(\Magento\Framework\Registry::class)
  86. ->disableOriginalConstructor()
  87. ->setMethods([])
  88. ->getMock();
  89. $this->helperMock = $this->getMockBuilder(\Magento\CatalogInventory\Helper\Data::class)
  90. ->disableOriginalConstructor()
  91. ->setMethods([])
  92. ->getMock();
  93. $this->stockConfiguration = $this->getMockBuilder(\Magento\CatalogInventory\Model\Configuration::class)
  94. ->disableOriginalConstructor()
  95. ->setMethods([])
  96. ->getMock();
  97. $this->loader = new \Magento\Sales\Controller\Adminhtml\Order\CreditmemoLoader(
  98. $this->creditmemoRepositoryMock,
  99. $this->creditmemoFactoryMock,
  100. $this->orderFactoryMock,
  101. $this->invoiceRepositoryMock,
  102. $this->eventManagerMock,
  103. $this->sessionMock,
  104. $this->messageManagerMock,
  105. $this->registryMock,
  106. $this->stockConfiguration,
  107. $data
  108. );
  109. }
  110. public function testLoadByCreditmemoId()
  111. {
  112. $this->loader->setCreditmemoId(1);
  113. $this->loader->setOrderId(1);
  114. $this->loader->setCreditmemo('test');
  115. $creditmemoMock = $this->getMockBuilder(\Magento\Sales\Model\Order\Creditmemo::class)
  116. ->disableOriginalConstructor()
  117. ->setMethods([])
  118. ->getMock();
  119. $this->creditmemoRepositoryMock->expects($this->once())
  120. ->method('get')
  121. ->willReturn($creditmemoMock);
  122. $this->assertInstanceOf(\Magento\Sales\Model\Order\Creditmemo::class, $this->loader->load());
  123. }
  124. public function testLoadCannotCreditmemo()
  125. {
  126. $orderId = 1234;
  127. $invoiceId = 99;
  128. $this->loader->setCreditmemoId(0);
  129. $this->loader->setOrderId($orderId);
  130. $this->loader->setCreditmemo('test');
  131. $this->loader->setInvoiceId($invoiceId);
  132. $orderMock = $this->getMockBuilder(\Magento\Sales\Model\Order::class)
  133. ->disableOriginalConstructor()
  134. ->setMethods([])
  135. ->getMock();
  136. $orderMock->expects($this->once())
  137. ->method('load')
  138. ->willReturnSelf();
  139. $orderMock->expects($this->once())
  140. ->method('getId')
  141. ->willReturn($orderId);
  142. $orderMock->expects($this->once())
  143. ->method('canCreditmemo')
  144. ->willReturn(false);
  145. $this->orderFactoryMock->expects($this->once())
  146. ->method('create')
  147. ->willReturn($orderMock);
  148. $invoiceMock = $this->getMockBuilder(\Magento\Sales\Model\Order\Invoice::class)
  149. ->disableOriginalConstructor()
  150. ->setMethods([])
  151. ->getMock();
  152. $invoiceMock->expects($this->any())
  153. ->method('setOrder')
  154. ->with($orderMock)
  155. ->willReturnSelf();
  156. $invoiceMock->expects($this->any())
  157. ->method('getId')
  158. ->willReturn(1);
  159. $this->invoiceRepositoryMock->expects($this->once())
  160. ->method('get')
  161. ->willReturn($invoiceMock);
  162. $this->assertFalse($this->loader->load());
  163. }
  164. public function testLoadByOrder()
  165. {
  166. $orderId = 1234;
  167. $invoiceId = 99;
  168. $qty = 1;
  169. $data = ['items' => [1 => ['qty' => $qty, 'back_to_stock' => true]]];
  170. $this->loader->setCreditmemoId(0);
  171. $this->loader->setOrderId($orderId);
  172. $this->loader->setCreditmemo($data);
  173. $this->loader->setInvoiceId($invoiceId);
  174. $orderMock = $this->getMockBuilder(\Magento\Sales\Model\Order::class)
  175. ->disableOriginalConstructor()
  176. ->setMethods([])
  177. ->getMock();
  178. $orderMock->expects($this->once())
  179. ->method('load')
  180. ->willReturnSelf();
  181. $orderMock->expects($this->once())
  182. ->method('getId')
  183. ->willReturn($orderId);
  184. $orderMock->expects($this->once())
  185. ->method('canCreditmemo')
  186. ->willReturn(true);
  187. $this->orderFactoryMock->expects($this->once())
  188. ->method('create')
  189. ->willReturn($orderMock);
  190. $invoiceMock = $this->getMockBuilder(\Magento\Sales\Model\Order\Invoice::class)
  191. ->disableOriginalConstructor()
  192. ->getMock();
  193. $invoiceMock->expects($this->any())
  194. ->method('setOrder')
  195. ->willReturnSelf();
  196. $invoiceMock->expects($this->any())
  197. ->method('getId')
  198. ->willReturn(1);
  199. $this->invoiceRepositoryMock->expects($this->once())
  200. ->method('get')
  201. ->willReturn($invoiceMock);
  202. $creditmemoMock = $this->getMockBuilder(\Magento\Sales\Model\Order\Creditmemo::class)
  203. ->disableOriginalConstructor()
  204. ->setMethods([])
  205. ->getMock();
  206. $orderItemMock = $this->getMockBuilder(\Magento\Sales\Model\Order\Item::class)
  207. ->disableOriginalConstructor()
  208. ->setMethods([])
  209. ->getMock();
  210. $creditmemoItemMock = $this->getMockBuilder(\Magento\Sales\Model\Order\Creditmemo\Item::class)
  211. ->disableOriginalConstructor()
  212. ->setMethods([])
  213. ->getMock();
  214. $creditmemoItemMock->expects($this->any())
  215. ->method('getOrderItem')
  216. ->willReturn($orderItemMock);
  217. $items = [$creditmemoItemMock, $creditmemoItemMock, $creditmemoItemMock];
  218. $creditmemoMock->expects($this->any())
  219. ->method('getAllItems')
  220. ->willReturn($items);
  221. $data['qtys'] = [1 => $qty];
  222. $this->creditmemoFactoryMock->expects($this->any())
  223. ->method('createByInvoice')
  224. ->with($invoiceMock, $data)
  225. ->willReturn($creditmemoMock);
  226. $this->assertEquals($creditmemoMock, $this->loader->load());
  227. }
  228. }