SetOutOfStockToLegacyStockStatusAtSourceItemsDeleteTest.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. declare(strict_types=1);
  7. namespace Magento\InventoryCatalog\Test\Integration;
  8. use Magento\Catalog\Api\ProductRepositoryInterface;
  9. use Magento\CatalogInventory\Api\StockStatusCriteriaInterface;
  10. use Magento\CatalogInventory\Api\StockStatusCriteriaInterfaceFactory;
  11. use Magento\CatalogInventory\Api\StockStatusRepositoryInterface;
  12. use Magento\CatalogInventory\Model\Stock\Status;
  13. use Magento\Framework\Api\SearchCriteriaBuilder;
  14. use Magento\InventoryApi\Api\Data\SourceItemInterface;
  15. use Magento\InventoryApi\Api\SourceItemRepositoryInterface;
  16. use Magento\InventoryApi\Api\SourceItemsDeleteInterface;
  17. use Magento\InventoryCatalogApi\Api\DefaultSourceProviderInterface;
  18. use PHPUnit\Framework\TestCase;
  19. use Magento\TestFramework\Helper\Bootstrap;
  20. class SetOutOfStockToLegacyStockStatusAtSourceItemsDeleteTest extends TestCase
  21. {
  22. /**
  23. * @var ProductRepositoryInterface
  24. */
  25. private $productRepository;
  26. /**
  27. * @var StockStatusCriteriaInterfaceFactory
  28. */
  29. private $legacyStockStatusCriteriaFactory;
  30. /**
  31. * @var StockStatusRepositoryInterface
  32. */
  33. private $legacyStockStatusRepository;
  34. /**
  35. * @var SearchCriteriaBuilder
  36. */
  37. private $searchCriteriaBuilder;
  38. /**
  39. * @var SourceItemRepositoryInterface
  40. */
  41. private $sourceItemRepository;
  42. /**
  43. * @var SourceItemsDeleteInterface
  44. */
  45. private $sourceItemsDelete;
  46. /**
  47. * @var DefaultSourceProviderInterface
  48. */
  49. private $defaultSourceProvider;
  50. protected function setUp()
  51. {
  52. $this->productRepository = Bootstrap::getObjectManager()->get(ProductRepositoryInterface::class);
  53. $this->legacyStockStatusCriteriaFactory = Bootstrap::getObjectManager()->get(
  54. StockStatusCriteriaInterfaceFactory::class
  55. );
  56. $this->legacyStockStatusRepository = Bootstrap::getObjectManager()->get(StockStatusRepositoryInterface::class);
  57. $this->searchCriteriaBuilder = Bootstrap::getObjectManager()->get(SearchCriteriaBuilder::class);
  58. $this->sourceItemRepository = Bootstrap::getObjectManager()->get(SourceItemRepositoryInterface::class);
  59. $this->sourceItemsDelete = Bootstrap::getObjectManager()->get(SourceItemsDeleteInterface::class);
  60. $this->defaultSourceProvider = Bootstrap::getObjectManager()->get(DefaultSourceProviderInterface::class);
  61. }
  62. /**
  63. * @magentoDataFixture ../../../../app/code/Magento/InventoryApi/Test/_files/products.php
  64. * @magentoDataFixture ../../../../app/code/Magento/InventoryCatalog/Test/_files/source_items_on_default_source.php
  65. * @magentoDataFixture ../../../../app/code/Magento/InventoryIndexer/Test/_files/reindex_inventory.php
  66. */
  67. public function testSetOutOfStock()
  68. {
  69. $productSku = 'SKU-1';
  70. $product = $this->productRepository->get($productSku);
  71. $productId = $product->getId();
  72. $websiteId = 0;
  73. /** @var StockStatusCriteriaInterface $legacyStockStatusCriteria */
  74. $legacyStockStatusCriteria = $this->legacyStockStatusCriteriaFactory->create();
  75. $legacyStockStatusCriteria->setProductsFilter($productId);
  76. $legacyStockStatusCriteria->setScopeFilter($websiteId);
  77. $legacyStockStatuses = $this->legacyStockStatusRepository->getList($legacyStockStatusCriteria)->getItems();
  78. self::assertCount(1, $legacyStockStatuses);
  79. $legacyStockStatus = reset($legacyStockStatuses);
  80. self::assertEquals(Status::STATUS_IN_STOCK, $legacyStockStatus->getStockStatus());
  81. self::assertEquals(5.5, $legacyStockStatus->getQty());
  82. $searchCriteria = $this->searchCriteriaBuilder
  83. ->addFilter(SourceItemInterface::SKU, $productSku)
  84. ->addFilter(SourceItemInterface::SOURCE_CODE, $this->defaultSourceProvider->getCode())
  85. ->create();
  86. $sourceItems = $this->sourceItemRepository->getList($searchCriteria)->getItems();
  87. self::assertCount(1, $sourceItems);
  88. $this->sourceItemsDelete->execute($sourceItems);
  89. $legacyStockStatuses = $this->legacyStockStatusRepository->getList($legacyStockStatusCriteria)->getItems();
  90. self::assertCount(1, $legacyStockStatuses);
  91. $legacyStockStatus = reset($legacyStockStatuses);
  92. self::assertEquals(Status::STATUS_OUT_OF_STOCK, $legacyStockStatus->getStockStatus());
  93. self::assertEquals(0, $legacyStockStatus->getQty());
  94. }
  95. }