Skip to content

Commit 208aed4

Browse files
author
Stanislav Idolov
authored
ENGCOM-1257: 788: Integration test rework. Introduced new extension point for New Shipment Controller. #14634
2 parents 11db4ca + 002251c commit 208aed4

File tree

13 files changed

+160
-123
lines changed

13 files changed

+160
-123
lines changed

app/code/Magento/Sales/Model/Order/ShipmentFactory.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@
55
*/
66
namespace Magento\Sales\Model\Order;
77

8-
use Magento\Framework\App\ObjectManager;
98
use Magento\Framework\Exception\LocalizedException;
10-
use Magento\Sales\Model\Order\Shipment\ShipmentValidatorInterface;
119
use Magento\Framework\Serialize\Serializer\Json;
1210

1311
/**
1412
* Factory class for @see \Magento\Sales\Api\Data\ShipmentInterface
13+
*
14+
* @api
1515
*/
1616
class ShipmentFactory
1717
{

app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/NewAction.php

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
namespace Magento\Shipping\Controller\Adminhtml\Order\Shipment;
88

99
use Magento\Backend\App\Action;
10+
use Magento\Framework\App\ObjectManager;
1011

1112
class NewAction extends \Magento\Backend\App\Action
1213
{
@@ -22,15 +23,24 @@ class NewAction extends \Magento\Backend\App\Action
2223
*/
2324
protected $shipmentLoader;
2425

26+
/**
27+
* @var \Magento\Shipping\Model\ShipmentProviderInterface
28+
*/
29+
private $shipmentProvider;
30+
2531
/**
2632
* @param Action\Context $context
2733
* @param \Magento\Shipping\Controller\Adminhtml\Order\ShipmentLoader $shipmentLoader
34+
* @param \Magento\Shipping\Model\ShipmentProviderInterface $shipmentProvider
2835
*/
2936
public function __construct(
3037
Action\Context $context,
31-
\Magento\Shipping\Controller\Adminhtml\Order\ShipmentLoader $shipmentLoader
38+
\Magento\Shipping\Controller\Adminhtml\Order\ShipmentLoader $shipmentLoader,
39+
\Magento\Shipping\Model\ShipmentProviderInterface $shipmentProvider = null
3240
) {
3341
$this->shipmentLoader = $shipmentLoader;
42+
$this->shipmentProvider = $shipmentProvider ?: ObjectManager::getInstance()
43+
->get(\Magento\Shipping\Model\ShipmentProviderInterface::class);
3444
parent::__construct($context);
3545
}
3646

@@ -43,7 +53,7 @@ public function execute()
4353
{
4454
$this->shipmentLoader->setOrderId($this->getRequest()->getParam('order_id'));
4555
$this->shipmentLoader->setShipmentId($this->getRequest()->getParam('shipment_id'));
46-
$this->shipmentLoader->setShipment($this->getRequest()->getParam('shipment'));
56+
$this->shipmentLoader->setShipment($this->shipmentProvider->getShipmentData());
4757
$this->shipmentLoader->setTracking($this->getRequest()->getParam('tracking'));
4858
$shipment = $this->shipmentLoader->load();
4959
if ($shipment) {
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\Shipping\Model;
9+
10+
use Magento\Framework\App\RequestInterface;
11+
12+
/**
13+
* @inheritdoc
14+
*/
15+
class ShipmentProvider implements ShipmentProviderInterface
16+
{
17+
/**
18+
* @var RequestInterface
19+
*/
20+
private $request;
21+
22+
/**
23+
* @param RequestInterface $request
24+
*/
25+
public function __construct(RequestInterface $request)
26+
{
27+
$this->request = $request;
28+
}
29+
30+
/**
31+
* @inheritdoc
32+
*/
33+
public function getShipmentData(): array
34+
{
35+
return $this->request->getParam('shipment', []);
36+
}
37+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\Shipping\Model;
9+
10+
/**
11+
* Provide shipment items data.
12+
*
13+
* @api
14+
*/
15+
interface ShipmentProviderInterface
16+
{
17+
/**
18+
* Retrieve shipment items.
19+
*
20+
* @return array
21+
*/
22+
public function getShipmentData(): array;
23+
}

app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/NewActionTest.php

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,11 @@ class NewActionTest extends \PHPUnit\Framework\TestCase
8686
*/
8787
protected $pageTitleMock;
8888

89+
/**
90+
* @var \Magento\Shipping\Model\ShipmentProviderInterface|\PHPUnit_Framework_MockObject_MockObject
91+
*/
92+
private $shipmentProviderMock;
93+
8994
/**
9095
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
9196
*/
@@ -128,6 +133,10 @@ protected function setUp()
128133
\Magento\Backend\Model\Session::class,
129134
['setIsUrlNotice', 'getCommentText']
130135
);
136+
$this->shipmentProviderMock = $this->getMockBuilder(\Magento\Shipping\Model\ShipmentProviderInterface::class)
137+
->disableOriginalConstructor()
138+
->setMethods(['getShipmentData'])
139+
->getMockForAbstractClass();
131140
$this->actionFlag = $this->createPartialMock(\Magento\Framework\App\ActionFlag::class, ['get']);
132141
$this->helper = $this->createPartialMock(\Magento\Backend\Helper\Data::class, ['getUrl']);
133142
$this->view = $this->createMock(\Magento\Framework\App\ViewInterface::class);
@@ -166,7 +175,7 @@ protected function setUp()
166175
\Magento\Shipping\Controller\Adminhtml\Order\Shipment\NewAction::class,
167176
[
168177
'context' => $this->context, 'shipmentLoader' => $this->shipmentLoader, 'request' => $this->request,
169-
'response' => $this->response, 'view' => $this->view
178+
'response' => $this->response, 'view' => $this->view, 'shipmentProvider' => $this->shipmentProviderMock
170179
]
171180
);
172181
}
@@ -188,7 +197,6 @@ public function testExecute()
188197
[
189198
['order_id', null, $orderId],
190199
['shipment_id', null, $shipmentId],
191-
['shipment', null, $shipmentData],
192200
['tracking', null, $tracking],
193201
]
194202
)
@@ -261,6 +269,9 @@ public function testExecute()
261269
->method('getBlock')
262270
->with('menu')
263271
->will($this->returnValue($menuBlock));
272+
$this->shipmentProviderMock->expects($this->once())
273+
->method('getShipmentData')
274+
->willReturn($shipmentData);
264275

265276
$this->assertNull($this->newAction->execute());
266277
}

app/code/Magento/Shipping/etc/adminhtml/di.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
-->
88
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
99
<preference for="Magento\Shipping\Model\Shipping" type="Magento\Shipping\Model\Shipping\Labels" />
10+
<preference for="Magento\Shipping\Model\ShipmentProviderInterface" type="Magento\Shipping\Model\ShipmentProvider" />
1011

1112
<type name="Magento\Shipping\Helper\Data">
1213
<arguments>

dev/tests/integration/testsuite/Magento/Sales/Model/Order/Email/Sender/ShipmentSenderTest.php

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
*/
66
namespace Magento\Sales\Model\Order\Email\Sender;
77

8+
use Magento\Sales\Model\Order\ShipmentFactory;
9+
use Magento\TestFramework\Helper\Bootstrap;
10+
811
/**
912
* @magentoAppArea frontend
1013
*/
@@ -15,20 +18,16 @@ class ShipmentSenderTest extends \PHPUnit\Framework\TestCase
1518
*/
1619
public function testSend()
1720
{
18-
\Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(\Magento\Framework\App\State::class)
19-
->setAreaCode('frontend');
20-
$order = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(\Magento\Sales\Model\Order::class);
21+
Bootstrap::getObjectManager()->get(\Magento\Framework\App\State::class)->setAreaCode('frontend');
22+
$order = Bootstrap::getObjectManager()->create(\Magento\Sales\Model\Order::class);
2123
$order->loadByIncrementId('100000001');
2224
$order->setCustomerEmail('customer@example.com');
2325

24-
$shipment = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
25-
\Magento\Sales\Model\Order\Shipment::class
26-
);
27-
$shipment->setOrder($order);
26+
$shipment = Bootstrap::getObjectManager()->get(ShipmentFactory::class)->create($order);
2827

2928
$this->assertEmpty($shipment->getEmailSent());
3029

31-
$orderSender = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
30+
$orderSender = Bootstrap::getObjectManager()
3231
->create(\Magento\Sales\Model\Order\Email\Sender\ShipmentSender::class);
3332
$result = $orderSender->send($shipment, true);
3433

@@ -44,19 +43,18 @@ public function testSend()
4443
*/
4544
public function testPackages()
4645
{
47-
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
46+
$objectManager = Bootstrap::getObjectManager();
4847
$objectManager->get(\Magento\Framework\App\State::class)->setAreaCode('frontend');
4948
$order = $objectManager->create(\Magento\Sales\Model\Order::class);
5049
$order->loadByIncrementId('100000001');
5150
$order->setCustomerEmail('customer@example.com');
52-
51+
$items = [];
52+
foreach ($order->getItems() as $item) {
53+
$items[$item->getId()] = $item->getQtyOrdered();
54+
}
5355
/** @var \Magento\Sales\Model\Order\Shipment $shipment */
54-
$shipment = $objectManager->create(\Magento\Sales\Model\Order\Shipment::class);
55-
$shipment->setOrder($order);
56-
56+
$shipment = $objectManager->get(ShipmentFactory::class)->create($order, $items);
5757
$packages = [['1'], ['2']];
58-
59-
$shipment->addItem($objectManager->create(\Magento\Sales\Model\Order\Shipment\Item::class));
6058
$shipment->setPackages($packages);
6159
$this->assertEquals($packages, $shipment->getPackages());
6260
$shipment->save();

dev/tests/integration/testsuite/Magento/Sales/Model/Order/ShipmentTest.php

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,15 @@ public function testPackages()
3434
);
3535
$payment->setBlockMock($paymentInfoBlock);
3636

37+
$items = [];
38+
foreach ($order->getItems() as $item) {
39+
$items[$item->getId()] = $item->getQtyOrdered();
40+
}
3741
/** @var \Magento\Sales\Model\Order\Shipment $shipment */
38-
$shipment = $objectManager->create(\Magento\Sales\Model\Order\Shipment::class);
39-
$shipment->setOrder($order);
42+
$shipment = $objectManager->get(ShipmentFactory::class)->create($order, $items);
4043

4144
$packages = [['1'], ['2']];
4245

43-
$shipment->addItem($objectManager->create(\Magento\Sales\Model\Order\Shipment\Item::class));
4446
$shipment->setPackages($packages);
4547
$this->assertEquals($packages, $shipment->getPackages());
4648
$shipment->save();
@@ -61,11 +63,12 @@ public function testAddTrack()
6163
$order = $objectManager->create(\Magento\Sales\Model\Order::class);
6264
$order->loadByIncrementId('100000001');
6365

66+
$items = [];
67+
foreach ($order->getItems() as $item) {
68+
$items[$item->getId()] = $item->getQtyOrdered();
69+
}
6470
/** @var \Magento\Sales\Model\Order\Shipment $shipment */
65-
$shipment = $objectManager->create(\Magento\Sales\Model\Order\Shipment::class);
66-
$shipment->setOrder($order);
67-
68-
$shipment->addItem($objectManager->create(\Magento\Sales\Model\Order\Shipment\Item::class));
71+
$shipment = $objectManager->get(ShipmentFactory::class)->create($order, $items);
6972
$shipment->save();
7073

7174
/** @var $track \Magento\Sales\Model\Order\Shipment\Track */

dev/tests/integration/testsuite/Magento/Sales/_files/shipment.php

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,22 @@
33
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6+
7+
use Magento\Sales\Model\Order\ShipmentFactory;
8+
use Magento\TestFramework\Helper\Bootstrap;
9+
610
require 'default_rollback.php';
711
require __DIR__ . '/../../../Magento/Sales/_files/order.php';
812

913
$payment = $order->getPayment();
10-
$paymentInfoBlock = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
11-
->get(\Magento\Payment\Helper\Data::class)
12-
->getInfoBlock($payment);
14+
$paymentInfoBlock = Bootstrap::getObjectManager()->get(\Magento\Payment\Helper\Data::class)->getInfoBlock($payment);
1315
$payment->setBlockMock($paymentInfoBlock);
1416

15-
/** @var \Magento\Sales\Model\Order\Shipment $shipment */
16-
$shipment = $objectManager->create(\Magento\Sales\Model\Order\Shipment::class);
17-
$shipment->setOrder($order);
18-
19-
$shipmentItem = $objectManager->create(\Magento\Sales\Model\Order\Shipment\Item::class);
20-
$shipmentItem->setOrderItem($orderItem);
21-
$shipment->addItem($shipmentItem);
17+
$items = [];
18+
foreach ($order->getItems() as $orderItem) {
19+
$items[$orderItem->getId()] = $orderItem->getQtyOrdered();
20+
}
21+
$shipment = Bootstrap::getObjectManager()->get(ShipmentFactory::class)->create($order, $items);
2222
$shipment->setPackages([['1'], ['2']]);
2323
$shipment->setShipmentStatus(\Magento\Sales\Model\Order\Shipment::STATUS_NEW);
2424

dev/tests/integration/testsuite/Magento/Sales/_files/shipment_comments_for_search.php

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,8 @@
77
use Magento\Payment\Helper\Data;
88
use Magento\Sales\Api\ShipmentCommentRepositoryInterface;
99
use Magento\Sales\Model\Order;
10-
use Magento\Sales\Model\Order\Shipment;
1110
use Magento\Sales\Model\Order\Shipment\Comment;
12-
use Magento\Sales\Model\Order\Shipment\Item;
11+
use Magento\Sales\Model\Order\ShipmentFactory;
1312
use Magento\TestFramework\Helper\Bootstrap;
1413

1514
require 'default_rollback.php';
@@ -21,14 +20,12 @@
2120
->getInfoBlock($payment);
2221
$payment->setBlockMock($paymentInfoBlock);
2322

24-
/** @var Shipment $shipment */
25-
$shipment = Bootstrap::getObjectManager()->create(Shipment::class);
26-
$shipment->setOrder($order);
23+
$items = [];
24+
foreach ($order->getItems() as $orderItem) {
25+
$items[$orderItem->getId()] = $orderItem->getQtyOrdered();
26+
}
27+
$shipment = Bootstrap::getObjectManager()->get(ShipmentFactory::class)->create($order, $items);
2728

28-
/** @var Item $shipmentItem */
29-
$shipmentItem = Bootstrap::getObjectManager()->create(Item::class);
30-
$shipmentItem->setOrderItem($orderItem);
31-
$shipment->addItem($shipmentItem);
3229
$shipment->setPackages([['1'], ['2']]);
3330
$shipment->setShipmentStatus(\Magento\Sales\Model\Order\Shipment::STATUS_NEW);
3431
$shipment->save();

0 commit comments

Comments
 (0)