Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
BackorderConditionTest.php
Go to the documentation of this file.
1 <?php
6 declare(strict_types=1);
7 
9 
11 use Magento\CatalogInventory\Api\StockItemCriteriaInterfaceFactory;
19 use PHPUnit\Framework\TestCase;
20 
25 class BackorderConditionTest extends TestCase
26 {
30  private $getStockItemData;
31 
35  private $productRepository;
36 
40  private $stockItemRepository;
41 
45  private $stockItemCriteriaFactory;
46 
50  private $sourceItemsSave;
51 
55  private $sourceItemRepository;
56 
60  private $searchCriteriaBuilder;
61 
65  protected function setUp()
66  {
67  parent::setUp();
68 
69  $this->getStockItemData = Bootstrap::getObjectManager()->get(GetStockItemDataInterface::class);
70  $this->productRepository = Bootstrap::getObjectManager()->get(ProductRepositoryInterface::class);
71  $this->stockItemRepository = Bootstrap::getObjectManager()->get(StockItemRepositoryInterface::class);
72  $this->stockItemCriteriaFactory = Bootstrap::getObjectManager()->get(
73  StockItemCriteriaInterfaceFactory::class
74  );
75  $this->sourceItemRepository = Bootstrap::getObjectManager()->get(SourceItemRepositoryInterface::class);
76  $this->searchCriteriaBuilder = Bootstrap::getObjectManager()->get(SearchCriteriaBuilder::class);
77  $this->sourceItemsSave = Bootstrap::getObjectManager()->get(SourceItemsSaveInterface::class);
78  }
79 
96  public function testBackordersDisabled(string $sku, int $stockId, $expectedData)
97  {
98  $stockItemData = $this->getStockItemData->execute($sku, $stockId);
99 
100  self::assertEquals($expectedData, $stockItemData);
101  }
102 
119  public function testGlobalBackordersEnabled(string $sku, int $stockId, $expectedData)
120  {
121  $stockItemData = $this->getStockItemData->execute($sku, $stockId);
122 
123  self::assertEquals($expectedData, $stockItemData);
124  }
125 
142  public function testStockItemBackordersDisabled(string $sku, int $stockId, $expectedData)
143  {
144  $this->setStockItemBackorders($sku, 0);
145 
146  $stockItemData = $this->getStockItemData->execute($sku, $stockId);
147 
148  self::assertEquals($expectedData, $stockItemData);
149  }
150 
167  public function testStockItemBackordersEnabled(string $sku, int $stockId, $expectedData)
168  {
169  $this->setStockItemBackorders($sku, 1);
170 
171  $stockItemData = $this->getStockItemData->execute($sku, $stockId);
172 
173  self::assertEquals($expectedData, $stockItemData);
174  }
175 
181  public function backordersEnabledDataProvider(): array
182  {
183  return [
185  ['SKU-2', 10, null],
187  ];
188  }
189 
195  public function backordersDisabledDataProvider(): array
196  {
197  return [
199  ['SKU-2', 10, null],
201  ];
202  }
203 
210  private function setStockItemBackorders(string $sku, int $backordersStatus): void
211  {
212  $product = $this->productRepository->get($sku);
213  $stockItemSearchCriteria = $this->stockItemCriteriaFactory->create();
214  $stockItemSearchCriteria->setProductsFilter($product->getId());
215  $stockItemsCollection = $this->stockItemRepository->getList($stockItemSearchCriteria);
216 
218  $legacyStockItem = current($stockItemsCollection->getItems());
219  $legacyStockItem->setBackorders($backordersStatus);
220  $legacyStockItem->setUseConfigBackorders(0);
221  $this->stockItemRepository->save($legacyStockItem);
222 
223  $sourceItem = $this->getSourceItemBySku($sku);
224  $this->sourceItemsSave->execute([$sourceItem]);
225  }
226 
233  private function getSourceItemBySku(string $sku): SourceItemInterface
234  {
235  $searchCriteria = $this->searchCriteriaBuilder
236  ->addFilter('sku', $sku)
237  ->create();
238  $sourceItemSearchResult = $this->sourceItemRepository->getList($searchCriteria);
239 
240  return current($sourceItemSearchResult->getItems());
241  }
242 }
$searchCriteria