/**
  * @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);
 }
Exemplo n.º 2
0
 /**
  * @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();
 }