Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
StockItemRepositoryTest.php
Go to the documentation of this file.
1 <?php
8 
9 use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory;
14 
18 class StockItemRepositoryTest extends \PHPUnit\Framework\TestCase
19 {
23  private $model;
24 
28  private $stockItemMock;
29 
33  private $stockConfigurationMock;
34 
38  private $productMock;
39 
43  private $stockStateProviderMock;
44 
48  private $stockItemResourceMock;
49 
53  private $stockItemFactoryMock;
54 
58  private $stockItemCollectionMock;
59 
63  private $productFactoryMock;
64 
68  private $queryBuilderFactoryMock;
69 
73  private $mapperMock;
74 
78  private $localeDateMock;
79 
83  private $indexProcessorMock;
84 
88  private $dateTime;
89 
93  private $stockRegistryStorage;
94 
98  protected function setUp()
99  {
100  $this->stockItemMock = $this->getMockBuilder(\Magento\CatalogInventory\Model\Stock\Item::class)
101  ->disableOriginalConstructor()
102  ->setMethods(
103  [
104  'getItemId',
105  'getProductId',
106  'setIsInStock',
107  'setStockStatusChangedAutomaticallyFlag',
108  'getStockStatusChangedAutomaticallyFlag',
109  'getManageStock',
110  'setLowStockDate',
111  'setStockStatusChangedAuto',
112  'hasStockStatusChangedAutomaticallyFlag',
113  'setQty',
114  'getWebsiteId',
115  'setWebsiteId',
116  'getStockId',
117  'setStockId'
118  ]
119  )
120  ->getMock();
121  $this->stockConfigurationMock = $this->getMockBuilder(
122  \Magento\CatalogInventory\Api\StockConfigurationInterface::class
123  )
124  ->disableOriginalConstructor()
125  ->getMock();
126  $this->stockStateProviderMock = $this->getMockBuilder(
127  \Magento\CatalogInventory\Model\Spi\StockStateProviderInterface::class
128  )
129  ->disableOriginalConstructor()
130  ->getMock();
131  $this->stockItemResourceMock = $this->getMockBuilder(
132  \Magento\CatalogInventory\Model\ResourceModel\Stock\Item::class
133  )
134  ->disableOriginalConstructor()
135  ->getMock();
136  $this->stockItemFactoryMock = $this->getMockBuilder(
137  \Magento\CatalogInventory\Api\Data\StockItemInterfaceFactory::class
138  )
139  ->setMethods(['create'])
140  ->disableOriginalConstructor()
141  ->getMock();
142  $this->stockItemCollectionMock = $this->getMockBuilder(
143  \Magento\CatalogInventory\Api\Data\StockItemCollectionInterfaceFactory::class
144  )
145  ->setMethods(['create'])
146  ->disableOriginalConstructor()
147  ->getMock();
148  $this->productFactoryMock = $this->getMockBuilder(\Magento\Catalog\Model\ProductFactory::class)
149  ->disableOriginalConstructor()
150  ->setMethods(['load', 'create'])
151  ->getMock();
152  $this->productMock = $this->getMockBuilder(\Magento\Catalog\Model\Product::class)
153  ->disableOriginalConstructor()
154  ->setMethods(['load', 'getId', 'getTypeId', '__wakeup'])
155  ->getMock();
156 
157  $this->productFactoryMock->expects($this->any())->method('create')->willReturn($this->productMock);
158 
159  $this->queryBuilderFactoryMock = $this->getMockBuilder(\Magento\Framework\DB\QueryBuilderFactory::class)
160  ->setMethods(['create'])
161  ->disableOriginalConstructor()
162  ->getMock();
163  $this->mapperMock = $this->getMockBuilder(\Magento\Framework\DB\MapperFactory::class)
164  ->disableOriginalConstructor()
165  ->getMock();
166  $this->localeDateMock = $this->getMockBuilder(\Magento\Framework\Stdlib\DateTime\TimezoneInterface::class)
167  ->disableOriginalConstructor()
168  ->getMock();
169  $this->indexProcessorMock = $this->createPartialMock(
170  \Magento\CatalogInventory\Model\Indexer\Stock\Processor::class,
171  ['reindexRow']
172  );
173  $this->dateTime = $this->createPartialMock(\Magento\Framework\Stdlib\DateTime\DateTime::class, ['gmtDate']);
174  $this->stockRegistryStorage = $this->getMockBuilder(StockRegistryStorage::class)
175  ->disableOriginalConstructor()
176  ->getMock();
177 
178  $productCollection = $this->getMockBuilder(
179  \Magento\Catalog\Model\ResourceModel\Product\Collection::class
180  )->disableOriginalConstructor()->getMock();
181 
182  $productCollection->expects($this->any())->method('setFlag')->willReturnSelf();
183  $productCollection->expects($this->any())->method('addIdFilter')->willReturnSelf();
184  $productCollection->expects($this->any())->method('addFieldToSelect')->willReturnSelf();
185  $productCollection->expects($this->any())->method('getFirstItem')->willReturn($this->productMock);
186 
187  $productCollectionFactory = $this->getMockBuilder(CollectionFactory::class)
188  ->setMethods(['create'])
189  ->disableOriginalConstructor()
190  ->getMock();
191 
192  $productCollectionFactory->expects($this->any())->method('create')->willReturn($productCollection);
193 
194  $this->model = (new ObjectManager($this))->getObject(
195  StockItemRepository::class,
196  [
197  'stockConfiguration' => $this->stockConfigurationMock,
198  'stockStateProvider' => $this->stockStateProviderMock,
199  'resource' => $this->stockItemResourceMock,
200  'stockItemFactory' => $this->stockItemFactoryMock,
201  'stockItemCollectionFactory' => $this->stockItemCollectionMock,
202  'productFactory' => $this->productFactoryMock,
203  'queryBuilderFactory' => $this->queryBuilderFactoryMock,
204  'mapperFactory' => $this->mapperMock,
205  'localeDate' => $this->localeDateMock,
206  'indexProcessor' => $this->indexProcessorMock,
207  'dateTime' => $this->dateTime,
208  'stockRegistryStorage' => $this->stockRegistryStorage,
209  'productCollectionFactory' => $productCollectionFactory,
210  ]
211  );
212  }
213 
214  public function testDelete()
215  {
216  $productId = 1;
217  $this->stockItemMock->expects($this->atLeastOnce())->method('getProductId')->willReturn($productId);
218  $this->stockRegistryStorage->expects($this->once())->method('removeStockItem')->with($productId);
219  $this->stockRegistryStorage->expects($this->once())->method('removeStockStatus')->with($productId);
220 
221  $this->stockItemResourceMock->expects($this->once())
222  ->method('delete')
223  ->with($this->stockItemMock)
224  ->willReturnSelf();
225 
226  $this->assertTrue($this->model->delete($this->stockItemMock));
227  }
228 
232  public function testDeleteException()
233  {
234  $this->stockItemResourceMock->expects($this->once())
235  ->method('delete')
236  ->with($this->stockItemMock)
237  ->willThrowException(new \Exception());
238 
239  $this->model->delete($this->stockItemMock);
240  }
241 
242  public function testDeleteById()
243  {
244  $id = 1;
245 
246  $this->stockItemFactoryMock->expects($this->once())->method('create')->willReturn($this->stockItemMock);
247  $this->stockItemResourceMock->expects($this->once())->method('load')->with($this->stockItemMock, $id);
248  $this->stockItemMock->expects($this->once())->method('getItemId')->willReturn($id);
249 
250  $this->assertTrue($this->model->deleteById($id));
251  }
252 
257  public function testDeleteByIdException()
258  {
259  $id = 1;
260 
261  $this->stockItemFactoryMock->expects($this->once())->method('create')->willReturn($this->stockItemMock);
262  $this->stockItemResourceMock->expects($this->once())->method('load')->with($this->stockItemMock, $id);
263  $this->stockItemMock->expects($this->once())->method('getItemId')->willReturn(null);
264 
265  $this->assertTrue($this->model->deleteById($id));
266  }
267 
268  public function testSave()
269  {
270  $productId = 1;
271 
272  $this->stockItemMock->expects($this->any())->method('getProductId')->willReturn($productId);
273  $this->productMock->expects($this->once())->method('getId')->willReturn($productId);
274  $this->productMock->expects($this->once())->method('getTypeId')->willReturn('typeId');
275  $this->stockConfigurationMock->expects($this->once())->method('isQty')->with('typeId')->willReturn(true);
276  $this->stockStateProviderMock->expects($this->once())
277  ->method('verifyStock')
278  ->with($this->stockItemMock)
279  ->willReturn(false);
280  $this->stockItemMock->expects($this->once())->method('getManageStock')->willReturn(true);
281  $this->stockItemMock->expects($this->once())->method('setIsInStock')->with(false)->willReturnSelf();
282  $this->stockItemMock->expects($this->once())
283  ->method('setStockStatusChangedAutomaticallyFlag')
284  ->with(true)
285  ->willReturnSelf();
286  $this->stockItemMock->expects($this->any())->method('setLowStockDate')->willReturnSelf();
287  $this->stockStateProviderMock->expects($this->once())
288  ->method('verifyNotification')
289  ->with($this->stockItemMock)
290  ->willReturn(true);
291  $this->dateTime->expects($this->once())
292  ->method('gmtDate');
293  $this->stockItemMock->expects($this->atLeastOnce())->method('setStockStatusChangedAuto')->willReturnSelf();
294  $this->stockItemMock->expects($this->once())
295  ->method('hasStockStatusChangedAutomaticallyFlag')
296  ->willReturn(true);
297  $this->stockItemMock->expects($this->once())
298  ->method('getStockStatusChangedAutomaticallyFlag')
299  ->willReturn(true);
300  $this->stockItemMock->expects($this->once())->method('getWebsiteId')->willReturn(1);
301  $this->stockItemMock->expects($this->once())->method('setWebsiteId')->with(1)->willReturnSelf();
302  $this->stockItemMock->expects($this->once())->method('getStockId')->willReturn(1);
303  $this->stockItemMock->expects($this->once())->method('setStockId')->with(1)->willReturnSelf();
304  $this->stockItemResourceMock->expects($this->once())
305  ->method('save')
306  ->with($this->stockItemMock)
307  ->willReturnSelf();
308 
309  $this->assertEquals($this->stockItemMock, $this->model->save($this->stockItemMock));
310  }
311 
312  public function testSaveWithoutProductId()
313  {
314  $productId = 1;
315 
316  $this->stockItemMock->expects($this->any())->method('getProductId')->willReturn($productId);
317  $this->productMock->expects($this->once())->method('getId')->willReturn(null);
318  $this->stockRegistryStorage->expects($this->never())->method('removeStockItem');
319  $this->stockRegistryStorage->expects($this->never())->method('removeStockStatus');
320 
321  $this->assertEquals($this->stockItemMock, $this->model->save($this->stockItemMock));
322  }
323 
327  public function testSaveException()
328  {
329  $productId = 1;
330 
331  $this->stockItemMock->expects($this->any())->method('getProductId')->willReturn($productId);
332  $this->productMock->expects($this->once())->method('getId')->willReturn($productId);
333  $this->productMock->expects($this->once())->method('getTypeId')->willReturn('typeId');
334  $this->stockConfigurationMock->expects($this->once())->method('isQty')->with('typeId')->willReturn(false);
335  $this->stockItemMock->expects($this->once())->method('setQty')->with(0)->willReturnSelf();
336  $this->stockItemMock->expects($this->once())->method('getWebsiteId')->willReturn(1);
337  $this->stockItemMock->expects($this->once())->method('setWebsiteId')->with(1)->willReturnSelf();
338  $this->stockItemMock->expects($this->once())->method('getStockId')->willReturn(1);
339  $this->stockItemMock->expects($this->once())->method('setStockId')->with(1)->willReturnSelf();
340  $this->stockItemResourceMock->expects($this->once())
341  ->method('save')
342  ->with($this->stockItemMock)
343  ->willThrowException(new \Exception());
344 
345  $this->model->save($this->stockItemMock);
346  }
347 
348  public function testGetList()
349  {
350  $criteriaMock = $this->getMockBuilder(\Magento\CatalogInventory\Api\StockItemCriteriaInterface::class)
351  ->getMock();
352  $queryBuilderMock = $this->getMockBuilder(\Magento\Framework\DB\QueryBuilder::class)
353  ->disableOriginalConstructor()
354  ->setMethods(['setCriteria', 'setResource', 'create'])
355  ->getMock();
356  $queryMock = $this->getMockBuilder(\Magento\Framework\DB\QueryInterface::class)
357  ->getMock();
358  $queryCollectionMock = $this->getMockBuilder(
359  \Magento\CatalogInventory\Api\Data\StockItemCollectionInterface::class
360  )->getMock();
361 
362  $this->queryBuilderFactoryMock->expects($this->once())->method('create')->willReturn($queryBuilderMock);
363  $queryBuilderMock->expects($this->once())->method('setCriteria')->with($criteriaMock)->willReturnSelf();
364  $queryBuilderMock->expects($this->once())
365  ->method('setResource')
366  ->with($this->stockItemResourceMock)
367  ->willReturnSelf();
368  $queryBuilderMock->expects($this->once())->method('create')->willReturn($queryMock);
369  $this->stockItemCollectionMock->expects($this->once())->method('create')->willReturn($queryCollectionMock);
370 
371  $this->assertEquals($queryCollectionMock, $this->model->getList($criteriaMock));
372  }
373 }
$id
Definition: fieldset.phtml:14