![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/dev/tests/integration/testsuite/Magento/Bundle/_files/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ use Magento\TestFramework\Workaround\Override\Fixture\Resolver; /* * Since the bundle product creation GUI doesn't allow to choose values for bundled products' custom options, * bundled items should not contain products with required custom options. * However, if to create such a bundle product, it will be always out of stock. */ Resolver::getInstance()->requireDataFixture('Magento/Catalog/_files/products.php'); /** @var $objectManager \Magento\TestFramework\ObjectManager */ $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); /** @var \Magento\Catalog\Api\ProductRepositoryInterface $productRepository */ $productRepository = $objectManager->create(\Magento\Catalog\Api\ProductRepositoryInterface::class); $sampleProduct = $productRepository->get('simple'); /** @var $product \Magento\Catalog\Model\Product */ $product = $objectManager->create(\Magento\Catalog\Model\Product::class); $product->setTypeId('bundle') ->setId(3) ->setAttributeSetId(4) ->setWeight(2) ->setWebsiteIds([1]) ->setName('Bundle Product') ->setSku('bundle-product') ->setVisibility(\Magento\Catalog\Model\Product\Visibility::VISIBILITY_BOTH) ->setStatus(\Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_ENABLED) ->setStockData(['use_config_manage_stock' => 1, 'qty' => 100, 'is_qty_decimal' => 0, 'is_in_stock' => 1]) ->setPriceView(1) ->setSkuType(1) ->setWeightType(1) ->setPriceType(1) ->setShipmentType(0) ->setPrice(10.0) ->setBundleOptionsData( [ [ 'title' => 'Bundle Product Items', 'default_title' => 'Bundle Product Items', 'type' => 'select', 'required' => 1, 'delete' => '', ], ] ) ->setBundleSelectionsData( [ [ [ 'product_id' => $sampleProduct->getId(), 'selection_price_value' => 2.75, 'selection_qty' => 1, 'selection_can_change_qty' => 1, 'delete' => '', 'selection_price_type' => 0 ], ], ] ); if ($product->getBundleOptionsData()) { $options = []; foreach ($product->getBundleOptionsData() as $key => $optionData) { if (!(bool)$optionData['delete']) { $option = $objectManager->create(\Magento\Bundle\Api\Data\OptionInterfaceFactory::class) ->create(['data' => $optionData]); $option->setSku($product->getSku()); $option->setOptionId(null); $links = []; $bundleLinks = $product->getBundleSelectionsData(); if (!empty($bundleLinks[$key])) { foreach ($bundleLinks[$key] as $linkData) { if (!(bool)$linkData['delete']) { /** @var \Magento\Bundle\Api\Data\LinkInterface$link */ $link = $objectManager->create(\Magento\Bundle\Api\Data\LinkInterfaceFactory::class) ->create(['data' => $linkData]); $linkProduct = $productRepository->getById($linkData['product_id']); $link->setSku($linkProduct->getSku()); $link->setQty($linkData['selection_qty']); $link->setPrice($linkData['selection_price_value']); if (isset($linkData['selection_can_change_qty'])) { $link->setCanChangeQuantity($linkData['selection_can_change_qty']); } $link->setPriceType($linkData['selection_price_type']); $link->setPrice($linkData['selection_price_value']); $links[] = $link; } } $option->setProductLinks($links); $options[] = $option; } } } $extension = $product->getExtensionAttributes(); $extension->setBundleProductOptions($options); $product->setExtensionAttributes($extension); } $productRepository->save($product, true);