Skip to content

Commit 14f85e9

Browse files
⏫ Forwardport of #12732 to 2.3-develop branch
Applied pull request patch https://github.com/magento/magento2/pull/12732.patch (created by @ihor-sviziev) based on commit(s): 1. ecf27be 2. 5e4bf42 Fixed GitHub Issues in 2.3-develop branch: - #12206: Tracking link returns 404 page in admin panel (reported by @catstantin)
1 parent 8e77e2f commit 14f85e9

File tree

3 files changed

+85
-18
lines changed

3 files changed

+85
-18
lines changed

app/code/Magento/Shipping/Helper/Data.php

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@
99
*/
1010
namespace Magento\Shipping\Helper;
1111

12+
use Magento\Framework\App\ObjectManager;
13+
use Magento\Framework\UrlInterface;
14+
use Magento\Store\Model\StoreManagerInterface;
15+
1216
class Data extends \Magento\Framework\App\Helper\AbstractHelper
1317
{
1418
/**
@@ -19,19 +23,28 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
1923
protected $_allowedHashKeys = ['ship_id', 'order_id', 'track_id'];
2024

2125
/**
22-
* @var \Magento\Store\Model\StoreManagerInterface
26+
* @var StoreManagerInterface
2327
*/
2428
protected $_storeManager;
2529

30+
/**
31+
* @var UrlInterface|null
32+
*/
33+
private $url;
34+
2635
/**
2736
* @param \Magento\Framework\App\Helper\Context $context
28-
* @param \Magento\Store\Model\StoreManagerInterface $storeManager
37+
* @param StoreManagerInterface $storeManager
38+
* @param UrlInterface|null $url
2939
*/
3040
public function __construct(
3141
\Magento\Framework\App\Helper\Context $context,
32-
\Magento\Store\Model\StoreManagerInterface $storeManager
42+
StoreManagerInterface $storeManager,
43+
UrlInterface $url = null
3344
) {
3445
$this->_storeManager = $storeManager;
46+
$this->url = $url ?: ObjectManager::getInstance()->get(UrlInterface::class);
47+
3548
parent::__construct($context);
3649
}
3750

@@ -63,12 +76,13 @@ protected function _getTrackingUrl($key, $model, $method = 'getId')
6376
{
6477
$urlPart = "{$key}:{$model->{$method}()}:{$model->getProtectCode()}";
6578
$params = [
79+
'_scope' => $model->getStoreId(),
80+
'_nosid' => true,
6681
'_direct' => 'shipping/tracking/popup',
6782
'_query' => ['hash' => $this->urlEncoder->encode($urlPart)]
6883
];
6984

70-
$storeModel = $this->_storeManager->getStore($model->getStoreId());
71-
return $storeModel->getUrl('', $params);
85+
return $this->url->getUrl('', $params);
7286
}
7387

7488
/**

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,11 @@
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+
11+
<type name="Magento\Shipping\Helper\Data">
12+
<arguments>
13+
<!-- Use frontend URL model-->
14+
<argument name="url" xsi:type="object">Magento\Framework\Url</argument>
15+
</arguments>
16+
</type>
1017
</config>

dev/tests/integration/testsuite/Magento/Shipping/Helper/DataTest.php

Lines changed: 59 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,18 @@
55
*/
66
namespace Magento\Shipping\Helper;
77

8+
use Magento\Store\Model\StoreManagerInterface;
9+
810
class DataTest extends \PHPUnit\Framework\TestCase
911
{
1012
/**
1113
* @var \Magento\Shipping\Helper\Data
1214
*/
13-
protected $_helper = null;
15+
private $helper;
1416

1517
protected function setUp()
1618
{
17-
$this->_helper = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
19+
$this->helper = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
1820
\Magento\Shipping\Helper\Data::class
1921
);
2022
}
@@ -31,33 +33,77 @@ public function testGetTrackingPopupUrlBySalesModel($modelName, $getIdMethod, $e
3133
{
3234
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
3335
$constructArgs = [];
34-
if (\Magento\Sales\Model\Order\Shipment::class == $modelName) {
35-
$orderRepository = $this->_getMockOrderRepository($code);
36+
if (\Magento\Sales\Model\Order\Shipment::class === $modelName) {
37+
$orderRepository = $this->getMockOrderRepository($code);
38+
$constructArgs['orderRepository'] = $orderRepository;
39+
} elseif (\Magento\Sales\Model\Order\Shipment\Track::class === $modelName) {
40+
$shipmentRepository = $this->getMockShipmentRepository($code);
41+
$constructArgs['shipmentRepository'] = $shipmentRepository;
42+
}
43+
44+
$model = $objectManager->create($modelName, $constructArgs);
45+
$model->{$getIdMethod}($entityId);
46+
47+
if (\Magento\Sales\Model\Order::class === $modelName) {
48+
$model->setProtectCode($code);
49+
}
50+
if (\Magento\Sales\Model\Order\Shipment\Track::class === $modelName) {
51+
$model->setParentId(1);
52+
}
53+
54+
$actual = $this->helper->getTrackingPopupUrlBySalesModel($model);
55+
$this->assertEquals($expected, $actual);
56+
}
57+
58+
/**
59+
* From the admin panel with custom URL we should have generated frontend URL
60+
*
61+
* @param string $modelName
62+
* @param string $getIdMethod
63+
* @param int $entityId
64+
* @param string $code
65+
* @param string $expected
66+
* @magentoAppArea adminhtml
67+
* @magentoConfigFixture admin_store web/unsecure/base_link_url http://admin.localhost/
68+
* @dataProvider getTrackingPopupUrlBySalesModelDataProvider
69+
*/
70+
public function testGetTrackingPopupUrlBySalesModelFromAdmin($modelName, $getIdMethod, $entityId, $code, $expected)
71+
{
72+
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
73+
74+
/** @var StoreManagerInterface $storeManager */
75+
$storeManager = $objectManager->create(StoreManagerInterface::class);
76+
$storeManager->reinitStores();
77+
78+
$constructArgs = [];
79+
if (\Magento\Sales\Model\Order\Shipment::class === $modelName) {
80+
$orderRepository = $this->getMockOrderRepository($code);
3681
$constructArgs['orderRepository'] = $orderRepository;
37-
} elseif (\Magento\Sales\Model\Order\Shipment\Track::class == $modelName) {
38-
$shipmentRepository = $this->_getMockShipmentRepository($code);
82+
} elseif (\Magento\Sales\Model\Order\Shipment\Track::class === $modelName) {
83+
$shipmentRepository = $this->getMockShipmentRepository($code);
3984
$constructArgs['shipmentRepository'] = $shipmentRepository;
4085
}
4186

4287
$model = $objectManager->create($modelName, $constructArgs);
4388
$model->{$getIdMethod}($entityId);
4489

45-
if (\Magento\Sales\Model\Order::class == $modelName) {
90+
if (\Magento\Sales\Model\Order::class === $modelName) {
4691
$model->setProtectCode($code);
4792
}
48-
if (\Magento\Sales\Model\Order\Shipment\Track::class == $modelName) {
93+
if (\Magento\Sales\Model\Order\Shipment\Track::class === $modelName) {
4994
$model->setParentId(1);
5095
}
5196

52-
$actual = $this->_helper->getTrackingPopupUrlBySalesModel($model);
97+
//Frontend URL should be used there
98+
$actual = $this->helper->getTrackingPopupUrlBySalesModel($model);
5399
$this->assertEquals($expected, $actual);
54100
}
55101

56102
/**
57103
* @param $code
58-
* @return \Magento\Sales\Api\OrderRepositoryInterface
104+
* @return \Magento\Sales\Api\OrderRepositoryInterface|\PHPUnit_Framework_MockObject_MockObject
59105
*/
60-
protected function _getMockOrderRepository($code)
106+
private function getMockOrderRepository($code)
61107
{
62108
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
63109
$order = $objectManager->create(\Magento\Sales\Model\Order::class);
@@ -71,10 +117,10 @@ protected function _getMockOrderRepository($code)
71117
* @param $code
72118
* @return \Magento\Sales\Model\Order\ShipmentRepository|\PHPUnit_Framework_MockObject_MockObject
73119
*/
74-
protected function _getMockShipmentRepository($code)
120+
private function getMockShipmentRepository($code)
75121
{
76122
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
77-
$orderRepository = $this->_getMockOrderRepository($code);
123+
$orderRepository = $this->getMockOrderRepository($code);
78124
$shipmentArgs = ['orderRepository' => $orderRepository];
79125

80126
$shipment = $objectManager->create(\Magento\Sales\Model\Order\Shipment::class, $shipmentArgs);

0 commit comments

Comments
 (0)