ShipmentFactoryTest.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  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. /**
  8. * Unit test for shipment factory class.
  9. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  10. */
  11. class ShipmentFactoryTest extends \PHPUnit\Framework\TestCase
  12. {
  13. /**
  14. * Subject of testing.
  15. *
  16. * @var \Magento\Sales\Model\Order\ShipmentFactory
  17. */
  18. protected $subject;
  19. /**
  20. * Order converter mock.
  21. *
  22. * @var \Magento\Sales\Model\Convert\Order|\PHPUnit_Framework_MockObject_MockObject
  23. */
  24. protected $converter;
  25. /**
  26. * Shipment track factory mock.
  27. *
  28. * @var \Magento\Sales\Model\Order\Shipment\TrackFactory|\PHPUnit_Framework_MockObject_MockObject
  29. */
  30. protected $trackFactory;
  31. /**
  32. * @return void
  33. * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
  34. */
  35. protected function setUp()
  36. {
  37. $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
  38. $this->converter = $this->createPartialMock(
  39. \Magento\Sales\Model\Convert\Order::class,
  40. ['toShipment', 'itemToShipmentItem']
  41. );
  42. $convertOrderFactory = $this->createPartialMock(\Magento\Sales\Model\Convert\OrderFactory::class, ['create']);
  43. $convertOrderFactory->expects($this->once())
  44. ->method('create')
  45. ->willReturn($this->converter);
  46. $this->trackFactory = $this->createPartialMock(
  47. \Magento\Sales\Model\Order\Shipment\TrackFactory::class,
  48. ['create']
  49. );
  50. $this->subject = $objectManager->getObject(
  51. \Magento\Sales\Model\Order\ShipmentFactory::class,
  52. [
  53. 'convertOrderFactory' => $convertOrderFactory,
  54. 'trackFactory' => $this->trackFactory
  55. ]
  56. );
  57. }
  58. /**
  59. * @param array|null $tracks
  60. * @dataProvider createDataProvider
  61. * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
  62. */
  63. public function testCreate($tracks)
  64. {
  65. $orderItem = $this->createPartialMock(
  66. \Magento\Sales\Model\Order\Item::class,
  67. ['getId', 'getQtyOrdered', 'getParentItemId', 'getIsVirtual']
  68. );
  69. $orderItem->expects($this->any())
  70. ->method('getId')
  71. ->willReturn(1);
  72. $orderItem->expects($this->any())
  73. ->method('getQtyOrdered')
  74. ->willReturn(5);
  75. $orderItem->expects($this->any())->method('getParentItemId')->willReturn(false);
  76. $orderItem->expects($this->any())->method('getIsVirtual')->willReturn(false);
  77. $shipmentItem = $this->createPartialMock(
  78. \Magento\Sales\Model\Order\Shipment\Item::class,
  79. ['setQty', 'getOrderItem', 'getQty']
  80. );
  81. $shipmentItem->expects($this->once())
  82. ->method('setQty')
  83. ->with(5);
  84. $shipmentItem->expects($this->once())
  85. ->method('getQty')
  86. ->willReturn(5);
  87. $shipmentItem->expects($this->atLeastOnce())->method('getOrderItem')->willReturn($orderItem);
  88. $order = $this->createPartialMock(\Magento\Sales\Model\Order::class, ['getAllItems']);
  89. $order->expects($this->any())
  90. ->method('getAllItems')
  91. ->willReturn([$orderItem]);
  92. $shipment = $this->createPartialMock(
  93. \Magento\Sales\Model\Order\Shipment::class,
  94. ['addItem', 'setTotalQty', 'addTrack']
  95. );
  96. $shipment->expects($this->once())
  97. ->method('addItem')
  98. ->with($shipmentItem);
  99. $shipment->expects($this->once())
  100. ->method('setTotalQty')
  101. ->with(5)
  102. ->willReturn($shipment);
  103. $this->converter->expects($this->any())
  104. ->method('toShipment')
  105. ->with($order)
  106. ->willReturn($shipment);
  107. $this->converter->expects($this->any())
  108. ->method('itemToShipmentItem')
  109. ->with($orderItem)
  110. ->willReturn($shipmentItem);
  111. if ($tracks) {
  112. $shipmentTrack = $this->createPartialMock(\Magento\Sales\Model\Order\Shipment\Track::class, ['addData']);
  113. if (empty($tracks[0]['number'])) {
  114. $shipmentTrack->expects($this->never())
  115. ->method('addData');
  116. $this->trackFactory->expects($this->never())
  117. ->method('create');
  118. $shipment->expects($this->never())
  119. ->method('addTrack');
  120. $this->expectException(
  121. \Magento\Framework\Exception\LocalizedException::class
  122. );
  123. } else {
  124. $shipmentTrack->expects($this->once())
  125. ->method('addData')
  126. ->willReturnSelf();
  127. $this->trackFactory->expects($this->once())
  128. ->method('create')
  129. ->willReturn($shipmentTrack);
  130. $shipment->expects($this->once())
  131. ->method('addTrack')
  132. ->with($shipmentTrack);
  133. }
  134. }
  135. $this->assertEquals($shipment, $this->subject->create($order, ['1' => 5], $tracks));
  136. }
  137. /**
  138. * @return array
  139. */
  140. public function createDataProvider()
  141. {
  142. return [
  143. [null],
  144. [[['number' => 'TEST_TRACK']]],
  145. [[['number' => '']]],
  146. ];
  147. }
  148. }