CreditmemoDocumentFactoryTest.php 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Sales\Test\Unit\Model\Order;
  7. use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
  8. use Magento\Sales\Api\Data\CreditmemoCommentInterfaceFactory;
  9. use Magento\Sales\Api\OrderRepositoryInterface;
  10. use Magento\Sales\Model\Order\CreditmemoDocumentFactory;
  11. use Magento\Sales\Api\Data\CreditmemoCommentInterface;
  12. use Magento\Sales\Model\Order;
  13. use Magento\Sales\Model\Order\Invoice;
  14. use Magento\Sales\Api\Data\CreditmemoItemCreationInterface;
  15. use Magento\Sales\Api\Data\CreditmemoCommentCreationInterface;
  16. use Magento\Framework\EntityManager\HydratorPool;
  17. use Magento\Sales\Api\Data\CreditmemoCreationArgumentsInterface;
  18. use Magento\Sales\Model\Order\CreditmemoFactory;
  19. use Magento\Framework\EntityManager\HydratorInterface;
  20. /**
  21. * Class CreditmemoDocumentFactoryTest
  22. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  23. */
  24. class CreditmemoDocumentFactoryTest extends \PHPUnit\Framework\TestCase
  25. {
  26. /**
  27. * @var ObjectManager
  28. */
  29. private $objectManager;
  30. /**
  31. * @var CreditmemoDocumentFactory|\PHPUnit_Framework_MockObject_MockObject
  32. */
  33. private $factory;
  34. /**
  35. * @var CreditmemoFactory|\PHPUnit_Framework_MockObject_MockObject
  36. */
  37. private $creditmemoFactoryMock;
  38. /**
  39. * @var CreditmemoCommentInterfaceFactory|\PHPUnit_Framework_MockObject_MockObject
  40. */
  41. private $commentFactoryMock;
  42. /**
  43. * @var HydratorPool|\PHPUnit_Framework_MockObject_MockObject
  44. */
  45. private $hydratorPoolMock;
  46. /**
  47. * @var HydratorInterface|\PHPUnit_Framework_MockObject_MockObject
  48. */
  49. private $hydratorMock;
  50. /**
  51. * @var \Magento\Sales\Model\Order|\PHPUnit_Framework_MockObject_MockObject
  52. */
  53. private $orderMock;
  54. /**
  55. * @var \Magento\Sales\Model\Order\Invoice|\PHPUnit_Framework_MockObject_MockObject
  56. */
  57. private $invoiceMock;
  58. /**
  59. * @var CreditmemoItemCreationInterface|\PHPUnit_Framework_MockObject_MockObject
  60. */
  61. private $creditmemoItemCreationMock;
  62. /**
  63. * @var CreditmemoCommentCreationInterface|\PHPUnit_Framework_MockObject_MockObject
  64. */
  65. private $commentCreationMock;
  66. /**
  67. * @var CreditmemoCreationArgumentsInterface|\PHPUnit_Framework_MockObject_MockObject
  68. */
  69. private $commentCreationArgumentsMock;
  70. /**
  71. * @var Order\Creditmemo|\PHPUnit_Framework_MockObject_MockObject
  72. */
  73. private $creditmemoMock;
  74. /**
  75. * @var CreditmemoCommentInterface|\PHPUnit_Framework_MockObject_MockObject
  76. */
  77. private $commentMock;
  78. /**
  79. * @var OrderRepositoryInterface|\PHPUnit_Framework_MockObject_MockObject
  80. */
  81. private $orderRepositoryMock;
  82. public function setUp()
  83. {
  84. $this->objectManager = new ObjectManager($this);
  85. $this->creditmemoFactoryMock = $this->getMockBuilder(CreditmemoFactory::class)
  86. ->disableOriginalConstructor()
  87. ->getMock();
  88. $this->commentFactoryMock =
  89. $this->getMockBuilder(CreditmemoCommentInterfaceFactory::class)
  90. ->disableOriginalConstructor()
  91. ->getMock();
  92. $this->hydratorPoolMock = $this->getMockBuilder(HydratorPool::class)
  93. ->disableOriginalConstructor()
  94. ->getMock();
  95. $this->orderRepositoryMock = $this->getMockBuilder(OrderRepositoryInterface::class)
  96. ->disableOriginalConstructor()
  97. ->getMock();
  98. $this->orderMock = $this->getMockBuilder(Order::class)
  99. ->disableOriginalConstructor()
  100. ->getMock();
  101. $this->invoiceMock = $this->getMockBuilder(Invoice::class)
  102. ->disableOriginalConstructor()
  103. ->getMock();
  104. $this->creditmemoItemCreationMock = $this->getMockBuilder(CreditmemoItemCreationInterface::class)
  105. ->disableOriginalConstructor()
  106. ->getMock();
  107. $this->creditmemoMock = $this->getMockBuilder(Order\Creditmemo::class)
  108. ->disableOriginalConstructor()
  109. ->getMock();
  110. $this->hydratorMock = $this->getMockBuilder(HydratorInterface::class)
  111. ->disableOriginalConstructor()
  112. ->getMock();
  113. $this->commentCreationArgumentsMock = $this->getMockBuilder(CreditmemoCreationArgumentsInterface::class)
  114. ->disableOriginalConstructor()
  115. ->getMock();
  116. $this->commentCreationMock = $this->getMockBuilder(CreditmemoCommentCreationInterface::class)
  117. ->disableOriginalConstructor()
  118. ->getMock();
  119. $this->creditmemoMock->expects($this->once())
  120. ->method('getEntityId')
  121. ->willReturn(11);
  122. $this->commentMock = $this->getMockBuilder(CreditmemoCommentInterface::class)
  123. ->disableOriginalConstructor()
  124. ->setMethods(
  125. array_merge(
  126. get_class_methods(CreditmemoCommentInterface::class),
  127. ['setStoreId', 'setCreditmemo']
  128. )
  129. )
  130. ->getMock();
  131. $this->factory = $this->objectManager->getObject(
  132. CreditmemoDocumentFactory::class,
  133. [
  134. 'creditmemoFactory' => $this->creditmemoFactoryMock,
  135. 'commentFactory' => $this->commentFactoryMock,
  136. 'hydratorPool' => $this->hydratorPoolMock,
  137. 'orderRepository' => $this->orderRepositoryMock
  138. ]
  139. );
  140. }
  141. private function commonFactoryFlow()
  142. {
  143. $this->creditmemoItemCreationMock->expects($this->once())
  144. ->method('getOrderItemId')
  145. ->willReturn(7);
  146. $this->creditmemoItemCreationMock->expects($this->once())
  147. ->method('getQty')
  148. ->willReturn(3);
  149. $this->hydratorPoolMock->expects($this->exactly(2))
  150. ->method('getHydrator')
  151. ->willReturnMap(
  152. [
  153. [CreditmemoCreationArgumentsInterface::class, $this->hydratorMock],
  154. [CreditmemoCommentCreationInterface::class, $this->hydratorMock],
  155. ]
  156. );
  157. $this->hydratorMock->expects($this->exactly(2))
  158. ->method('extract')
  159. ->willReturnMap([
  160. [$this->commentCreationArgumentsMock, ['shipping_amount' => '20.00']],
  161. [$this->commentCreationMock, ['comment' => 'text']]
  162. ]);
  163. $this->commentFactoryMock->expects($this->once())
  164. ->method('create')
  165. ->with(
  166. [
  167. 'data' => [
  168. 'comment' => 'text'
  169. ]
  170. ]
  171. )
  172. ->willReturn($this->commentMock);
  173. $this->creditmemoMock->expects($this->once())
  174. ->method('getEntityId')
  175. ->willReturn(11);
  176. $this->creditmemoMock->expects($this->once())
  177. ->method('getStoreId')
  178. ->willReturn(1);
  179. $this->commentMock->expects($this->once())
  180. ->method('setParentId')
  181. ->with(11)
  182. ->willReturnSelf();
  183. $this->commentMock->expects($this->once())
  184. ->method('setStoreId')
  185. ->with(1)
  186. ->willReturnSelf();
  187. $this->commentMock->expects($this->once())
  188. ->method('setIsCustomerNotified')
  189. ->with(true)
  190. ->willReturnSelf();
  191. $this->commentMock->expects($this->once())
  192. ->method('setCreditmemo')
  193. ->with($this->creditmemoMock)
  194. ->willReturnSelf();
  195. }
  196. public function testCreateFromOrder()
  197. {
  198. $this->commonFactoryFlow();
  199. $this->creditmemoFactoryMock->expects($this->once())
  200. ->method('createByOrder')
  201. ->with(
  202. $this->orderMock,
  203. [
  204. 'shipping_amount' => '20.00',
  205. 'qtys' => [7 => 3]
  206. ]
  207. )
  208. ->willReturn($this->creditmemoMock);
  209. $this->factory->createFromOrder(
  210. $this->orderMock,
  211. [$this->creditmemoItemCreationMock],
  212. $this->commentCreationMock,
  213. true,
  214. $this->commentCreationArgumentsMock
  215. );
  216. }
  217. public function testCreateFromInvoice()
  218. {
  219. $this->commonFactoryFlow();
  220. $this->creditmemoFactoryMock->expects($this->once())
  221. ->method('createByInvoice')
  222. ->with(
  223. $this->invoiceMock,
  224. [
  225. 'shipping_amount' => '20.00',
  226. 'qtys' => [7 => 3]
  227. ]
  228. )
  229. ->willReturn($this->creditmemoMock);
  230. $this->orderRepositoryMock->expects($this->once())
  231. ->method('get')
  232. ->willReturn($this->orderMock);
  233. $this->invoiceMock->expects($this->once())
  234. ->method('setOrder')
  235. ->with($this->orderMock)
  236. ->willReturnSelf();
  237. $this->factory->createFromInvoice(
  238. $this->invoiceMock,
  239. [$this->creditmemoItemCreationMock],
  240. $this->commentCreationMock,
  241. true,
  242. $this->commentCreationArgumentsMock
  243. );
  244. }
  245. }