Skip to content

Commit 27f1315

Browse files
MC-36405: Reorder is not working with custom options date with JavaScript Calendar enabled
1 parent 2c0af08 commit 27f1315

File tree

3 files changed

+120
-0
lines changed

3 files changed

+120
-0
lines changed

dev/tests/integration/testsuite/Magento/Sales/Controller/Order/ReorderTest.php

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,33 @@ public function testReorderByAnotherCustomer(): void
136136
}
137137
}
138138

139+
/**
140+
* Reorder with JS calendar options
141+
*
142+
* @magentoDataFixture Magento/Sales/_files/order_with_js_date_option_product.php
143+
* @magentoConfigFixture current_store catalog/custom_options/use_calendar 1
144+
*
145+
* @return void
146+
*/
147+
public function testReorderWithJSCalendar(): void
148+
{
149+
$order = $this->orderFactory->create()->loadByIncrementId('100000001');
150+
$items = $order->getItems();
151+
$orderItem = array_pop($items);
152+
$orderRequestOptions = $orderItem->getProductOptionByCode('info_buyRequest')['options'];
153+
$order->save();
154+
$this->customerSession->setCustomerId($order->getCustomerId());
155+
$this->dispatchReorderRequest((int)$order->getId());
156+
$this->assertRedirect($this->stringContains('checkout/cart'));
157+
$this->quote = $this->checkoutSession->getQuote();
158+
$quoteItemsCollection = $this->quote->getItemsCollection();
159+
$this->assertCount(1, $quoteItemsCollection);
160+
$items = $this->quote->getItems();
161+
$quoteItem = array_pop($items);
162+
$quoteRequestOptions = $quoteItem->getBuyRequest()->getOptions();
163+
$this->assertEquals($orderRequestOptions, $quoteRequestOptions);
164+
}
165+
139166
/**
140167
* Dispatch reorder request.
141168
*
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
use Magento\TestFramework\Workaround\Override\Fixture\Resolver;
9+
10+
Resolver::getInstance()->requireDataFixture('Magento/Customer/_files/customer.php');
11+
Resolver::getInstance()->requireDataFixture('Magento/Catalog/_files/product_simple.php');
12+
13+
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
14+
15+
$addressData = include __DIR__ . '/../../../Magento/Sales/_files/address_data.php';
16+
17+
$billingAddress = $objectManager->create(\Magento\Sales\Model\Order\Address::class, ['data' => $addressData]);
18+
$billingAddress->setAddressType('billing');
19+
20+
$shippingAddress = clone $billingAddress;
21+
$shippingAddress->setId(null)->setAddressType('shipping');
22+
23+
$payment = $objectManager->create(\Magento\Sales\Model\Order\Payment::class);
24+
$payment->setMethod('checkmo');
25+
26+
/** @var $product \Magento\Catalog\Model\Product */
27+
$product = $objectManager->create(\Magento\Catalog\Model\Product::class);
28+
$repository = $objectManager->create(\Magento\Catalog\Model\ProductRepository::class);
29+
$product = $repository->get('simple');
30+
31+
$optionValuesByType = [
32+
'field' => 'Test value',
33+
'date_time' => [
34+
'date' => '09/30/2022',
35+
'hour' => '2',
36+
'minute' => '15',
37+
'day_part' => 'am',
38+
'date_internal' => '2020-09-30 02:15:00'
39+
],
40+
'drop_down' => '3-1-select',
41+
'radio' => '4-1-radio',
42+
];
43+
44+
$requestInfo = ['options' => []];
45+
$productOptions = $product->getOptions();
46+
foreach ($productOptions as $option) {
47+
$requestInfo['options'][$option->getOptionId()] = $optionValuesByType[$option->getType()];
48+
}
49+
50+
/** @var \Magento\Sales\Model\Order\Item $orderItem */
51+
$orderItem = $objectManager->create(\Magento\Sales\Model\Order\Item::class);
52+
$orderItem->setProductId($product->getId());
53+
$orderItem->setSku($product->getSku());
54+
$orderItem->setQtyOrdered(1);
55+
$orderItem->setBasePrice($product->getPrice());
56+
$orderItem->setPrice($product->getPrice());
57+
$orderItem->setRowTotal($product->getPrice());
58+
$orderItem->setProductType($product->getTypeId());
59+
$orderItem->setProductOptions(['info_buyRequest' => $requestInfo]);
60+
61+
/** @var \Magento\Sales\Model\Order $order */
62+
$order = $objectManager->create(\Magento\Sales\Model\Order::class);
63+
$order->setIncrementId('100000001');
64+
$order->setState(\Magento\Sales\Model\Order::STATE_NEW);
65+
$order->setStatus($order->getConfig()->getStateDefaultStatus(\Magento\Sales\Model\Order::STATE_NEW));
66+
$order->setCustomerIsGuest(true);
67+
$order->setCustomerEmail('customer@null.com');
68+
$order->setCustomerFirstname('firstname');
69+
$order->setCustomerLastname('lastname');
70+
$order->setBillingAddress($billingAddress);
71+
$order->setShippingAddress($shippingAddress);
72+
$order->setAddresses([$billingAddress, $shippingAddress]);
73+
$order->setPayment($payment);
74+
$order->addItem($orderItem);
75+
$order->setStoreId($objectManager->get(\Magento\Store\Model\StoreManagerInterface::class)->getStore()->getId());
76+
$order->setSubtotal(100);
77+
$order->setBaseSubtotal(100);
78+
$order->setBaseGrandTotal(100);
79+
$order->setCustomerId(1)
80+
->setCustomerIsGuest(false)
81+
->save();
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
use Magento\TestFramework\Workaround\Override\Fixture\Resolver;
9+
10+
Resolver::getInstance()->requireDataFixture('Magento/Customer/_files/customer_rollback.php');
11+
Resolver::getInstance()->requireDataFixture('Magento/Catalog/_files/product_simple_rollback.php');
12+
Resolver::getInstance()->requireDataFixture('Magento/Sales/_files/default_rollback.php');

0 commit comments

Comments
 (0)