/** * Initialize quote item object * * @param \Magento\Framework\Object $request * @param Product $product * * @return \Magento\Quote\Model\Quote\Item */ public function init(Product $product, $request) { $item = $this->quoteItemFactory->create(); $this->setItemStoreId($item); /** * We can't modify existing child items */ if ($item->getId() && $product->getParentProductId()) { return $item; } $item->setOptions($product->getCustomOptions()); $item->setProduct($product); if ($request->getResetCount() && !$product->getStickWithinParent() && $item->getId() === $request->getId()) { $item->setData('qty', 0); } return $item; }
/** * @covers \Magento\Catalog\Model\Product::addCustomOption * @covers \Magento\Catalog\Model\Product::setCustomOptions * @covers \Magento\Catalog\Model\Product::getCustomOptions * @covers \Magento\Catalog\Model\Product::getCustomOption * @covers \Magento\Catalog\Model\Product::hasCustomOptions */ public function testCustomOptionsApi() { $this->assertEquals([], $this->_model->getCustomOptions()); $this->assertFalse($this->_model->hasCustomOptions()); $this->_model->setId(99); $this->_model->addCustomOption('one', 'value1'); $option = $this->_model->getCustomOption('one'); $this->assertInstanceOf('Magento\\Framework\\DataObject', $option); $this->assertEquals($this->_model->getId(), $option->getProductId()); $this->assertSame($option->getProduct(), $this->_model); $this->assertEquals('one', $option->getCode()); $this->assertEquals('value1', $option->getValue()); $this->assertEquals(['one' => $option], $this->_model->getCustomOptions()); $this->assertTrue($this->_model->hasCustomOptions()); $this->_model->setCustomOptions(['test']); $this->assertTrue(is_array($this->_model->getCustomOptions())); }
/** * Check product representation in item * * @param \Magento\Catalog\Model\Product $product * @return bool */ public function representProduct($product) { $itemProduct = $this->getProduct(); if (!$product || $itemProduct->getId() != $product->getId()) { return false; } /** * Check maybe product is planned to be a child of some quote item - in this case we limit search * only within same parent item */ $stickWithinParent = $product->getStickWithinParent(); if ($stickWithinParent) { if ($this->getParentItem() !== $stickWithinParent) { return false; } } // Check options $itemOptions = $this->getOptionsByCode(); $productOptions = $product->getCustomOptions(); if (!$this->compareOptions($itemOptions, $productOptions)) { return false; } if (!$this->compareOptions($productOptions, $itemOptions)) { return false; } return true; }
/** * Check product representation in item * * @param \Magento\Catalog\Model\Product $product * @return bool */ public function representProduct($product) { $itemProduct = $this->getProduct(); if ($itemProduct->getId() != $product->getId()) { return false; } $itemOptions = $this->getOptionsByCode(); $productOptions = $product->getCustomOptions(); if (!$this->compareOptions($itemOptions, $productOptions)) { return false; } if (!$this->compareOptions($productOptions, $itemOptions)) { return false; } return true; }
/** * {@inheritdoc} */ public function getCustomOptions() { $pluginInfo = $this->pluginList->getNext($this->subjectType, 'getCustomOptions'); if (!$pluginInfo) { return parent::getCustomOptions(); } else { return $this->___callPlugins('getCustomOptions', func_get_args(), $pluginInfo); } }