public function testAfterLoadWithExistingExtensionAttributes()
 {
     // test when extension attributes already exist
     $this->productMock->expects($this->once())->method('getExtensionAttributes')->willReturn($this->productExtensionMock);
     $this->productExtensionFactoryMock->expects($this->never())->method('create');
     $this->assertEquals($this->productMock, $this->plugin->afterLoad($this->productMock));
 }
 /**
  * Add stock item information to the product's extension attributes
  *
  * @param \Magento\Catalog\Model\Product $product
  * @return \Magento\Catalog\Model\Product
  */
 public function afterLoad(\Magento\Catalog\Model\Product $product)
 {
     $productExtension = $product->getExtensionAttributes();
     if ($productExtension === null) {
         $productExtension = $this->productExtensionFactory->create();
     }
     // stockItem := \Magento\CatalogInventory\Api\Data\StockItemInterface
     $productExtension->setStockItem($this->stockRegistry->getStockItem($product->getId()));
     $product->setExtensionAttributes($productExtension);
     return $product;
 }
 /**
  * @param \Magento\Catalog\Model\Product $subject
  * @param callable $proceed
  * @param int $modelId
  * @param null $field
  * @return \Magento\Catalog\Model\Product
  * @SuppressWarnings(PHPMD.UnusedFormalParameter)
  */
 public function aroundLoad(\Magento\Catalog\Model\Product $subject, \Closure $proceed, $modelId, $field = null)
 {
     /** @var \Magento\Catalog\Model\Product $product */
     $product = $proceed($modelId, $field);
     if ($product->getTypeId() != \Magento\Catalog\Model\Product\Type::TYPE_BUNDLE) {
         return $product;
     }
     $productExtension = $this->productExtensionFactory->create();
     $productExtension->setBundleProductOptions($this->productOptionList->getItems($product));
     $product->setExtensionAttributes($productExtension);
     return $product;
 }
 /**
  * @param \Magento\Catalog\Model\Product $product
  * @return \Magento\Catalog\Model\Product
  */
 public function afterLoad(\Magento\Catalog\Model\Product $product)
 {
     if ($product->getTypeId() != \Magento\ConfigurableProduct\Model\Product\Type\Configurable::TYPE_CODE) {
         return $product;
     }
     $productExtension = $product->getExtensionAttributes();
     if ($productExtension === null) {
         $productExtension = $this->productExtensionFactory->create();
     }
     $productExtension->setConfigurableProductOptions($this->getOptions($product));
     $productExtension->setConfigurableProductLinks($this->getLinkedProducts($product));
     $product->setExtensionAttributes($productExtension);
     return $product;
 }
 /**
  *
  * Creates a configurable product with child simple products
  *
  * @throws \Exception
  */
 public function createConfigurableProduct()
 {
     if ($this->processedProducts >= $this->getCount()) {
         return;
     }
     $configurableAttribute = $this->attributeRepository->get(self::CONFIGURABLE_ATTRIBUTE);
     if (null == $configurableAttribute) {
         throw new \Exception("Selected configurable attribute {self::CONFIGURABLE_ATTRIBUTE} is not available");
     }
     $childProductsData = $this->createConfigurableChildren($configurableAttribute);
     /** @var \Magento\Catalog\Model\Product $configurableProduct */
     $configurableProduct = $this->objectManager->create('Magento\\Catalog\\Model\\Product');
     $configurableProduct->setStoreId(self::DEFAULT_STORE_ID)->setTypeId('configurable')->setAttributeSetId(self::ATTRIBUTE_SET)->setName(self::NAMES_PREFIX . $this->titlesGenerator->generateProductTitle() . ' configurable')->setPrice(self::DEFAULT_PRODUCT_PRICE)->setWeight(self::DEFAULT_PRODUCT_WEIGHT)->setSku(uniqid())->setCategoriesIds([$this->getProductCategory()]);
     $configurableOption = $this->configurableOption;
     $configurableOption->setAttributeId($configurableAttribute->getAttributeId())->setLabel('Color')->setValues($childProductsData['configurable_options_values']);
     $extensionAttributes = $configurableProduct->getExtensionAttributes();
     if (!$extensionAttributes) {
         $extensionAttributes = $this->productExtensionFactory->create();
     }
     $extensionAttributes->setConfigurableProductLinks($childProductsData['child_products_ids']);
     $extensionAttributes->setConfigurableProductOptions([$configurableOption]);
     $configurableProduct->setExtensionAttributes($extensionAttributes);
     $this->productRepository->save($configurableProduct);
     $this->processedProducts++;
 }
 /**
  * @param \Magento\Catalog\Model\Product $product
  * @return \Magento\Catalog\Model\Product
  */
 public function afterLoad(\Magento\Catalog\Model\Product $product)
 {
     if ($product->getTypeId() != \Magento\Downloadable\Model\Product\Type::TYPE_DOWNLOADABLE) {
         return $product;
     }
     $productExtension = $product->getExtensionAttributes() ?: $this->productExtensionFactory->create();
     $links = $this->linkRepository->getLinksByProduct($product);
     if ($links !== null) {
         $productExtension->setDownloadableProductLinks($links);
     }
     $samples = $this->sampleRepository->getSamplesByProduct($product);
     if ($samples !== null) {
         $productExtension->setDownloadableProductSamples($samples);
     }
     $product->setExtensionAttributes($productExtension);
     return $product;
 }