Skip to content

Commit 9eb5d52

Browse files
author
Leonid Poluianov
committed
MC-32201: Reorder functionality (test coverage)
1 parent 89016aa commit 9eb5d52

File tree

6 files changed

+186
-3
lines changed

6 files changed

+186
-3
lines changed

dev/tests/api-functional/testsuite/Magento/GraphQl/Sales/ReorderTest.php

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,6 @@ public function testSimpleProductOutOfStock()
119119
/**
120120
* Test reorder when simple product qty is 0, with allowed backorders configured to below 0
121121
*
122-
* @magentoConfigFixture admin_store cataloginventory/item_options/backorders 1
123-
* @magentoConfigFixture admin_store cataloginventory/item_options/use_deferred_stock_update 0
124122
* @magentoApiDataFixture Magento/Sales/_files/order_with_zero_qty_product.php
125123
* @throws \Exception
126124
*/
@@ -151,6 +149,45 @@ public function testBackorderWithOutOfStock()
151149
$this->assertResponseFields($response['reorderItems'], $expectedResponse);
152150
}
153151

152+
/**
153+
* Test reorder with low stock for simple product
154+
*
155+
* @magentoApiDataFixture Magento/Sales/_files/order_with_1_qty_product.php
156+
* @throws \Exception
157+
*/
158+
public function testReorderWithLowStock()
159+
{
160+
$response = $this->makeReorderForDefaultCustomer();
161+
$expectedResponse = [
162+
'userInputErrors' => [
163+
[
164+
'path' => ['orderNumber'],
165+
'code' => 'INSUFFICIENT_STOCK',
166+
'message' => 'Could not add the product with SKU "simple" to the shopping cart: '
167+
. 'The requested qty is not available',
168+
],
169+
],
170+
'cart' => [
171+
'email' => 'customer@example.com',
172+
'total_quantity' => 10,
173+
'items' => [
174+
[
175+
'quantity' => 10,
176+
'product' => [
177+
'sku' => 'simple-2'
178+
]
179+
]
180+
],
181+
],
182+
];
183+
$this->assertResponseFields($response['reorderItems'], $expectedResponse);
184+
$response = $this->makeReorderForDefaultCustomer();
185+
$expectedResponse['cart']['total_quantity'] = 20;
186+
$expectedResponse['cart']['items'][0]['quantity'] = 20;
187+
188+
$this->assertResponseFields($response['reorderItems'], $expectedResponse);
189+
}
190+
154191
/**
155192
* Assert that simple product is not available.
156193
*/
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
use Magento\TestFramework\Helper\Bootstrap;
8+
9+
require __DIR__ . '/../../../Magento/Sales/_files/order_with_two_simple_products_qty_10.php';
10+
11+
$customerIdFromFixture = 1;
12+
/** @var $order \Magento\Sales\Model\Order */
13+
$order->setCustomerId($customerIdFromFixture)->setCustomerIsGuest(false)->save();
14+
15+
// load product and set qty to 1
16+
/** @var \Magento\Catalog\Api\ProductRepositoryInterface $repository */
17+
$productRepository = Bootstrap::getObjectManager()->create(\Magento\Catalog\Api\ProductRepositoryInterface::class);
18+
$productSku = 'simple';
19+
/** @var \Magento\Catalog\Model\Product $product */
20+
$product = $productRepository->get($productSku);
21+
// set product qty to 1
22+
$product->setStockData(
23+
[
24+
'use_config_manage_stock' => 1,
25+
'qty' => 1,
26+
]
27+
);
28+
$productRepository->save($product);
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
require __DIR__ . '/../../../Magento/Sales/_files/order_with_two_simple_products_rollback.php';
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
use Magento\Sales\Api\OrderRepositoryInterface;
8+
9+
require __DIR__ . '/../../../Magento/Customer/_files/customer.php';
10+
require __DIR__ . '/../../../Magento/Catalog/_files/product_simple.php';
11+
require __DIR__ . '/../../../Magento/Catalog/_files/product_simple_without_custom_options.php';
12+
13+
/** \Magento\Customer\Model\Customer $customer */
14+
$addressData = include __DIR__ . '/../../../Magento/Sales/_files/address_data.php';
15+
$billingAddress = $objectManager->create(\Magento\Sales\Model\Order\Address::class, ['data' => $addressData]);
16+
$billingAddress->setAddressType('billing');
17+
$shippingAddress = clone $billingAddress;
18+
$shippingAddress->setId(null)->setAddressType('shipping');
19+
20+
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
21+
$payment = $objectManager->create(\Magento\Sales\Model\Order\Payment::class);
22+
$payment->setMethod('checkmo');
23+
$customerIdFromFixture = 1;
24+
25+
$optionValuesByType = [
26+
'field' => 'Test value',
27+
'date_time' => [
28+
'year' => '2015',
29+
'month' => '9',
30+
'day' => '9',
31+
'hour' => '2',
32+
'minute' => '2',
33+
'day_part' => 'am',
34+
'date_internal' => '',
35+
],
36+
'drop_down' => '3-1-select',
37+
'radio' => '4-1-radio',
38+
];
39+
40+
$requestInfo = ['options' => [], 'qty' => 1];
41+
$productOptions = $product->getOptions();
42+
foreach ($productOptions as $option) {
43+
$requestInfo['options'][$option->getOptionId()] = $optionValuesByType[$option->getType()];
44+
}
45+
46+
/** @var \Magento\Sales\Model\Order\Item $orderItem */
47+
$orderItem = $objectManager->create(\Magento\Sales\Model\Order\Item::class);
48+
$orderItem->setProductId($product->getId());
49+
$orderItem->setQtyOrdered(10);
50+
$orderItem->setBasePrice($product->getPrice());
51+
$orderItem->setPrice($product->getPrice());
52+
$orderItem->setRowTotal($product->getPrice());
53+
$orderItem->setProductType($product->getTypeId());
54+
$orderItem->setProductOptions(['info_buyRequest' => $requestInfo]);
55+
$orderItem->setName($product->getName());
56+
$orderItem->setSku($product->getSku());
57+
$orderItem->setStoreId(0);
58+
// create second order item
59+
60+
$orderItem2 = $objectManager->create(\Magento\Sales\Model\Order\Item::class);
61+
$requestInfo = [
62+
'qty' => 1
63+
];
64+
$orderItem2->setProductId($secondProduct->getId())
65+
->setQtyOrdered(10)
66+
->setBasePrice($secondProduct->getPrice())
67+
->setPrice($secondProduct->getPrice())
68+
->setRowTotal($secondProduct->getPrice())
69+
->setProductType($secondProduct->getTypeId())
70+
->setName($secondProduct->getName())
71+
->setSku($secondProduct->getSku())
72+
->setStoreId(0)
73+
->setProductId($secondProduct->getId())
74+
->setSku($secondProductSku)
75+
->setProductOptions(['info_buyRequest' => $requestInfo]);
76+
77+
/** @var \Magento\Sales\Model\Order $order */
78+
$order = $objectManager->create(\Magento\Sales\Model\Order::class);
79+
$order->setIncrementId('100000001');
80+
$order->setState(\Magento\Sales\Model\Order::STATE_NEW);
81+
$order->setStatus($order->getConfig()->getStateDefaultStatus(\Magento\Sales\Model\Order::STATE_NEW));
82+
$order->setCustomerIsGuest(false);
83+
$order->setCustomerId($customer->getId());
84+
$order->setCustomerEmail($customer->getEmail());
85+
$order->setCustomerFirstname($customer->getName());
86+
$order->setCustomerLastname($customer->getLastname());
87+
$order->setBillingAddress($billingAddress);
88+
$order->setShippingAddress($shippingAddress);
89+
$order->setAddresses([$billingAddress, $shippingAddress]);
90+
$order->setPayment($payment);
91+
$order->addItem($orderItem);
92+
$order->addItem($orderItem2);
93+
$order->setStoreId($objectManager->get(\Magento\Store\Model\StoreManagerInterface::class)->getStore()->getId());
94+
$order->setSubtotal(100);
95+
$order->setBaseSubtotal(100);
96+
$order->setBaseGrandTotal(100);
97+
98+
$orderRepository = $objectManager->create(OrderRepositoryInterface::class);
99+
$orderRepository->save($order);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
require __DIR__ . '/../../../Magento/Customer/_files/customer_rollback.php';
8+
require 'default_rollback.php';

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
* See COPYING.txt for license details.
55
*/
66

7+
use Magento\CatalogInventory\Model\Stock;
78
use Magento\TestFramework\Helper\Bootstrap;
89

910
require __DIR__ . '/../../../Magento/Sales/_files/order_with_two_simple_products.php';
@@ -12,7 +13,7 @@
1213
/** @var $order \Magento\Sales\Model\Order */
1314
$order->setCustomerId($customerIdFromFixture)->setCustomerIsGuest(false)->save();
1415

15-
// load product and set it out of stock
16+
// load product and set qty to 0
1617
/** @var \Magento\Catalog\Api\ProductRepositoryInterface $repository */
1718
$productRepository = Bootstrap::getObjectManager()->create(\Magento\Catalog\Api\ProductRepositoryInterface::class);
1819
$productSku = 'simple';
@@ -23,6 +24,9 @@
2324
[
2425
'use_config_manage_stock' => 1,
2526
'qty' => 0,
27+
'is_in_stock' => 1,
28+
'use_config_backorders' => 0,
29+
'backorders' => Stock::BACKORDERS_YES_NONOTIFY,
2630
]
2731
);
2832
$productRepository->save($product);

0 commit comments

Comments
 (0)