Beispiel #1
0
 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;
 }
Beispiel #8
0
 /**
  * @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));
 }