Skip to content

Commit b02fb34

Browse files
ENGCOM-6060: [Shipping] Adding the tracking number client validation #24818
2 parents 4321600 + d09b0fb commit b02fb34

File tree

8 files changed

+218
-62
lines changed

8 files changed

+218
-62
lines changed

app/code/Magento/Shipping/Block/Adminhtml/Order/Tracking/View.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public function __construct(
4343
*/
4444
protected function _prepareLayout()
4545
{
46-
$onclick = "submitAndReloadArea($('shipment_tracking_info').parentNode, '" . $this->getSubmitUrl() . "')";
46+
$onclick = "saveTrackingInfo($('shipment_tracking_info').parentNode, '" . $this->getSubmitUrl() . "')";
4747
$this->addChild(
4848
'save_button',
4949
\Magento\Backend\Block\Widget\Button::class,
@@ -86,7 +86,10 @@ public function getRemoveUrl($track)
8686
}
8787

8888
/**
89+
* Get carrier title
90+
*
8991
* @param string $code
92+
*
9093
* @return \Magento\Framework\Phrase|string|bool
9194
*/
9295
public function getCarrierTitle($code)
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
9+
<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd">
11+
<actionGroup name="AdminAddTrackingNumberToShipmentActionGroup">
12+
<arguments>
13+
<argument name="trackingTitle" type="string" defaultValue=""/>
14+
<argument name="trackingNumber" type="string"/>
15+
</arguments>
16+
17+
<fillField selector="{{AdminShipmentTrackingSection.trackingTitle}}" userInput="{{trackingTitle}}" stepKey="fillTrackingTitle"/>
18+
<fillField selector="{{AdminShipmentTrackingSection.trackingNumber}}" userInput="{{trackingNumber}}" stepKey="fillTrackingNumber"/>
19+
<click selector="{{AdminShipmentTrackingSection.addTrackingNumber}}" stepKey="clickAddTrackingNumber"/>
20+
<waitForPageLoad stepKey="waitForTrackingInformation"/>
21+
</actionGroup>
22+
</actionGroups>
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
9+
<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd">
11+
<actionGroup name="AdminAssertExistingTrackingNumberActionGroup">
12+
<arguments>
13+
<argument name="trackingNumber" type="string"/>
14+
</arguments>
15+
16+
<see selector="#shipment_tracking_info .col-number" userInput="{{trackingNumber}}" stepKey="seeAvailableTrackingNumber"/>
17+
</actionGroup>
18+
</actionGroups>
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
9+
<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd">
11+
<actionGroup name="AdminAssertTrackingValidationErrorActionGroup">
12+
<arguments>
13+
<argument name="inputName" type="string"/>
14+
<argument name="errorMessage" type="string" defaultValue="This is a required field."/>
15+
</arguments>
16+
17+
<see selector="{{AdminShipmentTrackingSection.trackingInfoErrorElement(inputName)}}" userInput="{{errorMessage}}" stepKey="seeTrackingInfoValidationError"/>
18+
</actionGroup>
19+
</actionGroups>
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
9+
<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd">
11+
<actionGroup name="AdminSelectFirstGridRowActionGroup">
12+
<click selector="{{AdminDataGridTableSection.firstRow}}" stepKey="clickFirstRowInGrid"/>
13+
<waitForPageLoad stepKey="waitToProcessPageToLoad"/>
14+
</actionGroup>
15+
</actionGroups>
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
9+
<sections xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Page/etc/SectionObject.xsd">
11+
<section name="AdminShipmentTrackingSection">
12+
<element name="trackingNumber" type="text" selector="#tracking-shipping-form #tracking_number"/>
13+
<element name="trackingTitle" type="text" selector="#tracking-shipping-form #tracking_title"/>
14+
<element name="addTrackingNumber" type="button" selector="#tracking-shipping-form button.save"/>
15+
<element name="trackingInfoErrorElement" type="text" selector="#tracking-shipping-form #{{inputName}}-error" parameterized="true" />
16+
</section>
17+
</sections>
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
9+
<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/testSchema.xsd">
11+
<test name="AdminValidateShippingTrackingNumberTest">
12+
<annotations>
13+
<stories value="Admin validate the shipping tracking number for an order"/>
14+
<title value="Admin validate the shipping tracking number for an order"/>
15+
<description value="Testing for a required tracking number when adding new shipping information"/>
16+
<severity value="CRITICAL"/>
17+
<group value="shipping"/>
18+
</annotations>
19+
<before>
20+
<createData entity="Simple_US_Customer" stepKey="createCustomer"/>
21+
<createData entity="SimpleProduct2" stepKey="createSimpleProduct"/>
22+
<actionGroup ref="LoginAsAdmin" stepKey="LoginAsAdmin"/>
23+
</before>
24+
<after>
25+
<deleteData createDataKey="createCustomer" stepKey="deleteCustomer"/>
26+
<deleteData createDataKey="createSimpleProduct" stepKey="deleteSimpleProduct"/>
27+
<actionGroup ref="logout" stepKey="logout"/>
28+
</after>
29+
<actionGroup ref="CreateOrderActionGroup" stepKey="goToCreateOrderPage">
30+
<argument name="customer" value="$$createCustomer$$"/>
31+
<argument name="product" value="$$createSimpleProduct$$"/>
32+
</actionGroup>
33+
<grabTextFrom selector="|Order # (\d+)|" stepKey="orderId"/>
34+
<actionGroup ref="AdminShipThePendingOrderActionGroup" stepKey="createShipmentForOrder"/>
35+
<actionGroup ref="FilterShipmentGridByOrderIdActionGroup" stepKey="filterForNewlyCreatedShipment">
36+
<argument name="orderId" value="$orderId"/>
37+
</actionGroup>
38+
<actionGroup ref="AdminSelectFirstGridRowActionGroup" stepKey="selectShipmentFromGrid"/>
39+
<actionGroup ref="AdminAddTrackingNumberToShipmentActionGroup" stepKey="addTrackingInformation">
40+
<argument name="trackingNumber" value=""/>
41+
</actionGroup>
42+
<actionGroup ref="AdminAssertTrackingValidationErrorActionGroup" stepKey="assertValidateTrackingNumber">
43+
<argument name="inputName" value="tracking_number"/>
44+
</actionGroup>
45+
<actionGroup ref="AdminAddTrackingNumberToShipmentActionGroup" stepKey="addTrackingNumber">
46+
<argument name="trackingNumber" value="123123"/>
47+
</actionGroup>
48+
<actionGroup ref="AdminAssertExistingTrackingNumberActionGroup" stepKey="checkAddedTrackingNumber">
49+
<argument name="trackingNumber" value="123123"/>
50+
</actionGroup>
51+
</test>
52+
</tests>

app/code/Magento/Shipping/view/adminhtml/templates/order/tracking/view.phtml

Lines changed: 71 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -9,76 +9,85 @@
99
?>
1010
<?php /** @var $block Magento\Shipping\Block\Adminhtml\Order\Tracking\View */ ?>
1111
<div class="admin__control-table-wrapper">
12-
<table class="data-table admin__control-table" id="shipment_tracking_info">
13-
<thead>
14-
<tr class="headings">
15-
<th class="col-carrier"><?= $block->escapeHtml(__('Carrier')) ?></th>
16-
<th class="col-title"><?= $block->escapeHtml(__('Title')) ?></th>
17-
<th class="col-number"><?= $block->escapeHtml(__('Number')) ?></th>
18-
<th class="col-delete last"><?= $block->escapeHtml(__('Action')) ?></th>
19-
</tr>
20-
</thead>
21-
<tfoot>
22-
<tr>
23-
<td class="col-carrier">
24-
<select name="carrier"
25-
class="select admin__control-select"
26-
onchange="selectCarrier(this)">
27-
<?php foreach ($block->getCarriers() as $_code => $_name) : ?>
28-
<option value="<?= $block->escapeHtmlAttr($_code) ?>"><?= $block->escapeHtml($_name) ?></option>
29-
<?php endforeach; ?>
30-
</select>
31-
</td>
32-
<td class="col-title">
33-
<input class="input-text admin__control-text"
34-
type="text"
35-
id="tracking_title"
36-
name="title"
37-
value="" />
38-
</td>
39-
<td class="col-number">
40-
<input class="input-text admin__control-text"
41-
type="text"
42-
id="tracking_number"
43-
name="number"
44-
value="" />
45-
</td>
46-
<td class="col-delete last"><?= $block->getSaveButtonHtml() ?></td>
47-
</tr>
48-
</tfoot>
49-
<?php if ($_tracks = $block->getShipment()->getAllTracks()) : ?>
50-
<tbody>
51-
<?php $i = 0; foreach ($_tracks as $_track) :$i++ ?>
52-
<tr class="<?= /* @noEscape */ ($i%2 == 0) ? 'even' : 'odd' ?>">
53-
<td class="col-carrier">
54-
<?= $block->escapeHtml($block->getCarrierTitle($_track->getCarrierCode())) ?>
55-
</td>
56-
<td class="col-title"><?= $block->escapeHtml($_track->getTitle()) ?></td>
57-
<td class="col-number">
58-
<?php if ($_track->isCustom()) : ?>
59-
<?= $block->escapeHtml($_track->getNumber()) ?>
60-
<?php else : ?>
61-
<a href="#" onclick="popWin('<?= $block->escapeJs($block->escapeUrl($this->helper(Magento\Shipping\Helper\Data::class)->getTrackingPopupUrlBySalesModel($_track))) ?>','trackorder','width=800,height=600,resizable=yes,scrollbars=yes')"><?= $block->escapeHtml($_track->getNumber()) ?></a>
62-
<div id="shipment_tracking_info_response_<?= (int) $_track->getId() ?>"></div>
63-
<?php endif; ?>
64-
</td>
65-
<td class="col-delete last"><button class="action-delete" type="button" onclick="deleteTrackingNumber('<?= $block->escapeJs($block->escapeUrl($block->getRemoveUrl($_track))) ?>'); return false;"><span><?= $block->escapeHtml(__('Delete')) ?></span></button></td>
66-
</tr>
67-
<?php endforeach; ?>
68-
</tbody>
69-
<?php endif; ?>
70-
</table>
12+
<form id="tracking-shipping-form" data-mage-init='{"validation": {}}'>
13+
<table class="data-table admin__control-table" id="shipment_tracking_info">
14+
<thead>
15+
<tr class="headings">
16+
<th class="col-carrier"><?= $block->escapeHtml(__('Carrier')) ?></th>
17+
<th class="col-title"><?= $block->escapeHtml(__('Title')) ?></th>
18+
<th class="col-number"><?= $block->escapeHtml(__('Number')) ?></th>
19+
<th class="col-delete last"><?= $block->escapeHtml(__('Action')) ?></th>
20+
</tr>
21+
</thead>
22+
<tfoot>
23+
<tr>
24+
<td class="col-carrier">
25+
<select name="carrier"
26+
class="select admin__control-select"
27+
onchange="selectCarrier(this)">
28+
<?php foreach ($block->getCarriers() as $_code => $_name) : ?>
29+
<option value="<?= $block->escapeHtmlAttr($_code) ?>"><?= $block->escapeHtml($_name) ?></option>
30+
<?php endforeach; ?>
31+
</select>
32+
</td>
33+
<td class="col-title">
34+
<input class="input-text admin__control-text"
35+
type="text"
36+
id="tracking_title"
37+
name="title"
38+
value="" />
39+
</td>
40+
<td class="col-number">
41+
<input class="input-text admin__control-text required-entry"
42+
type="text"
43+
id="tracking_number"
44+
name="number"
45+
value="" />
46+
</td>
47+
<td class="col-delete last"><?= $block->getSaveButtonHtml() ?></td>
48+
</tr>
49+
</tfoot>
50+
<?php if ($_tracks = $block->getShipment()->getAllTracks()) : ?>
51+
<tbody>
52+
<?php $i = 0; foreach ($_tracks as $_track) :$i++ ?>
53+
<tr class="<?= /* @noEscape */ ($i%2 == 0) ? 'even' : 'odd' ?>">
54+
<td class="col-carrier">
55+
<?= $block->escapeHtml($block->getCarrierTitle($_track->getCarrierCode())) ?>
56+
</td>
57+
<td class="col-title"><?= $block->escapeHtml($_track->getTitle()) ?></td>
58+
<td class="col-number">
59+
<?php if ($_track->isCustom()) : ?>
60+
<?= $block->escapeHtml($_track->getNumber()) ?>
61+
<?php else : ?>
62+
<a href="#" onclick="popWin('<?= $block->escapeJs($block->escapeUrl($this->helper(Magento\Shipping\Helper\Data::class)->getTrackingPopupUrlBySalesModel($_track))) ?>','trackorder','width=800,height=600,resizable=yes,scrollbars=yes')"><?= $block->escapeHtml($_track->getNumber()) ?></a>
63+
<div id="shipment_tracking_info_response_<?= (int) $_track->getId() ?>"></div>
64+
<?php endif; ?>
65+
</td>
66+
<td class="col-delete last"><button class="action-delete" type="button" onclick="deleteTrackingNumber('<?= $block->escapeJs($block->escapeUrl($block->getRemoveUrl($_track))) ?>'); return false;"><span><?= $block->escapeHtml(__('Delete')) ?></span></button></td>
67+
</tr>
68+
<?php endforeach; ?>
69+
</tbody>
70+
<?php endif; ?>
71+
</table>
72+
</form>
7173
</div>
7274

7375
<script>
74-
require(['prototype'], function(){
75-
76+
require(['prototype', 'jquery'], function(prototype, $j) {
7677
//<![CDATA[
7778
function selectCarrier(elem) {
7879
var option = elem.options[elem.selectedIndex];
7980
$('tracking_title').value = option.value && option.value != 'custom' ? option.text : '';
8081
}
8182

83+
function saveTrackingInfo(node, url) {
84+
var form = $j('#tracking-shipping-form');
85+
86+
if (form.validation() && form.validation('isValid')) {
87+
submitAndReloadArea(node, url);
88+
}
89+
}
90+
8291
function deleteTrackingNumber(url) {
8392
if (confirm('<?= $block->escapeJs($block->escapeHtml(__('Are you sure?'))) ?>')) {
8493
submitAndReloadArea($('shipment_tracking_info').parentNode, url)
@@ -87,6 +96,7 @@ function deleteTrackingNumber(url) {
8796

8897
window.selectCarrier = selectCarrier;
8998
window.deleteTrackingNumber = deleteTrackingNumber;
99+
window.saveTrackingInfo = saveTrackingInfo;
90100
//]]>
91101

92102
});

0 commit comments

Comments
 (0)