public function testSaveStockItem() { $productId = 123; $stockItemData = ['some_key' => 'someValue']; $stockItemDo = $this->getMockBuilder('Magento\\CatalogInventory\\Service\\V1\\Data\\StockItem')->disableOriginalConstructor()->getMock(); $stockItemDo->expects($this->any())->method('getProductId')->will($this->returnValue($productId)); $stockItemDo->expects($this->once())->method('__toArray')->will($this->returnValue($stockItemData)); $stockItemModel = $this->getMockBuilder('Magento\\CatalogInventory\\Model\\Stock\\Item')->disableOriginalConstructor()->getMock(); $stockItemModel->expects($this->once())->method('setData')->with($stockItemData); $stockItemModel->expects($this->once())->method('save'); $this->stockItemRegistry->expects($this->once())->method('retrieve')->with($productId)->will($this->returnValue($stockItemModel)); $this->stockItemRegistry->expects($this->once())->method('erase')->with($productId)->will($this->returnValue($stockItemModel)); $this->assertEquals($this->model, $this->model->saveStockItem($stockItemDo)); }
/** * Prepare stock item data for save * * @param \Magento\Catalog\Model\Product $product * @return $this */ protected function saveStockItemData($product) { $stockItemData = $product->getStockData(); $stockItemData['product_id'] = $product->getId(); /** * @todo Should be refactored together with \Magento\CatalogInventory\Model\Stock\Item::getStockId */ $stockItemData['stock_id'] = \Magento\CatalogInventory\Model\Stock\Item::DEFAULT_STOCK_ID; foreach ($this->paramListToCheck as $dataKey => $configPath) { if (null !== $product->getData($configPath['item']) && null === $product->getData($configPath['config'])) { $stockItemData[$dataKey] = false; } } $originalQty = $product->getData('stock_data/original_inventory_qty'); if (strlen($originalQty) > 0) { $stockItemData['qty_correction'] = $stockItemData['qty'] - $originalQty; } $stockItemDo = $this->stockItemService->getStockItem($product->getId()); $this->stockItemService->saveStockItem($this->stockItemBuilder->mergeDataObjectWithArray($stockItemDo, $stockItemData)); return $this; }