Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
ShipmentLoaderTest.php
Go to the documentation of this file.
1 <?php
7 
10 use Magento\Sales\Api\Data\ShipmentTrackCreationInterfaceFactory;
11 use Magento\Sales\Api\Data\ShipmentItemCreationInterfaceFactory;
15 
19 class ShipmentLoaderTest extends \PHPUnit\Framework\TestCase
20 {
24  private $objectManagerMock;
25 
29  private $registryMock;
30 
34  private $messageManagerMock;
35 
39  private $shipmentRepositoryMock;
40 
44  private $documentFactoryMock;
45 
49  private $trackFactoryMock;
50 
54  private $itemFactoryMock;
55 
59  private $orderRepositoryMock;
60 
64  private $loader;
65 
66  protected function setUp()
67  {
68  $this->objectManagerMock = new ObjectManager($this);
69  $this->shipmentRepositoryMock = $this->getMockBuilder(\Magento\Sales\Model\Order\ShipmentRepository::class)
70  ->disableOriginalConstructor()
71  ->setMethods(['get'])
72  ->getMock();
73  $this->registryMock = $this->getMockBuilder(\Magento\Framework\Registry::class)
74  ->disableOriginalConstructor()
75  ->setMethods([])
76  ->getMock();
77  $this->trackFactoryMock = $this->getMockBuilder(ShipmentTrackCreationInterfaceFactory::class)
78  ->disableOriginalConstructor()
79  ->setMethods(['create'])
80  ->getMock();
81  $this->messageManagerMock = $this->getMockBuilder(\Magento\Framework\Message\Manager::class)
82  ->disableOriginalConstructor()
83  ->setMethods([])
84  ->getMock();
85  $this->orderRepositoryMock = $this->getMockBuilder(\Magento\Sales\Api\OrderRepositoryInterface::class)
86  ->disableOriginalConstructor()
87  ->setMethods([])
88  ->getMock();
89  $this->itemFactoryMock = $this->getMockBuilder(ShipmentItemCreationInterfaceFactory::class)
90  ->disableOriginalConstructor()
91  ->setMethods(['create'])
92  ->getMock();
93  $this->documentFactoryMock = $this->getMockBuilder(ShipmentDocumentFactory::class)
94  ->disableOriginalConstructor()
95  ->setMethods([])
96  ->getMock();
97 
98  $data = [
99  'order_id' => 100032,
100  'shipment_id' => 1000065,
101  'shipment' => ['items' => [1 => 1, 2 => 2]],
102  'tracking' => [
103  ['number' => 'jds0395', 'title' => 'DHL', 'carrier_code' => 'dhl'],
104  ['number' => 'lsk984g', 'title' => 'UPS', 'carrier_code' => 'ups'],
105  ],
106  ];
107 
108  $this->loader = $this->objectManagerMock->getObject(
109  ShipmentLoader::class,
110  [
111  'messageManager' => $this->messageManagerMock,
112  'registry' => $this->registryMock,
113  'shipmentRepository' => $this->shipmentRepositoryMock,
114  'orderRepository' => $this->orderRepositoryMock,
115  'documentFactory' => $this->documentFactoryMock,
116  'trackFactory' => $this->trackFactoryMock,
117  'itemFactory' => $this->itemFactoryMock,
118  'data' => $data
119  ]
120  );
121  }
122 
123  public function testLoadShipmentId()
124  {
125  $shipmentModelMock = $this->getMockBuilder(\Magento\Sales\Model\Order\Shipment::class)
126  ->disableOriginalConstructor()
127  ->setMethods([])
128  ->getMock();
129  $this->shipmentRepositoryMock->expects($this->once())
130  ->method('get')
131  ->with($this->loader->getShipmentId())
132  ->willReturn($shipmentModelMock);
133  $this->registryMock->expects($this->once())
134  ->method('register')
135  ->with('current_shipment', $shipmentModelMock);
136  $this->assertEquals($shipmentModelMock, $this->loader->load());
137  }
138 
139  public function testLoadOrderId()
140  {
141  $this->loader->unsetData('shipment_id');
142  $orderMock = $this->getMockBuilder(\Magento\Sales\Model\Order::class)
143  ->disableOriginalConstructor()
144  ->setMethods(['getForcedShipmentWithInvoice', 'getId', 'canShip'])
145  ->getMock();
146  $this->orderRepositoryMock->expects($this->once())
147  ->method('get')
148  ->will($this->returnValue($orderMock));
149  $orderMock->expects($this->once())
150  ->method('getId')
151  ->will($this->returnValue($this->loader->getOrderId()));
152  $orderMock->expects($this->any())
153  ->method('getForcedShipmentWithInvoice')
154  ->will($this->returnValue(false));
155  $orderMock->expects($this->once())
156  ->method('canShip')
157  ->will($this->returnValue(true));
158  $shipmentModelMock = $this->getMockBuilder(\Magento\Sales\Model\Order\Shipment::class)
159  ->disableOriginalConstructor()
160  ->setMethods([])
161  ->getMock();
162  $trackMock = $this->getMockBuilder(ShipmentTrackCreationInterface::class)
163  ->disableOriginalConstructor()
164  ->setMethods(['setCarrierCode', 'setTrackNumber', 'setTitle'])
165  ->getMockForAbstractClass();
166  $this->trackFactoryMock->expects($this->any())
167  ->method('create')
168  ->will($this->returnValue($trackMock));
169  $shipmentModelMock->expects($this->any())
170  ->method('addTrack')
171  ->with($this->equalTo($trackMock))
172  ->will($this->returnSelf());
173  $this->registryMock->expects($this->once())
174  ->method('register')
175  ->with('current_shipment', $shipmentModelMock);
176  $itemMock = $this->getMockBuilder(ShipmentItemCreationInterface::class)
177  ->disableOriginalConstructor()
178  ->getMockForAbstractClass();
179  $this->itemFactoryMock->expects($this->any())
180  ->method('create')
181  ->will($this->returnValue($itemMock));
182  $this->documentFactoryMock->expects($this->once())->method('create')->willReturn($shipmentModelMock);
183 
184  $this->assertEquals($shipmentModelMock, $this->loader->load());
185  }
186 }