StockResolverTest.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  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\InventorySales\Test\Integration;
  8. use Magento\Framework\Exception\NoSuchEntityException;
  9. use Magento\Framework\ObjectManagerInterface;
  10. use Magento\InventoryApi\Api\Data\StockInterface;
  11. use Magento\InventoryApi\Api\StockRepositoryInterface;
  12. use Magento\InventorySalesApi\Api\Data\SalesChannelInterface;
  13. use Magento\InventorySalesApi\Api\Data\SalesChannelInterfaceFactory;
  14. use Magento\InventorySalesApi\Api\StockResolverInterface;
  15. use Magento\TestFramework\Helper\Bootstrap;
  16. use PHPUnit\Framework\TestCase;
  17. class StockResolverTest extends TestCase
  18. {
  19. /**
  20. * @var ObjectManagerInterface
  21. */
  22. private $objectManager;
  23. /**
  24. * @var StockRepositoryInterface
  25. */
  26. private $stockRepository;
  27. /**
  28. * @var SalesChannelInterfaceFactory
  29. */
  30. private $salesChannelFactory;
  31. /**
  32. * @var StockResolverInterface
  33. */
  34. private $stockResolverInterface;
  35. /**
  36. * Create objects.
  37. */
  38. protected function setUp()
  39. {
  40. $this->objectManager = Bootstrap::getObjectManager();
  41. $this->stockRepository = $this->objectManager->get(StockRepositoryInterface::class);
  42. $this->salesChannelFactory = $this->objectManager->get(SalesChannelInterfaceFactory::class);
  43. $this->stockResolverInterface = $this->objectManager->get(StockResolverInterface::class);
  44. }
  45. /**
  46. * Resolve stock and check data.
  47. *
  48. * @magentoDataFixture ../../../../app/code/Magento/InventorySalesApi/Test/_files/websites_with_stores.php
  49. * @magentoDataFixture ../../../../app/code/Magento/InventoryApi/Test/_files/stocks.php
  50. * @magentoDataFixture ../../../../app/code/Magento/InventorySalesApi/Test/_files/stock_website_sales_channels.php
  51. *
  52. * @magentoDbIsolation disabled
  53. */
  54. public function testExecute()
  55. {
  56. /** @var StockInterface $stock */
  57. $stock = $this->stockResolverInterface->execute(SalesChannelInterface::TYPE_WEBSITE, 'eu_website');
  58. $this->assertEquals(10, $stock->getStockId());
  59. $this->assertEquals('EU-stock', $stock->getName());
  60. $salesChannels = $stock->getExtensionAttributes()->getSalesChannels();
  61. $this->assertEquals(1, count($salesChannels));
  62. /** @var SalesChannelInterface $salesChannel */
  63. $salesChannel = $salesChannels[0];
  64. $this->assertEquals('website', $salesChannel->getType());
  65. $this->assertEquals('eu_website', $salesChannel->getCode());
  66. }
  67. /**
  68. * Resolve stock and check data after sales channels was changed.
  69. *
  70. * @magentoDataFixture ../../../../app/code/Magento/InventorySalesApi/Test/_files/websites_with_stores.php
  71. * @magentoDataFixture ../../../../app/code/Magento/InventoryApi/Test/_files/stocks.php
  72. * @magentoDataFixture ../../../../app/code/Magento/InventorySalesApi/Test/_files/stock_website_sales_channels.php
  73. *
  74. * @magentoDbIsolation disabled
  75. */
  76. public function testExecuteAfterChangeSalesChannelsTest()
  77. {
  78. $stockId = 20;
  79. /** @var StockInterface $stock */
  80. $stock = $this->stockResolverInterface->execute(SalesChannelInterface::TYPE_WEBSITE, 'us_website');
  81. $this->assertEquals($stockId, $stock->getStockId());
  82. $this->assertEquals('US-stock', $stock->getName());
  83. $salesChannels = $stock->getExtensionAttributes()->getSalesChannels();
  84. $this->assertEquals(1, count($salesChannels));
  85. /** @var SalesChannelInterface $salesChannel */
  86. $salesChannel = $salesChannels[0];
  87. $this->assertEquals('website', $salesChannel->getType());
  88. $this->assertEquals('us_website', $salesChannel->getCode());
  89. /** @var StockInterface $stock */
  90. $stock = $this->stockRepository->get($stockId);
  91. $salesChannel = $this->salesChannelFactory->create();
  92. $salesChannel->setCode('global_website');
  93. $salesChannel->setType(SalesChannelInterface::TYPE_WEBSITE);
  94. $stock->getExtensionAttributes()->setSalesChannels([$salesChannel]);
  95. $this->stockRepository->save($stock);
  96. $stock = $this->stockResolverInterface->execute(SalesChannelInterface::TYPE_WEBSITE, 'global_website');
  97. $this->assertEquals($stockId, $stock->getStockId());
  98. $this->assertEquals('US-stock', $stock->getName());
  99. $salesChannels = $stock->getExtensionAttributes()->getSalesChannels();
  100. $this->assertEquals(1, count($salesChannels));
  101. /** @var SalesChannelInterface $salesChannel */
  102. $salesChannel = $salesChannels[0];
  103. $this->assertEquals('website', $salesChannel->getType());
  104. $this->assertEquals('global_website', $salesChannel->getCode());
  105. }
  106. /**
  107. * Get error when try resolve stock.
  108. */
  109. public function testExecuteWithError()
  110. {
  111. try {
  112. $this->stockResolverInterface->execute(SalesChannelInterface::TYPE_WEBSITE, 'us_website');
  113. } catch (NoSuchEntityException $e) {
  114. $this->assertEquals('No linked stock found', $e->getMessage());
  115. }
  116. }
  117. }