ShipmentDocumentFactoryTest.php 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  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\EntityManager\HydratorPool;
  8. use Magento\Sales\Api\Data\ShipmentCommentCreationInterface;
  9. use Magento\Sales\Api\Data\ShipmentItemCreationInterface;
  10. use Magento\Sales\Api\Data\ShipmentTrackCreationInterface;
  11. use Magento\Sales\Model\Order\ShipmentFactory;
  12. use Magento\Sales\Model\Order\ShipmentDocumentFactory;
  13. use Magento\Sales\Model\Order;
  14. use Magento\Sales\Api\Data\ShipmentInterface;
  15. use Magento\Sales\Model\Order\Shipment\TrackFactory;
  16. use Magento\Sales\Model\Order\Shipment\Track;
  17. use Magento\Framework\EntityManager\HydratorInterface;
  18. use Magento\Sales\Model\Order\ShipmentDocumentFactory\ExtensionAttributesProcessor;
  19. /**
  20. * Class ShipmentDocumentFactoryTest
  21. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  22. */
  23. class ShipmentDocumentFactoryTest extends \PHPUnit\Framework\TestCase
  24. {
  25. /**
  26. * @var \PHPUnit_Framework_MockObject_MockObject|ShipmentFactory
  27. */
  28. private $shipmentFactoryMock;
  29. /**
  30. * @var \PHPUnit_Framework_MockObject_MockObject|Order
  31. */
  32. private $orderMock;
  33. /**
  34. * @var \PHPUnit_Framework_MockObject_MockObject|ShipmentItemCreationInterface
  35. */
  36. private $itemMock;
  37. /**
  38. * @var \PHPUnit_Framework_MockObject_MockObject|ShipmentCommentCreationInterface
  39. */
  40. private $commentMock;
  41. /**
  42. * @var \PHPUnit_Framework_MockObject_MockObject|ShipmentInterface
  43. */
  44. private $shipmentMock;
  45. /**
  46. * @var ShipmentDocumentFactory
  47. */
  48. private $shipmentDocumentFactory;
  49. /**
  50. * @var \PHPUnit_Framework_MockObject_MockObject|HydratorPool
  51. */
  52. private $hydratorPoolMock;
  53. /**
  54. * @var \PHPUnit_Framework_MockObject_MockObject|TrackFactory
  55. */
  56. private $trackFactoryMock;
  57. /**
  58. * @var \PHPUnit_Framework_MockObject_MockObject|HydratorInterface
  59. */
  60. private $hydratorMock;
  61. /**
  62. * @var \PHPUnit_Framework_MockObject_MockObject|ExtensionAttributesProcessor
  63. */
  64. private $extensionAttributeProcessorMock;
  65. /**
  66. * @var \PHPUnit_Framework_MockObject_MockObject|Track
  67. */
  68. private $trackMock;
  69. protected function setUp()
  70. {
  71. $this->shipmentFactoryMock = $this->getMockBuilder(ShipmentFactory::class)
  72. ->disableOriginalConstructor()
  73. ->getMock();
  74. $this->orderMock = $this->getMockBuilder(Order::class)
  75. ->disableOriginalConstructor()
  76. ->getMock();
  77. $this->itemMock = $this->getMockBuilder(ShipmentItemCreationInterface::class)
  78. ->disableOriginalConstructor()
  79. ->getMock();
  80. $this->commentMock = $this->getMockBuilder(ShipmentCommentCreationInterface::class)
  81. ->disableOriginalConstructor()
  82. ->getMock();
  83. $this->shipmentMock = $this->getMockBuilder(ShipmentInterface::class)
  84. ->disableOriginalConstructor()
  85. ->setMethods(['addComment', 'addTrack', 'setCustomerNote', 'setCustomerNoteNotify'])
  86. ->getMockForAbstractClass();
  87. $this->hydratorPoolMock = $this->getMockBuilder(HydratorPool::class)
  88. ->disableOriginalConstructor()
  89. ->getMock();
  90. $this->trackFactoryMock = $this->getMockBuilder(TrackFactory::class)
  91. ->setMethods(['create'])
  92. ->disableOriginalConstructor()
  93. ->getMock();
  94. $this->trackMock = $this->getMockBuilder(Track::class)
  95. ->disableOriginalConstructor()
  96. ->getMock();
  97. $this->hydratorMock = $this->getMockBuilder(HydratorInterface::class)
  98. ->disableOriginalConstructor()
  99. ->getMockForAbstractClass();
  100. $this->extensionAttributeProcessorMock = $this->getMockBuilder(ExtensionAttributesProcessor::class)
  101. ->disableOriginalConstructor()
  102. ->getMock();
  103. $this->shipmentDocumentFactory = new ShipmentDocumentFactory(
  104. $this->shipmentFactoryMock,
  105. $this->hydratorPoolMock,
  106. $this->trackFactoryMock,
  107. $this->extensionAttributeProcessorMock
  108. );
  109. }
  110. public function testCreate()
  111. {
  112. $trackNum = "123456789";
  113. $trackData = [$trackNum];
  114. $tracks = [$this->trackMock];
  115. $appendComment = true;
  116. $packages = [];
  117. $items = [1 => 10];
  118. $this->extensionAttributeProcessorMock->expects($this->never())->method('execute');
  119. $this->itemMock->expects($this->once())->method('getOrderItemId')->willReturn(1);
  120. $this->itemMock->expects($this->once())->method('getQty')->willReturn(10);
  121. $this->itemMock->expects($this->once())
  122. ->method('getOrderItemId')
  123. ->willReturn(1);
  124. $this->itemMock->expects($this->once())
  125. ->method('getQty')
  126. ->willReturn(10);
  127. $this->shipmentFactoryMock->expects($this->once())
  128. ->method('create')
  129. ->with(
  130. $this->orderMock,
  131. $items
  132. )
  133. ->willReturn($this->shipmentMock);
  134. $this->shipmentMock->expects($this->once())
  135. ->method('addTrack')
  136. ->willReturnSelf();
  137. $this->hydratorPoolMock->expects($this->once())
  138. ->method('getHydrator')
  139. ->with(ShipmentTrackCreationInterface::class)
  140. ->willReturn($this->hydratorMock);
  141. $this->hydratorMock->expects($this->once())
  142. ->method('extract')
  143. ->with($this->trackMock)
  144. ->willReturn($trackData);
  145. $this->trackFactoryMock->expects($this->once())
  146. ->method('create')
  147. ->with(['data' => $trackData])
  148. ->willReturn($this->trackMock);
  149. if ($appendComment) {
  150. $comment = "New comment!";
  151. $visibleOnFront = true;
  152. $this->commentMock->expects($this->exactly(2))
  153. ->method('getComment')
  154. ->willReturn($comment);
  155. $this->commentMock->expects($this->once())
  156. ->method('getIsVisibleOnFront')
  157. ->willReturn($visibleOnFront);
  158. $this->shipmentMock->expects($this->once())
  159. ->method('addComment')
  160. ->with($comment, $appendComment, $visibleOnFront)
  161. ->willReturnSelf();
  162. $this->shipmentMock->expects($this->once())
  163. ->method('setCustomerNoteNotify')
  164. ->with(true);
  165. }
  166. $this->assertEquals(
  167. $this->shipmentDocumentFactory->create(
  168. $this->orderMock,
  169. [$this->itemMock],
  170. $tracks,
  171. $this->commentMock,
  172. $appendComment,
  173. $packages
  174. ),
  175. $this->shipmentMock
  176. );
  177. }
  178. }