/** * @param array $productsData * @dataProvider generateSimpleProductsWithPartialDataDataProvider * @magentoDbIsolation enabled */ public function testGenerateSimpleProductsWithPartialData($productsData) { $this->_product->setNewVariationsAttributeSetId(4); $generatedProducts = $this->_model->generateSimpleProducts($this->_product, $productsData); $parentStockItem = $this->stockRegistry->getStockItem($this->_product->getId()); foreach ($generatedProducts as $productId) { $stockItem = $this->stockRegistry->getStockItem($productId); $this->assertEquals($parentStockItem->getManageStock(), $stockItem->getManageStock()); $this->assertEquals('1', $stockItem->getIsInStock()); } }
/** * @param array $productsData * @dataProvider generateSimpleProductsWithPartialDataDataProvider * @magentoDbIsolation enabled */ public function testGenerateSimpleProductsWithPartialData($productsData) { $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); /** @var \Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry */ $stockRegistry = $objectManager->get('Magento\\CatalogInventory\\Api\\StockRegistryInterface'); $this->_product->setNewVariationsAttributeSetId(4); $generatedProducts = $this->_model->generateSimpleProducts($this->_product, $productsData); foreach ($generatedProducts as $productId) { $stockItem = $stockRegistry->getStockItem($productId); $this->assertEquals('0', $stockItem->getManageStock()); $this->assertEquals('1', $stockItem->getIsInStock()); } }
public function testAfterInitialize() { $productMock = $this->getProductMock(); $configurableMatrix = [['newProduct' => true, 'id' => 'product1'], ['newProduct' => false, 'id' => 'product2', 'status' => 'simple2_status', 'sku' => 'simple2_sku', 'name' => 'simple2_name', 'price' => '3.33', 'configurable_attribute' => 'simple2_configurable_attribute', 'weight' => '5.55', 'media_gallery' => 'simple2_media_gallery', 'swatch_image' => 'simple2_swatch_image', 'small_image' => 'simple2_small_image', 'thumbnail' => 'simple2_thumbnail', 'image' => 'simple2_image'], ['newProduct' => false, 'id' => 'product3', 'qty' => '3']]; $configurations = ['product2' => ['status' => 'simple2_status', 'sku' => 'simple2_sku', 'name' => 'simple2_name', 'price' => '3.33', 'configurable_attribute' => 'simple2_configurable_attribute', 'weight' => '5.55', 'media_gallery' => 'simple2_media_gallery', 'swatch_image' => 'simple2_swatch_image', 'small_image' => 'simple2_small_image', 'thumbnail' => 'simple2_thumbnail', 'image' => 'simple2_image'], 'product3' => ['quantity_and_stock_status' => ['qty' => '3']]]; /** @var Product[]|\PHPUnit_Framework_MockObject_MockObject[] $productMocks */ $productMocks = ['product2' => $this->getProductMock($configurations['product2'], true), 'product3' => $this->getProductMock($configurations['product3'])]; $this->requestMock->expects(static::any())->method('getParam')->willReturnMap([['store', 0, 0], ['configurable-matrix', [], $configurableMatrix]]); $this->variationHandlerMock->expects(static::once())->method('duplicateImagesForVariations')->with($configurations)->willReturn($configurations); $this->productRepositoryMock->expects(static::any())->method('getById')->willReturnMap([['product2', false, 0, false, $productMocks['product2']], ['product3', false, 0, false, $productMocks['product3']]]); $this->variationHandlerMock->expects(static::any())->method('processMediaGallery')->willReturnMap([[$productMocks['product2'], $configurations['product2'], $configurations['product2']], [$productMocks['product3'], $configurations['product3'], $configurations['product3']]]); $this->assertSame($productMock, $this->updateConfigurations->afterInitialize($this->subjectMock, $productMock)); }
/** * Update data for configurable product configurations * * @param \Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper $subject * @param \Magento\Catalog\Model\Product $configurableProduct * * @return \Magento\Catalog\Model\Product * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function afterInitialize(\Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper $subject, \Magento\Catalog\Model\Product $configurableProduct) { $configurations = $this->request->getParam('configurations', []); $configurations = $this->variationHandler->duplicateImagesForVariations($configurations); foreach ($configurations as $productId => $productData) { /** @var \Magento\Catalog\Model\Product $product */ $product = $this->productRepository->getById($productId, false, $this->request->getParam('store', 0)); $productData = $this->variationHandler->processMediaGallery($product, $productData); $product->addData($productData); if ($product->hasDataChanges()) { $product->save(); } } return $configurableProduct; }
/** * @covers Configurable::afterInitialize */ public function testAfterInitializeForNotConfigurableProduct() { $this->product->expects(static::once())->method('getTypeId')->willReturn('non-configurable'); $this->product->expects(static::never())->method('getExtensionAttributes'); $this->request->expects(static::once())->method('getPost'); $this->variationHandler->expects(static::never())->method('generateSimpleProducts'); $this->plugin->afterInitialize($this->subject, $this->product); }
/** * Initialize data for configurable product * * @param \Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper $subject * @param \Magento\Catalog\Model\Product $product * * @return \Magento\Catalog\Model\Product * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function afterInitialize(\Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper $subject, \Magento\Catalog\Model\Product $product) { $attributes = $this->request->getParam('attributes'); if ($product->getTypeId() == ConfigurableProduct::TYPE_CODE && !empty($attributes)) { $setId = $this->request->getPost('new-variations-attribute-set-id'); $product->setAttributeSetId($setId); $this->productType->setUsedProductAttributeIds($attributes, $product); $product->setNewVariationsAttributeSetId($setId); $associatedProductIds = $this->request->getPost('associated_product_ids', []); $variationsMatrix = $this->request->getParam('variations-matrix', []); if (!empty($variationsMatrix)) { $generatedProductIds = $this->variationHandler->generateSimpleProducts($product, $variationsMatrix); $associatedProductIds = array_merge($associatedProductIds, $generatedProductIds); } $product->setAssociatedProductIds(array_filter($associatedProductIds)); $product->setCanSaveConfigurableAttributes((bool) $this->request->getPost('affect_configurable_product_attributes')); } return $product; }
/** * Relate simple products to configurable * * @param ProductInterface $product * @param ProductExtensionInterface $extensionAttributes * @return void * @throws \Magento\Framework\Exception\LocalizedException */ private function setLinkedProducts(ProductInterface $product, ProductExtensionInterface $extensionAttributes) { $associatedProductIds = $this->request->getPost('associated_product_ids', []); $variationsMatrix = $this->request->getParam('variations-matrix', []); if (!empty($variationsMatrix)) { $generatedProductIds = $this->variationHandler->generateSimpleProducts($product, $variationsMatrix); $associatedProductIds = array_merge($associatedProductIds, $generatedProductIds); } $extensionAttributes->setConfigurableProductLinks(array_filter($associatedProductIds)); }
/** * Relate simple products to configurable * * @param ProductInterface $product * @param ProductExtensionInterface $extensionAttributes * @return void * @throws \Magento\Framework\Exception\LocalizedException */ private function setLinkedProducts(ProductInterface $product, ProductExtensionInterface $extensionAttributes) { $associatedProductIds = $product->hasData('associated_product_ids') ? $product->getData('associated_product_ids') : []; $variationsMatrix = $this->getVariationMatrixFromProduct($product); if ($associatedProductIds || $variationsMatrix) { $this->variationHandler->prepareAttributeSet($product); } if (!empty($variationsMatrix)) { $generatedProductIds = $this->variationHandler->generateSimpleProducts($product, $variationsMatrix); $associatedProductIds = array_merge($associatedProductIds, $generatedProductIds); } $extensionAttributes->setConfigurableProductLinks(array_filter($associatedProductIds)); }
/** * @dataProvider productDataProviderForProcessMediaGalleryForFillingGallery * @param array $productData * @param array $expected */ public function testProcessMediaGalleryForFillingGallery($productData, $expected) { $this->assertEquals($expected, $this->model->processMediaGallery($this->product, $productData)); }