Skip to content

Commit b84bc4b

Browse files
author
olysenko
committed
MAGETWO-64120: Error processing your request when placing reorder for simple product of configurable if attribute is changed
1 parent fd143d1 commit b84bc4b

File tree

3 files changed

+136
-0
lines changed

3 files changed

+136
-0
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Sales\Model\Order\Reorder;
7+
8+
use Magento\Sales\Api\OrderRepositoryInterface;
9+
10+
/**
11+
* Class UnavailableProductsProviderTest
12+
*/
13+
class UnavailableProductsProviderTest extends \PHPUnit_Framework_TestCase
14+
{
15+
/**
16+
* @magentoDataFixture Magento/Sales/_files/order_item_with_configurable_for_reorder.php
17+
*/
18+
public function testGetForOrder()
19+
{
20+
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
21+
/** @var \Magento\Sales\Model\OrderRepository $orderRepository */
22+
$orderRepository = $objectManager->get(OrderRepositoryInterface::class);
23+
/** @var \Magento\Sales\Model\Order $order */
24+
$order = $orderRepository->get(1);
25+
$orderItems = $order->getItems();
26+
$orderItemSimple = $orderItems[2];
27+
$orderItemSimple->getSku();
28+
/** @var UnavailableProductsProvider $unavailableProductsProvider */
29+
$unavailableProductsProvider =
30+
$objectManager->create(UnavailableProductsProvider::class);
31+
$unavailableProducts = $unavailableProductsProvider->getForOrder($order);
32+
$this->assertEquals($orderItemSimple->getSku(), $unavailableProducts[0]);
33+
}
34+
}
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
use Magento\Catalog\Api\ProductRepositoryInterface;
8+
use Magento\Catalog\Model\ProductRepository;
9+
10+
require __DIR__ . '/../../../Magento/ConfigurableProduct/_files/product_configurable.php';
11+
12+
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
13+
14+
$addressData = include __DIR__ . '/../../../Magento/Sales/_files/address_data.php';
15+
16+
$billingAddress = $objectManager->create(\Magento\Sales\Model\Order\Address::class, ['data' => $addressData]);
17+
$billingAddress->setAddressType('billing');
18+
19+
$shippingAddress = clone $billingAddress;
20+
$shippingAddress->setId(null)->setAddressType('shipping');
21+
22+
$payment = $objectManager->create(\Magento\Sales\Model\Order\Payment::class);
23+
$payment->setMethod('checkmo');
24+
25+
/** @var ProductRepository $productRepository */
26+
$productRepository = $objectManager->get(ProductRepositoryInterface::class);
27+
$product = $productRepository->getById(1);
28+
/** @var \Magento\Catalog\Model\Product $productSimple */
29+
$simpleProduct = $productRepository->getById(20);
30+
31+
32+
/** @var $attribute \Magento\Catalog\Model\ResourceModel\Eav\Attribute */
33+
$eavConfig = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(\Magento\Eav\Model\Config::class);
34+
$attribute = $eavConfig->getAttribute('catalog_product', 'test_configurable');
35+
36+
/** @var $options \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\Collection */
37+
$options = $objectManager->create(\Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\Collection::class);
38+
$option = $options->setAttributeFilter($attribute->getId())
39+
->getFirstItem();
40+
41+
$requestInfo = [
42+
'qty' => 1,
43+
'super_attribute' => [
44+
$attribute->getId() => $option->getId(),
45+
],
46+
];
47+
/** @var \Magento\Sales\Model\Order $order */
48+
$order = $objectManager->create(\Magento\Sales\Model\Order::class);
49+
$order->setIncrementId('100000001');
50+
$order->loadByIncrementId('100000001');
51+
if ($order->getId()) {
52+
$order->delete();
53+
}
54+
/** @var \Magento\Sales\Model\Order\Item $orderItem */
55+
$orderItem = $objectManager->create(\Magento\Sales\Model\Order\Item::class);
56+
$orderItemSimple = clone $orderItem;
57+
$orderItem->setProductId($product->getId());
58+
$orderItem->setQtyOrdered(1);
59+
$orderItem->setBasePrice($product->getPrice());
60+
$orderItem->setPrice($product->getPrice());
61+
$orderItem->setRowTotal($product->getPrice());
62+
$orderItem->setProductType($product->getTypeId());
63+
$orderItem->setProductOptions(['info_buyRequest' => $requestInfo]);
64+
$orderItemSimple->setProductId($simpleProduct->getId());
65+
$orderItemSimple->setParentItem($orderItem);
66+
$orderItemSimple->setStoreId(0);
67+
$orderItemSimple->setProductType($simpleProduct->getTypeId());
68+
$orderItemSimple->setProductOptions(['info_buyRequest' => $requestInfo]);
69+
$orderItemSimple->setSku($simpleProduct->getSku());
70+
71+
/** @var \Magento\Sales\Model\Order $order */
72+
$order = $objectManager->create(\Magento\Sales\Model\Order::class);
73+
$order->setIncrementId('100000001');
74+
$order->setState(\Magento\Sales\Model\Order::STATE_NEW);
75+
$order->setStatus($order->getConfig()->getStateDefaultStatus(\Magento\Sales\Model\Order::STATE_NEW));
76+
$order->setCustomerIsGuest(true);
77+
$order->setCustomerEmail('customer@null.com');
78+
$order->setCustomerFirstname('firstname');
79+
$order->setCustomerLastname('lastname');
80+
$order->setBillingAddress($billingAddress);
81+
$order->setShippingAddress($shippingAddress);
82+
$order->setAddresses([$billingAddress, $shippingAddress]);
83+
$order->setPayment($payment);
84+
$order->addItem($orderItem);
85+
$order->addItem($orderItemSimple);
86+
$order->setStoreId($objectManager->get(\Magento\Store\Model\StoreManagerInterface::class)->getStore()->getId());
87+
$order->setSubtotal(100);
88+
$order->setBaseSubtotal(100);
89+
$order->setBaseGrandTotal(100);
90+
$order->save();
91+
// Change attribute value for simple of configurable
92+
$simpleProduct->setData('test_configurable', 100);
93+
$simpleProduct->save();
94+
$simpleProduct->isAvailable();
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/ConfigurableProduct/_files/product_configurable_rollback.php';
8+
require __DIR__ . '/../../../Magento/Sales/_files/default_rollback.php';

0 commit comments

Comments
 (0)