AssignWebsiteToDefaultStockTest.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  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\Website;
  8. use Magento\InventoryApi\Api\StockRepositoryInterface;
  9. use Magento\InventoryCatalogApi\Api\DefaultStockProviderInterface;
  10. use Magento\InventorySalesApi\Api\Data\SalesChannelInterface;
  11. use Magento\Store\Model\StoreManagerInterface;
  12. use Magento\Store\Model\Website;
  13. use Magento\Store\Model\WebsiteFactory;
  14. use Magento\TestFramework\Helper\Bootstrap;
  15. use PHPUnit\Framework\TestCase;
  16. use Magento\Framework\Registry;
  17. class AssignWebsiteToDefaultStockTest extends TestCase
  18. {
  19. /**
  20. * @var WebsiteFactory
  21. */
  22. private $websiteFactory;
  23. /**
  24. * @var StockRepositoryInterface
  25. */
  26. private $stockRepository;
  27. /**
  28. * @var DefaultStockProviderInterface
  29. */
  30. private $defaultStockProvider;
  31. /**
  32. * @var StoreManagerInterface
  33. */
  34. private $storeManager;
  35. /**
  36. * @var Registry
  37. */
  38. private $registry;
  39. protected function setUp()
  40. {
  41. $this->websiteFactory = Bootstrap::getObjectManager()->get(WebsiteFactory::class);
  42. $this->stockRepository = Bootstrap::getObjectManager()->get(StockRepositoryInterface::class);
  43. $this->defaultStockProvider = Bootstrap::getObjectManager()->get(DefaultStockProviderInterface::class);
  44. $this->storeManager = Bootstrap::getObjectManager()->get(StoreManagerInterface::class);
  45. $this->registry = Bootstrap::getObjectManager()->get(Registry::class);
  46. }
  47. public function testThatMainWebsiteIsAssignedToDefaultStock()
  48. {
  49. $websiteCode = $this->storeManager->getWebsite()->getCode();
  50. $defaultStockId = $this->defaultStockProvider->getId();
  51. $defaultStock = $this->stockRepository->get($defaultStockId);
  52. $extensionAttributes = $defaultStock->getExtensionAttributes();
  53. $salesChannels = $extensionAttributes->getSalesChannels();
  54. self::assertContainsOnlyInstancesOf(SalesChannelInterface::class, $salesChannels);
  55. self::assertCount(1, $salesChannels);
  56. $salesChannel = reset($salesChannels);
  57. self::assertEquals($websiteCode, $salesChannel->getCode());
  58. self::assertEquals(SalesChannelInterface::TYPE_WEBSITE, $salesChannel->getType());
  59. }
  60. /**
  61. * If test has not fixture then magentoDbIsolation will be disabled
  62. * @magentoDbIsolation enabled
  63. */
  64. public function testThatNewWebsiteWillBeAssignedToDefaultStock()
  65. {
  66. $websiteCode = 'test_1';
  67. /** @var Website $website */
  68. $website = $this->websiteFactory->create();
  69. $website->setCode($websiteCode);
  70. // Use website model because we haven't api interfaces for website saving
  71. $website->save();
  72. $defaultStockId = $this->defaultStockProvider->getId();
  73. $defaultStock = $this->stockRepository->get($defaultStockId);
  74. $extensionAttributes = $defaultStock->getExtensionAttributes();
  75. $salesChannels = $extensionAttributes->getSalesChannels();
  76. self::assertContainsOnlyInstancesOf(SalesChannelInterface::class, $salesChannels);
  77. $salesChannelsOfCreatedWebsite = array_filter($salesChannels, function ($salesChannel) use ($websiteCode) {
  78. return $salesChannel->getCode() === $websiteCode;
  79. });
  80. self::assertCount(1, $salesChannelsOfCreatedWebsite);
  81. $salesChannelOfCreatedWebsite = reset($salesChannelsOfCreatedWebsite);
  82. self::assertEquals($website->getCode(), $salesChannelOfCreatedWebsite->getCode());
  83. self::assertEquals(SalesChannelInterface::TYPE_WEBSITE, $salesChannelOfCreatedWebsite->getType());
  84. $this->deleteWebsite($website);
  85. }
  86. /**
  87. * @param Website $website
  88. * @return void
  89. */
  90. private function deleteWebsite(Website $website)
  91. {
  92. $this->registry->unregister('isSecureArea');
  93. $this->registry->register('isSecureArea', true);
  94. $website->delete();
  95. $this->registry->unregister('isSecureArea');
  96. $this->registry->register('isSecureArea', false);
  97. }
  98. }