/** * @param string $productSku * @param int $productId * @param array $stockItemData * @param array $stockItemDetailsDoData * @param array $dataToSave * @param int $savedStockItemId * @dataProvider saveStockItemBySkuDataProvider */ public function testSaveStockItemBySku($productSku, $productId, $stockItemData, $stockItemDetailsDoData, $dataToSave, $savedStockItemId) { // 1. Create mocks /** @var \Magento\Catalog\Model\Product|\PHPUnit_Framework_MockObject_MockObject $product */ $product = $this->getMockBuilder('Magento\\Catalog\\Model\\Product')->disableOriginalConstructor()->getMock(); /** @var \Magento\CatalogInventory\Model\Stock\Item|\PHPUnit_Framework_MockObject_MockObject $stockItem */ $stockItem = $this->getMockBuilder('Magento\\CatalogInventory\\Model\\Stock\\Item')->disableOriginalConstructor()->getMock(); /** @var Data\StockItem|\PHPUnit_Framework_MockObject_MockObject $stockItemDataObject */ $stockItemDataObject = $this->getMockBuilder('Magento\\CatalogInventory\\Service\\V1\\Data\\StockItem')->disableOriginalConstructor()->getMock(); /** @var Data\StockItem|\PHPUnit_Framework_MockObject_MockObject $stockItemDataObjectMerged */ $stockItemDataObjectMerged = $this->getMockBuilder('Magento\\CatalogInventory\\Service\\V1\\Data\\StockItem')->disableOriginalConstructor()->getMock(); /** @var Data\StockItemDetails|\PHPUnit_Framework_MockObject_MockObject $stockItemDetailsDo */ $stockItemDetailsDo = $this->getMockBuilder('Magento\\CatalogInventory\\Service\\V1\\Data\\StockItemDetails')->disableOriginalConstructor()->getMock(); // 2. Set fixtures $product->expects($this->any())->method('getId')->will($this->returnValue($productId)); $stockItem->expects($this->any())->method('getData')->will($this->returnValue($stockItemData)); $stockItem->expects($this->any())->method('save')->will($this->returnSelf()); $stockItem->expects($this->any())->method('getId')->will($this->returnValue($savedStockItemId)); $this->productLoader->expects($this->any())->method('load')->will($this->returnValueMap([[$productSku, $product]])); $this->stockItemRegistry->expects($this->any())->method('retrieve')->will($this->returnValueMap([[$productId, $stockItem]])); $this->stockItemBuilder->expects($this->any())->method('create')->will($this->returnValue($stockItemDataObject)); $stockItemDetailsDo->expects($this->any())->method('__toArray')->will($this->returnValue($stockItemDetailsDoData)); $this->stockItemBuilder->expects($this->any())->method('mergeDataObjectWithArray')->will($this->returnValue($stockItemDataObjectMerged)); $stockItemDataObjectMerged->expects($this->any())->method('__toArray')->will($this->returnValue($dataToSave)); // 3. Set expectations $stockItem->expects($this->any())->method('setData')->with($dataToSave)->will($this->returnSelf()); $this->stockItemBuilder->expects($this->any())->method('populateWithArray')->with($stockItemData)->will($this->returnSelf()); // 4. Run tested method $result = $this->model->saveStockItemBySku($productSku, $stockItemDetailsDo); // 5. Compare actual result with expected result $this->assertEquals($savedStockItemId, $result); }
/** * @param string $productSku * @param \Magento\CatalogInventory\Service\V1\Data\StockItemDetails $stockItemDetailsDo * @return string * @throws \Magento\Framework\Exception\NoSuchEntityException */ public function saveStockItemBySku($productSku, Data\StockItemDetails $stockItemDetailsDo) { $product = $this->productLoader->load($productSku); if (!$product->getId()) { throw new NoSuchEntityException("Product with SKU \"{$productSku}\" does not exist"); } $stockItem = $this->stockItemRegistry->retrieve($product->getId()); $stockItemDo = $this->stockItemBuilder->populateWithArray($stockItem->getData())->create(); $dataToSave = $this->stockItemBuilder->mergeDataObjectWithArray($stockItemDo, $stockItemDetailsDo->__toArray())->__toArray(); return $stockItem->setData($dataToSave)->save()->getId(); }