Skip to content

Commit 503d05a

Browse files
Merge remote-tracking branch 'remotes/github/MAGETWO-82221' into EPAM-PR-34
2 parents fee5418 + 2515029 commit 503d05a

File tree

3 files changed

+158
-18
lines changed

3 files changed

+158
-18
lines changed
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
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="ProductsQtyReturnAfterOrderCancel">
12+
13+
<annotations>
14+
<features value="ConfigurableProduct"/>
15+
<title value="Product qunatity return after order cancel"/>
16+
<description value="Check Product qunatity return after order cancel"/>
17+
<severity value="CRITICAL"/>
18+
<testCaseId value="MAGETWO-97228"/>
19+
<useCaseId value="MAGETWO-82221"/>
20+
<group value="ConfigurableProduct"/>
21+
</annotations>
22+
23+
<before>
24+
<createData entity="ApiCategory" stepKey="createCategory"/>
25+
<createData entity="ApiConfigurableProduct" stepKey="createConfigProduct">
26+
<requiredEntity createDataKey="createCategory"/>
27+
</createData>
28+
<actionGroup ref="LoginAsAdmin" stepKey="login"/>
29+
</before>
30+
31+
<after>
32+
<deleteData createDataKey="createCategory" stepKey="deleteCategory"/>
33+
<deleteData createDataKey="createConfigProduct" stepKey="deleteConfigProduct"/>
34+
<actionGroup ref="logout" stepKey="amOnLogoutPage"/>
35+
</after>
36+
37+
<amOnPage url="{{AdminCatalogProductPage.url}}" stepKey="GoToCatalogProductPage1"/>
38+
39+
<conditionalClick selector="{{AdminProductGridFilterSection.clearFilters}}" dependentSelector="{{AdminProductGridFilterSection.clearFilters}}" visible="true" stepKey="clickClearFiltersInitial"/>
40+
<actionGroup ref="OpenEditProductOnBackendActionGroup" stepKey="openEditProduct">
41+
<argument name="product" value="$$createConfigProduct$$"/>
42+
</actionGroup>
43+
<fillField selector="{{AdminProductFormSection.productQuantity}}" userInput="100" stepKey="changeProductQuantity"/>
44+
<click selector="{{AdminProductFormActionSection.saveButton}}" stepKey="saveChanges"/>
45+
<waitForPageLoad stepKey="waitProductGridToBeLoaded"/>
46+
47+
<amOnPage url="$$createConfigProduct.sku$$.html" stepKey="navigateToProductPage"/>
48+
<waitForPageLoad stepKey="waitForProductPage"/>
49+
<fillField selector="{{StorefrontProductInfoMainSection.qty}}" userInput="4" stepKey="fillQuantity"/>
50+
51+
<actionGroup ref="addToCartFromStorefrontProductPage" stepKey="addToCartFromStorefrontProductPage">
52+
<argument name="productName" value="$$createConfigProduct.name$$"/>
53+
</actionGroup>
54+
55+
<actionGroup ref="GoToCheckoutFromMinicartActionGroup" stepKey="goToCheckoutFromMinicart"/>
56+
<actionGroup ref="GuestCheckoutFillingShippingSectionActionGroup" stepKey="guestCheckoutFillingShippingSection">
57+
<argument name="customerVar" value="CustomerEntityOne"/>
58+
<argument name="customerAddressVar" value="CustomerAddressSimple"/>
59+
</actionGroup>
60+
61+
<actionGroup ref="CheckoutPlaceOrderActionGroup" stepKey="placeOrder">
62+
<argument name="orderNumberMessage" value="CONST.successGuestCheckoutOrderNumberMessage"/>
63+
<argument name="emailYouMessage" value="CONST.successCheckoutEmailYouMessage" />
64+
</actionGroup>
65+
66+
<grabTextFrom selector="{{CheckoutSuccessMainSection.orderNumber}}" stepKey="grabOrderNumber"/>
67+
68+
<actionGroup ref="filterOrderGridById" stepKey="filterOrderGridById">
69+
<argument name="orderId" value="$grabOrderNumber"/>
70+
</actionGroup>
71+
72+
<click selector="{{AdminOrdersGridSection.firstRow}}" stepKey="clickOrderRow"/>
73+
<click selector="{{AdminOrderDetailsMainActionsSection.invoice}}" stepKey="clickInvoiceButton"/>
74+
<waitForPageLoad stepKey="waitForNewInvoicePageLoad"/>
75+
<fillField selector="{{AdminInvoiceItemsSection.qtyToInvoiceColumn}}" userInput="1" stepKey="ChangeQtyToInvoice"/>
76+
<click selector="{{AdminInvoiceItemsSection.updateQty}}" stepKey="updateQunatity"/>
77+
<waitForPageLoad stepKey="waitPageToBeLoaded"/>
78+
<click selector="{{AdminInvoiceMainActionsSection.submitInvoice}}" stepKey="clickSubmitInvoice"/>
79+
<waitForPageLoad stepKey="waitForSuccessMessageLoad"/>
80+
<click selector="{{AdminOrderDetailsMainActionsSection.ship}}" stepKey="clickShipAction"/>
81+
<waitForPageLoad stepKey="waitOrderDetailToLoad"/>
82+
<fillField selector="{{AdminShipmentItemsSection.itemQtyToShip('1')}}" userInput="1" stepKey="changeItemQtyToShip"/>
83+
<click selector="{{AdminShipmentMainActionsSection.submitShipment}}" stepKey="clickSubmitShipment"/>
84+
<waitForPageLoad stepKey="waitShipmentSectionToLoad"/>
85+
<actionGroup ref="cancelPendingOrder" stepKey="cancelPendingOption">
86+
<argument name="orderStatus" value="Complete"/>
87+
</actionGroup>
88+
89+
<see selector="{{AdminOrderItemsOrderedSection.itemQty('1')}}" userInput="Canceled 3" stepKey="seeCanceledQuantity"/>
90+
91+
<amOnPage url="{{AdminCatalogProductPage.url}}" stepKey="GoToCatalogProductPage"/>
92+
93+
<actionGroup ref="filterProductGridBySku2" stepKey="filterProductGridBySku">
94+
<argument name="sku" value="$$createConfigProduct.sku$$"/>
95+
</actionGroup>
96+
<see selector="{{AdminProductGridSection.productGridCell('1', 'Quantity')}}" userInput="99" stepKey="seeProductSkuInGrid"/>
97+
</test>
98+
</tests>

app/code/Magento/Sales/Model/Service/InvoiceService.php

Lines changed: 34 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -142,10 +142,10 @@ public function prepareInvoice(Order $order, array $qtys = [])
142142
continue;
143143
}
144144
$item = $this->orderConverter->itemToInvoiceItem($orderItem);
145-
if ($orderItem->isDummy()) {
146-
$qty = $orderItem->getQtyOrdered() ? $orderItem->getQtyOrdered() : 1;
147-
} elseif (isset($qtys[$orderItem->getId()])) {
145+
if (isset($qtys[$orderItem->getId()])) {
148146
$qty = (double) $qtys[$orderItem->getId()];
147+
} elseif ($orderItem->isDummy()) {
148+
$qty = $orderItem->getQtyOrdered() ? $orderItem->getQtyOrdered() : 1;
149149
} elseif (empty($qtys)) {
150150
$qty = $orderItem->getQtyToInvoice();
151151
} else {
@@ -172,27 +172,44 @@ private function prepareItemsQty(Order $order, array $qtys = [])
172172
{
173173
foreach ($order->getAllItems() as $orderItem) {
174174
if (empty($qtys[$orderItem->getId()])) {
175-
continue;
176-
}
177-
if ($orderItem->isDummy()) {
178-
if ($orderItem->getHasChildren()) {
179-
foreach ($orderItem->getChildrenItems() as $child) {
180-
if (!isset($qtys[$child->getId()])) {
181-
$qtys[$child->getId()] = $child->getQtyToInvoice();
182-
}
183-
}
184-
} elseif ($orderItem->getParentItem()) {
185-
$parent = $orderItem->getParentItem();
186-
if (!isset($qtys[$parent->getId()])) {
187-
$qtys[$parent->getId()] = $parent->getQtyToInvoice();
188-
}
175+
$parentId = $orderItem->getParentItemId();
176+
if ($parentId && array_key_exists($parentId, $qtys)) {
177+
$qtys[$orderItem->getId()] = $qtys[$parentId];
178+
} else {
179+
continue;
189180
}
190181
}
182+
$this->prepareItemQty($orderItem, $qtys);
191183
}
192184

193185
return $qtys;
194186
}
195187

188+
/**
189+
* Prepare qty to invoice item.
190+
*
191+
* @param Order\Item $orderItem
192+
* @param array $qtys
193+
* @return void
194+
*/
195+
private function prepareItemQty(\Magento\Sales\Api\Data\OrderItemInterface $orderItem, &$qtys)
196+
{
197+
if ($orderItem->isDummy()) {
198+
if ($orderItem->getHasChildren()) {
199+
foreach ($orderItem->getChildrenItems() as $child) {
200+
if (!isset($qtys[$child->getId()])) {
201+
$qtys[$child->getId()] = $child->getQtyToInvoice();
202+
}
203+
}
204+
} elseif ($orderItem->getParentItem()) {
205+
$parent = $orderItem->getParentItem();
206+
if (!isset($qtys[$parent->getId()])) {
207+
$qtys[$parent->getId()] = $parent->getQtyToInvoice();
208+
}
209+
}
210+
}
211+
}
212+
196213
/**
197214
* Check if order item can be invoiced.
198215
*

app/code/Magento/Sales/Test/Mftf/ActionGroup/AdminOrderActionGroup.xml

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -350,17 +350,42 @@
350350

351351
<!--Cancel order that is in pending status-->
352352
<actionGroup name="cancelPendingOrder">
353+
<arguments>
354+
<argument name="orderStatus" type="string" defaultValue="Canceled"/>
355+
</arguments>
353356
<click selector="{{AdminOrderDetailsMainActionsSection.cancel}}" stepKey="clickCancelOrder"/>
354357
<waitForElement selector="{{AdminConfirmationModalSection.message}}" stepKey="waitForCancelConfirmation"/>
355358
<see selector="{{AdminConfirmationModalSection.message}}" userInput="Are you sure you want to cancel this order?" stepKey="seeConfirmationMessage"/>
356359
<click selector="{{AdminConfirmationModalSection.ok}}" stepKey="confirmOrderCancel"/>
357360
<see selector="{{AdminMessagesSection.success}}" userInput="You canceled the order." stepKey="seeCancelSuccessMessage"/>
358-
<see selector="{{AdminOrderDetailsInformationSection.orderStatus}}" userInput="Canceled" stepKey="seeOrderStatusCanceled"/>
361+
<see selector="{{AdminOrderDetailsInformationSection.orderStatus}}" userInput="{{orderStatus}}" stepKey="seeOrderStatusCanceled"/>
359362
</actionGroup>
360363

361364
<!--Select Check Money payment method-->
362365
<actionGroup name="SelectCheckMoneyPaymentMethod">
363366
<waitForElementVisible selector="{{AdminOrderFormPaymentSection.paymentBlock}}" stepKey="waitForPaymentOptions"/>
364367
<conditionalClick selector="{{AdminOrderFormPaymentSection.checkMoneyOption}}" dependentSelector="{{AdminOrderFormPaymentSection.checkMoneyOption}}" visible="true" stepKey="checkCheckMoneyOption"/>
365368
</actionGroup>
369+
370+
<!-- Create Order -->
371+
<actionGroup name="CreateOrderActionGroup">
372+
<arguments>
373+
<argument name="product"/>
374+
<argument name="customer"/>
375+
</arguments>
376+
<amOnPage stepKey="navigateToNewOrderPage" url="{{AdminOrderCreatePage.url}}"/>
377+
<click stepKey="chooseCustomer" selector="{{AdminOrdersGridSection.customerInOrdersSection(customer.firstname)}}"/>
378+
<waitForPageLoad stepKey="waitForStoresPageOpened"/>
379+
<click selector="{{OrdersGridSection.addProducts}}" stepKey="clickOnAddProducts"/>
380+
<waitForPageLoad stepKey="waitForProductsListForOrder"/>
381+
<click selector="{{AdminOrdersGridSection.productForOrder(product.sku)}}" stepKey="chooseTheProduct"/>
382+
<click selector="{{AdminOrderFormItemsSection.addSelected}}" stepKey="addSelectedProductToOrder"/>
383+
<waitForPageLoad stepKey="waitForProductAddedInOrder"/>
384+
<click selector="{{AdminInvoicePaymentShippingSection.getShippingMethodAndRates}}" stepKey="openShippingMethod"/>
385+
<waitForPageLoad stepKey="waitForShippingMethods"/>
386+
<click selector="{{AdminInvoicePaymentShippingSection.shippingMethod}}" stepKey="chooseShippingMethod"/>
387+
<waitForPageLoad stepKey="waitForShippingMethodsThickened"/>
388+
<click selector="{{OrdersGridSection.submitOrder}}" stepKey="submitOrder"/>
389+
<see stepKey="seeSuccessMessageForOrder" userInput="You created the order."/>
390+
</actionGroup>
366391
</actionGroups>

0 commit comments

Comments
 (0)