/** * Test hasRedirectOptions * * @dataProvider redirectOptionsDataProvider */ public function testHasRedirectOptions($option, $expected) { $optionsMock = $this->getMock('Magento\\UrlRewrite\\Model\\UrlRewrite\\OptionProvider', array('getRedirectOptions'), array(), '', false, false); $optionsMock->expects($this->any())->method('getRedirectOptions')->will($this->returnValue(array('R', 'RP'))); $helper = new \Magento\UrlRewrite\Helper\UrlRewrite($this->getMock('Magento\\Framework\\App\\Helper\\Context', array(), array(), '', false, false), $optionsMock); $mockObject = new \Magento\Framework\Object(); $mockObject->setOptions($option); $this->assertEquals($expected, $helper->hasRedirectOptions($mockObject)); }
/** * Parse buyRequest into options values used by product * * @param \Magento\Framework\Object $buyRequest * @return \Magento\Framework\Object */ public function processBuyRequest(\Magento\Framework\Object $buyRequest) { $options = new \Magento\Framework\Object(); /* add product custom options data */ $customOptions = $buyRequest->getOptions(); if (is_array($customOptions)) { array_filter($customOptions, function ($value) { return $value !== ''; }); $options->setOptions($customOptions); } /* add product type selected options data */ $type = $this->getTypeInstance(); $typeSpecificOptions = $type->processBuyRequest($this, $buyRequest); $options->addData($typeSpecificOptions); /* check correctness of product's options */ $options->setErrors($type->checkProductConfiguration($this, $buyRequest)); return $options; }
/** * Move quote item to another items list * * @param int|\Magento\Sales\Model\Quote\Item $item * @param string $moveTo * @param int $qty * @return $this * @throws \Magento\Framework\Model\Exception */ public function moveQuoteItem($item, $moveTo, $qty) { $item = $this->_getQuoteItem($item); if ($item) { $removeItem = false; $moveTo = explode('_', $moveTo); switch ($moveTo[0]) { case 'order': $info = $item->getBuyRequest(); $info->setOptions($this->_prepareOptionsForRequest($item))->setQty($qty); $product = $this->_objectManager->create('Magento\\Catalog\\Model\\Product')->setStoreId($this->getQuote()->getStoreId())->load($item->getProduct()->getId()); $product->setSkipCheckRequiredOption(true); $newItem = $this->getQuote()->addProduct($product, $info); if (is_string($newItem)) { throw new \Magento\Framework\Model\Exception($newItem); } $product->unsSkipCheckRequiredOption(); $newItem->checkData(); $this->_needCollectCart = true; break; case 'cart': $cart = $this->getCustomerCart(); if ($cart && is_null($item->getOptionByCode('additional_options'))) { //options and info buy request $product = $this->_objectManager->create('Magento\\Catalog\\Model\\Product')->setStoreId($this->getQuote()->getStoreId())->load($item->getProduct()->getId()); $info = $item->getOptionByCode('info_buyRequest'); if ($info) { $info = new \Magento\Framework\Object(unserialize($info->getValue())); $info->setQty($qty); $info->setOptions($this->_prepareOptionsForRequest($item)); } else { $info = new \Magento\Framework\Object(array('product_id' => $product->getId(), 'qty' => $qty, 'options' => $this->_prepareOptionsForRequest($item))); } $cartItem = $cart->addProduct($product, $info); if (is_string($cartItem)) { throw new \Magento\Framework\Model\Exception($cartItem); } $cartItem->setPrice($item->getProduct()->getPrice()); $this->_needCollectCart = true; $removeItem = true; } break; case 'wishlist': $wishlist = null; if (!isset($moveTo[1])) { $wishlist = $this->_objectManager->create('Magento\\Wishlist\\Model\\Wishlist')->loadByCustomerId($this->getSession()->getCustomerId(), true); } else { $wishlist = $this->_objectManager->create('Magento\\Wishlist\\Model\\Wishlist')->load($moveTo[1]); if (!$wishlist->getId() || $wishlist->getCustomerId() != $this->getSession()->getCustomerId()) { $wishlist = null; } } if (!$wishlist) { throw new \Magento\Framework\Model\Exception(__('We couldn\'t find this wish list.')); } $wishlist->setStore($this->getSession()->getStore())->setSharedStoreIds($this->getSession()->getStore()->getWebsite()->getStoreIds()); if ($wishlist->getId() && $item->getProduct()->isVisibleInSiteVisibility()) { $info = $item->getBuyRequest(); $info->setOptions($this->_prepareOptionsForRequest($item))->setQty($qty)->setStoreId($this->getSession()->getStoreId()); $wishlist->addNewItem($item->getProduct(), $info); $removeItem = true; } break; case 'remove': $removeItem = true; break; default: break; } if ($removeItem) { $this->getQuote()->deleteItem($item); } $this->setRecollect(true); } return $this; }