Skip to content

Commit 2cfb105

Browse files
MC-19737: Date type field saving incorrect value for a store in different timezone
1 parent 56f29a4 commit 2cfb105

File tree

1 file changed

+84
-6
lines changed
  • dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Option/Type

1 file changed

+84
-6
lines changed

dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Option/Type/DateTest.php

Lines changed: 84 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,16 @@
66

77
namespace Magento\Catalog\Model\Product\Option\Type;
88

9+
use Magento\Catalog\Model\Product\Option;
10+
use Magento\Framework\DataObject;
11+
912
/**
10-
* Test for \Magento\Catalog\Model\Product\Option\Type\Date
13+
* Test for customizable product option with "Date" type
1114
*/
1215
class DateTest extends \PHPUnit\Framework\TestCase
1316
{
1417
/**
15-
* @var \Magento\Catalog\Model\Product\Option\Type\Date
18+
* @var Date
1619
*/
1720
protected $model;
1821

@@ -28,12 +31,13 @@ protected function setUp()
2831
{
2932
$this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
3033
$this->model = $this->objectManager->create(
31-
\Magento\Catalog\Model\Product\Option\Type\Date::class
34+
Date::class
3235
);
3336
}
3437

3538
/**
36-
* @covers \Magento\Catalog\Model\Product\Option\Type\Date::prepareOptionValueForRequest()
39+
* Check if option value for request is the same as expected
40+
*
3741
* @dataProvider prepareOptionValueForRequestDataProvider
3842
* @param array $optionValue
3943
* @param array $infoBuyRequest
@@ -54,10 +58,10 @@ public function testPrepareOptionValueForRequest(
5458
/** @var \Magento\Quote\Model\Quote\Item $item */
5559
$item = $this->objectManager->create(\Magento\Quote\Model\Quote\Item::class);
5660
$item->addOption($option);
57-
/** @var \Magento\Catalog\Model\Product\Option|null $productOption */
61+
/** @var Option|null $productOption */
5862
$productOption = $productOptionData
5963
? $this->objectManager->create(
60-
\Magento\Catalog\Model\Product\Option::class,
64+
Option::class,
6165
['data' => $productOptionData]
6266
)
6367
: null;
@@ -69,6 +73,8 @@ public function testPrepareOptionValueForRequest(
6973
}
7074

7175
/**
76+
* Data provider for testPrepareOptionValueForRequest
77+
*
7278
* @return array
7379
*/
7480
public function prepareOptionValueForRequestDataProvider()
@@ -109,4 +115,76 @@ public function prepareOptionValueForRequestDataProvider()
109115
],
110116
];
111117
}
118+
119+
/**
120+
* Check date in prepareForCart method with javascript calendar and Asia/Singapore timezone
121+
*
122+
* @dataProvider testPrepareForCartDataProvider
123+
* @param array $dateData
124+
* @param array $productOptionData
125+
* @param array $requestData
126+
* @param string $expectedOptionValueForRequest
127+
* @magentoConfigFixture current_store catalog/custom_options/use_calendar 1
128+
* @magentoConfigFixture current_store general/locale/timezone Asia/Singapore
129+
*/
130+
public function testPrepareForCart(
131+
array $dateData,
132+
array $productOptionData,
133+
array $requestData,
134+
string $expectedOptionValueForRequest
135+
) {
136+
$this->model->setData($dateData);
137+
/** @var Option|null $productOption */
138+
$productOption = $productOptionData
139+
? $this->objectManager->create(
140+
Option::class,
141+
['data' => $productOptionData]
142+
)
143+
: null;
144+
$this->model->setOption($productOption);
145+
$request = new DataObject();
146+
$request->setData($requestData);
147+
$this->model->setRequest($request);
148+
$actualOptionValueForRequest = $this->model->prepareForCart();
149+
$this->assertSame($expectedOptionValueForRequest, $actualOptionValueForRequest);
150+
}
151+
152+
/**
153+
* Data provider for testPrepareForCart
154+
*
155+
* @return array
156+
*/
157+
public function testPrepareForCartDataProvider()
158+
{
159+
return [
160+
[
161+
// $dateData
162+
[
163+
'is_valid' => true,
164+
'user_value' => [
165+
'date' => '09/30/2019',
166+
'year' => 0,
167+
'month' => 0,
168+
'day' => 0,
169+
'hour' => 0,
170+
'minute' => 0,
171+
'day_part' => '',
172+
'date_internal' => ''
173+
]
174+
],
175+
// $productOptionData
176+
['id' => '11', 'value' => '{"qty":12}', 'type' => 'date'],
177+
// $requestData
178+
[
179+
'options' => [
180+
[
181+
'date' => '09/30/2019'
182+
]
183+
]
184+
],
185+
// $expectedOptionValueForRequest
186+
'2019-09-30 00:00:00'
187+
]
188+
];
189+
}
112190
}

0 commit comments

Comments
 (0)