@@ -301,13 +301,15 @@ public function testUpdate()
301
301
302
302
/**
303
303
* @param string $optionType
304
- *
304
+ * @param bool $includedExisting
305
+ * @param int $expectedOptionValuesCount
306
+ * @throws \Magento\Framework\Exception\NoSuchEntityException
305
307
* @magentoApiDataFixture Magento/Catalog/_files/product_with_options.php
306
308
* @magentoAppIsolation enabled
307
309
* @dataProvider validOptionDataProvider
308
310
* @SuppressWarnings(PHPMD.UnusedLocalVariable)
309
311
*/
310
- public function testUpdateOptionAddingNewValue ($ optionType )
312
+ public function testUpdateOptionAddingNewValue ($ optionType, $ includedExisting , $ expectedOptionValuesCount )
311
313
{
312
314
$ fixtureOption = null ;
313
315
$ valueData = [
@@ -334,17 +336,21 @@ public function testUpdateOptionAddingNewValue($optionType)
334
336
}
335
337
336
338
$ values = [];
337
- foreach ($ option ->getValues () as $ key => $ value ) {
338
- $ values [] =
339
- [
340
- 'price ' => $ value ->getPrice (),
341
- 'price_type ' => $ value ->getPriceType (),
342
- 'sku ' => $ value ->getSku (),
343
- 'title ' => $ value ->getTitle (),
344
- 'sort_order ' => $ value ->getSortOrder (),
345
- ];
346
- }
347
339
$ values [] = $ valueData ;
340
+ // Keeps the existing Option Values when adding a new Option Value
341
+ if ($ includedExisting ) {
342
+ foreach ($ option ->getValues () as $ key => $ value ) {
343
+ $ values [] =
344
+ [
345
+ 'price ' => $ value ->getPrice (),
346
+ 'price_type ' => $ value ->getPriceType (),
347
+ 'sku ' => $ value ->getSku (),
348
+ 'title ' => $ value ->getTitle (),
349
+ 'sort_order ' => $ value ->getSortOrder (),
350
+ ];
351
+ }
352
+ }
353
+
348
354
$ data = [
349
355
'product_sku ' => $ option ->getProductSku (),
350
356
'title ' => $ option ->getTitle (),
@@ -375,21 +381,31 @@ public function testUpdateOptionAddingNewValue($optionType)
375
381
$ valueObject = $ this ->_webApiCall ($ serviceInfo , ['option ' => $ data ]);
376
382
}
377
383
378
- $ values = end ($ valueObject ['values ' ]);
384
+ $ values = reset ($ valueObject ['values ' ]);
379
385
$ this ->assertEquals ($ valueData ['price ' ], $ values ['price ' ]);
380
386
$ this ->assertEquals ($ valueData ['price_type ' ], $ values ['price_type ' ]);
381
387
$ this ->assertEquals ($ valueData ['sku ' ], $ values ['sku ' ]);
382
388
$ this ->assertEquals ('New Option Title ' , $ values ['title ' ]);
383
389
$ this ->assertEquals (100 , $ values ['sort_order ' ]);
390
+
391
+ $ product = $ productRepository ->get ('simple ' , false , null , true );
392
+ // Assert correct number of Option Values after Option is updated
393
+ foreach ($ product ->getOptions () as $ option ) {
394
+ if ($ option ->getId () === $ fixtureOption ->getId ()) {
395
+ $ this ->assertEquals ($ expectedOptionValuesCount , count ($ option ->getValues ()));
396
+ }
397
+ }
384
398
}
385
399
386
400
public function validOptionDataProvider ()
387
401
{
388
402
return [
389
- 'drop_down ' => ['drop_down ' ],
390
- 'checkbox ' => ['checkbox ' ],
391
- 'radio ' => ['radio ' ],
392
- 'multiple ' => ['multiple ' ]
403
+ 'drop_down including previous values ' => ['drop_down ' , true , 3 ],
404
+ 'drop_down with new value only ' => ['drop_down ' , false , 1 ],
405
+ 'checkbox including previous values ' => ['checkbox ' , true , 3 ],
406
+ 'checkbox with new value only ' => ['checkbox ' , false , 1 ],
407
+ 'radio including previous values ' => ['radio ' , true , 3 ],
408
+ 'multiple with new value only ' => ['multiple ' , false , 1 ],
393
409
];
394
410
}
395
411
0 commit comments