public function testSaveProductsForDuplicate() { $mainProduct = $this->getMockBuilder('Magento\\Catalog\\Model\\Product')->setMethods(['getIsDuplicate', '__sleep', '__wakeup', 'getTypeInstance', 'getConnection'])->disableOriginalConstructor()->getMock(); $mainProduct->expects($this->once())->method('getIsDuplicate')->will($this->returnValue(true)); $mainProduct->expects($this->never())->method('getTypeInstance')->will($this->returnSelf()); $this->configurable->saveProducts($mainProduct, [1, 2, 3]); }
public function testSaveProducts() { /** @var \Magento\Catalog\Model\Product|\PHPUnit_Framework_MockObject_MockObject $mainProduct */ $mainProduct = $this->getMockBuilder(\Magento\Catalog\Model\Product::class)->setMethods(['__sleep', '__wakeup', 'getData'])->disableOriginalConstructor()->getMock(); $this->metadataMock->expects($this->once())->method('getLinkField')->willReturn('link'); $mainProduct->expects($this->once())->method('getData')->with('link')->willReturn(3); $this->configurable->saveProducts($mainProduct, [1, 2, 3]); }
/** * @param \Magento\CatalogRule\Model\Rule $rule * @param array $productIds * @return array */ public function afterGetMatchingProductIds(\Magento\CatalogRule\Model\Rule $rule, array $productIds) { $configurableProductIds = $this->configurableProductsProvider->getIds(array_keys($productIds)); foreach ($configurableProductIds as $productId) { $subProductsIds = $this->configurable->getChildrenIds($productId)[0]; $parentValidationResult = $productIds[$productId]; foreach ($subProductsIds as $subProductsId) { $productIds[$subProductsId] = $this->getSubProductValidationResult($rule->getId(), $subProductsId, $parentValidationResult); } unset($productIds[$productId]); } return $productIds; }
/** * {@inheritdoc} */ public function addChild($sku, $childSku) { $product = $this->productRepository->get($sku); $child = $this->productRepository->get($childSku); $childrenIds = array_values($this->configurableType->getChildrenIds($product->getId())[0]); if (in_array($child->getId(), $childrenIds)) { throw new StateException(__('Product has been already attached')); } $childrenIds[] = $child->getId(); $product->setAssociatedProductIds($childrenIds); $product->save(); return true; }
public function testSaveProducts() { /** @var \Magento\Catalog\Model\Product|\PHPUnit_Framework_MockObject_MockObject $mainProduct */ $mainProduct = $this->getMockBuilder(\Magento\Catalog\Model\Product::class)->setMethods(['__sleep', '__wakeup', 'getData'])->disableOriginalConstructor()->getMock(); $this->metadataMock->expects($this->once())->method('getLinkField')->willReturn('link'); $mainProduct->expects($this->once())->method('getData')->with('link')->willReturn(3); $select = $this->getMockBuilder(Select::class)->disableOriginalConstructor()->getMock(); $this->connection->method('select')->willReturn($select); $select->method('from')->willReturnSelf(); $select->method('where')->willReturnSelf(); $statement = $this->getMockBuilder(\Zend_Db_Statement::class)->disableOriginalConstructor()->getMock(); $select->method('query')->willReturn($statement); $statement->method('fetchAll')->willReturn([1]); $this->configurable->saveProducts($mainProduct, [1, 2, 3]); }
/** * @covers \Magento\ConfigurableProduct\Model\Product\SaveHandler::execute */ public function testExecute() { $attributeId = 90; $sku = 'config-1'; $id = 25; $configurableProductLinks = [1, 2, 3]; $product = $this->getMockBuilder(Product::class)->disableOriginalConstructor()->setMethods(['getTypeId', 'getSku', 'getData', 'getExtensionAttributes'])->getMock(); $product->expects(static::once())->method('getTypeId')->willReturn(ConfigurableModel::TYPE_CODE); $product->expects(static::exactly(2))->method('getSku')->willReturn($sku); $extensionAttributes = $this->getMockBuilder(ProductExtensionAttributes::class)->setMethods(['getConfigurableProductOptions', 'getConfigurableProductLinks'])->disableOriginalConstructor()->getMockForAbstractClass(); $product->expects(static::once())->method('getExtensionAttributes')->willReturn($extensionAttributes); $attribute = $this->getMockBuilder(Attribute::class)->disableOriginalConstructor()->setMethods(['getAttributeId', 'loadByProductAndAttribute'])->getMock(); $this->processSaveOptions($attribute, $product, $attributeId, $sku, $id); $option = $this->getMockForAbstractClass(OptionInterface::class); $option->expects(static::once())->method('getId')->willReturn($id); $list = [$option]; $this->optionRepository->expects(static::once())->method('getList')->with($sku)->willReturn($list); $this->optionRepository->expects(static::never())->method('deleteById'); $configurableAttributes = [$attribute]; $extensionAttributes->expects(static::once())->method('getConfigurableProductOptions')->willReturn($configurableAttributes); $extensionAttributes->expects(static::once())->method('getConfigurableProductLinks')->willReturn($configurableProductLinks); $this->configurable->expects(static::once())->method('saveProducts')->with($product, $configurableProductLinks); $entity = $this->saveHandler->execute('Entity', $product); static::assertSame($product, $entity); }
/** * @param \Magento\CatalogRule\Model\Rule $rule * @param array $productIds * @return array * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function afterGetMatchingProductIds(\Magento\CatalogRule\Model\Rule $rule, array $productIds) { $configurableProductIds = $this->configurableProductsProvider->getIds(array_keys($productIds)); foreach ($configurableProductIds as $productId) { if (!isset($this->childrenProducts[$productId])) { $this->childrenProducts[$productId] = $this->configurable->getChildrenIds($productId)[0]; } $subProductIds = $this->childrenProducts[$productId]; $parentValidationResult = isset($productIds[$productId]) ? array_filter($productIds[$productId]) : []; foreach ($subProductIds as $subProductId) { $childValidationResult = isset($productIds[$subProductId]) ? array_filter($productIds[$subProductId]) : []; $productIds[$subProductId] = $parentValidationResult + $childValidationResult; } unset($productIds[$productId]); } return $productIds; }
/** * @param ProductInterface $entity * @param array $arguments * @return ProductInterface * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function execute($entity, $arguments = []) { if ($entity->getTypeId() !== Configurable::TYPE_CODE) { return $entity; } $extensionAttributes = $entity->getExtensionAttributes(); if ($extensionAttributes === null) { return $entity; } if ($extensionAttributes->getConfigurableProductOptions() !== null) { $this->deleteConfigurableProductAttributes($entity); } $configurableOptions = (array) $extensionAttributes->getConfigurableProductOptions(); if (!empty($configurableOptions)) { $this->saveConfigurableProductAttributes($entity, $configurableOptions); } $configurableLinks = (array) $extensionAttributes->getConfigurableProductLinks(); $this->resourceModel->saveProducts($entity, $configurableLinks); return $entity; }
/** * {@inheritdoc} */ public function delete(OptionInterface $option) { $product = $this->getProductById($option->getProductId()); try { $this->configurableTypeResource->saveProducts($product, []); } catch (\Exception $exception) { throw new StateException(__('Cannot delete variations from product: %1', $option->getProductId())); } try { $this->optionResource->delete($option); } catch (\Exception $exception) { throw new StateException(__('Cannot delete option with id: %1', $option->getId())); } return true; }
/** * @return void */ public function testAfterGetMatchingProductIdsWithConfigurableProduct() { $this->configurableProductsProviderMock->expects($this->once())->method('getIds')->willReturn(['conf1', 'conf2']); $this->configurableMock->expects($this->any())->method('getChildrenIds')->willReturnMap([['conf1', true, [0 => ['simple1']]], ['conf2', true, [0 => ['simple1', 'simple2']]]]); $this->assertEquals(['simple1' => [0 => true, 1 => true, 3 => true, 4 => false], 'simple2' => [0 => false, 1 => false, 3 => true, 4 => false]], $this->configurableProductHandler->afterGetMatchingProductIds($this->ruleMock, ['conf1' => [0 => true, 1 => true], 'conf2' => [0 => false, 1 => false, 3 => true, 4 => false]])); }
/** * Prepare and retrieve options values with product data * * @param \Magento\Catalog\Model\Product $product * @return array */ public function getConfigurableOptions($product) { return $this->_catalogProductTypeConfigurable->getConfigurableOptions($product, $this->getUsedProductAttributes($product)); }