66
77namespace 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 */
1215class 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