Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
ShipmentFactoryTest.php
Go to the documentation of this file.
1 <?php
7 
12 class ShipmentFactoryTest extends \PHPUnit\Framework\TestCase
13 {
19  protected $subject;
20 
26  protected $converter;
27 
33  protected $trackFactory;
34 
39  protected function setUp()
40  {
41  $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
42 
43  $this->converter = $this->createPartialMock(
44  \Magento\Sales\Model\Convert\Order::class,
45  ['toShipment', 'itemToShipmentItem']
46  );
47 
48  $convertOrderFactory = $this->createPartialMock(\Magento\Sales\Model\Convert\OrderFactory::class, ['create']);
49  $convertOrderFactory->expects($this->once())
50  ->method('create')
51  ->willReturn($this->converter);
52 
53  $this->trackFactory = $this->createPartialMock(
54  \Magento\Sales\Model\Order\Shipment\TrackFactory::class,
55  ['create']
56  );
57 
58  $this->subject = $objectManager->getObject(
59  \Magento\Sales\Model\Order\ShipmentFactory::class,
60  [
61  'convertOrderFactory' => $convertOrderFactory,
62  'trackFactory' => $this->trackFactory
63  ]
64  );
65  }
66 
72  public function testCreate($tracks)
73  {
74  $orderItem = $this->createPartialMock(
75  \Magento\Sales\Model\Order\Item::class,
76  ['getId', 'getQtyOrdered', 'getParentItemId', 'getIsVirtual']
77  );
78  $orderItem->expects($this->any())
79  ->method('getId')
80  ->willReturn(1);
81  $orderItem->expects($this->any())
82  ->method('getQtyOrdered')
83  ->willReturn(5);
84  $orderItem->expects($this->any())->method('getParentItemId')->willReturn(false);
85  $orderItem->expects($this->any())->method('getIsVirtual')->willReturn(false);
86 
87  $shipmentItem = $this->createPartialMock(
88  \Magento\Sales\Model\Order\Shipment\Item::class,
89  ['setQty', 'getOrderItem', 'getQty']
90  );
91  $shipmentItem->expects($this->once())
92  ->method('setQty')
93  ->with(5);
94  $shipmentItem->expects($this->once())
95  ->method('getQty')
96  ->willReturn(5);
97 
98  $shipmentItem->expects($this->atLeastOnce())->method('getOrderItem')->willReturn($orderItem);
99 
100  $order = $this->createPartialMock(\Magento\Sales\Model\Order::class, ['getAllItems']);
101  $order->expects($this->any())
102  ->method('getAllItems')
103  ->willReturn([$orderItem]);
104 
105  $shipment = $this->createPartialMock(
106  \Magento\Sales\Model\Order\Shipment::class,
107  ['addItem', 'setTotalQty', 'addTrack']
108  );
109  $shipment->expects($this->once())
110  ->method('addItem')
111  ->with($shipmentItem);
112  $shipment->expects($this->once())
113  ->method('setTotalQty')
114  ->with(5)
115  ->willReturn($shipment);
116 
117  $this->converter->expects($this->any())
118  ->method('toShipment')
119  ->with($order)
120  ->willReturn($shipment);
121  $this->converter->expects($this->any())
122  ->method('itemToShipmentItem')
123  ->with($orderItem)
124  ->willReturn($shipmentItem);
125 
126  if ($tracks) {
127  $shipmentTrack = $this->createPartialMock(\Magento\Sales\Model\Order\Shipment\Track::class, ['addData']);
128 
129  if (empty($tracks[0]['number'])) {
130  $shipmentTrack->expects($this->never())
131  ->method('addData');
132 
133  $this->trackFactory->expects($this->never())
134  ->method('create');
135 
136  $shipment->expects($this->never())
137  ->method('addTrack');
138 
139  $this->expectException(
140  \Magento\Framework\Exception\LocalizedException::class
141  );
142  } else {
143  $shipmentTrack->expects($this->once())
144  ->method('addData')
145  ->willReturnSelf();
146 
147  $this->trackFactory->expects($this->once())
148  ->method('create')
149  ->willReturn($shipmentTrack);
150 
151  $shipment->expects($this->once())
152  ->method('addTrack')
153  ->with($shipmentTrack);
154  }
155  }
156 
157  $this->assertEquals($shipment, $this->subject->create($order, ['1' => 5], $tracks));
158  }
159 
163  public function createDataProvider()
164  {
165  return [
166  [null],
167  [[['number' => 'TEST_TRACK']]],
168  [[['number' => '']]],
169  ];
170  }
171 }
$objectManager
Definition: bootstrap.php:17
$orderItem
Definition: order.php:30
$order
Definition: order.php:55
$shipmentItem
foreach($order->getItems() as $orderItem) $shipment