Skip to content

Commit cab49b4

Browse files
committed
Merge branch 'MC-35964' into 2.4-develop-com-pr14
2 parents 74c8eff + b8ed014 commit cab49b4

File tree

6 files changed

+371
-36
lines changed

6 files changed

+371
-36
lines changed

dev/tests/integration/testsuite/Magento/Catalog/_files/products_with_websites_and_stores.php

Lines changed: 42 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3,40 +3,59 @@
33
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6+
declare(strict_types=1);
7+
8+
use Magento\Catalog\Api\ProductRepositoryInterface;
9+
use Magento\Catalog\Helper\DefaultCategory;
10+
use Magento\Catalog\Model\Product\Attribute\Source\Status;
11+
use Magento\Catalog\Model\Product\Type;
12+
use Magento\Catalog\Model\Product\Visibility;
13+
use Magento\Catalog\Model\ProductFactory;
14+
use Magento\Store\Api\WebsiteRepositoryInterface;
15+
use Magento\TestFramework\Helper\Bootstrap;
616
use Magento\TestFramework\Workaround\Override\Fixture\Resolver;
717

818
Resolver::getInstance()->requireDataFixture('Magento/Store/_files/second_website_with_two_stores.php');
919

10-
$website = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(\Magento\Store\Model\Website::class);
11-
/** @var $website \Magento\Store\Model\Website */
12-
$websiteId = $website->load('test', 'code')->getId();
20+
$objectManager = Bootstrap::getObjectManager();
21+
/** @var ProductFactory $productFactory */
22+
$productFactory = $objectManager->get(ProductFactory::class);
23+
/** @var ProductRepositoryInterface $productRepository */
24+
$productRepository = $objectManager->get(ProductRepositoryInterface::class);
25+
$productRepository->cleanCache();
26+
/** @var WebsiteRepositoryInterface $websiteRepository */
27+
$websiteRepository = $objectManager->get(WebsiteRepositoryInterface::class);
28+
$baseWebsiteId = $websiteRepository->get('base')->getId();
29+
$secondWebsiteId = $websiteRepository->get('test')->getId();
30+
$defaultCategoryId = $objectManager->get(DefaultCategory::class)->getId();
31+
$stockData = ['use_config_manage_stock' => 1, 'qty' => 100, 'is_qty_decimal' => 0, 'is_in_stock' => 1];
1332

14-
/** @var $product \Magento\Catalog\Model\Product */
15-
$product = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(\Magento\Catalog\Model\Product::class);
16-
$product->setTypeId(\Magento\Catalog\Model\Product\Type::TYPE_SIMPLE)
17-
->setAttributeSetId(4)
18-
->setWebsiteIds([$websiteId])
33+
$product = $productFactory->create();
34+
$attributeSetId = $product->getDefaultAttributeSetId();
35+
$product->setTypeId(Type::TYPE_SIMPLE)
36+
->setAttributeSetId($attributeSetId)
37+
->setWebsiteIds([$secondWebsiteId])
1938
->setName('Simple Product on second website')
2039
->setSku('simple-2')
2140
->setPrice(10)
2241
->setDescription('Description with <b>html tag</b>')
23-
->setVisibility(\Magento\Catalog\Model\Product\Visibility::VISIBILITY_BOTH)
24-
->setStatus(\Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_ENABLED)
25-
->setCategoryIds([2])
26-
->setStockData(['use_config_manage_stock' => 1, 'qty' => 100, 'is_qty_decimal' => 0, 'is_in_stock' => 1])
27-
->save();
42+
->setVisibility(Visibility::VISIBILITY_BOTH)
43+
->setStatus(Status::STATUS_ENABLED)
44+
->setCategoryIds([$defaultCategoryId])
45+
->setStockData($stockData);
46+
$productRepository->save($product);
2847

29-
/** @var $product \Magento\Catalog\Model\Product */
30-
$product = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(\Magento\Catalog\Model\Product::class);
31-
$product->setTypeId(\Magento\Catalog\Model\Product\Type::TYPE_SIMPLE)
32-
->setAttributeSetId(4)
33-
->setWebsiteIds([1])
48+
$secondProduct = $productFactory->create();
49+
$secondProduct->setTypeId(Type::TYPE_SIMPLE)
50+
->setAttributeSetId($attributeSetId)
51+
->setWebsiteIds([$baseWebsiteId])
3452
->setName('Simple Product')
3553
->setSku('simple-1')
54+
->setUrlKey('simple_product_uniq_key_1')
3655
->setPrice(10)
3756
->setDescription('Description with <b>html tag</b>')
38-
->setVisibility(\Magento\Catalog\Model\Product\Visibility::VISIBILITY_BOTH)
39-
->setStatus(\Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_ENABLED)
40-
->setCategoryIds([2])
41-
->setStockData(['use_config_manage_stock' => 1, 'qty' => 100, 'is_qty_decimal' => 0, 'is_in_stock' => 1])
42-
->save();
57+
->setVisibility(Visibility::VISIBILITY_BOTH)
58+
->setStatus(Status::STATUS_ENABLED)
59+
->setCategoryIds([$defaultCategoryId])
60+
->setStockData($stockData);
61+
$productRepository->save($secondProduct);

dev/tests/integration/testsuite/Magento/Catalog/_files/products_with_websites_and_stores_rollback.php

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,30 +3,33 @@
33
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6-
use Magento\TestFramework\Workaround\Override\Fixture\Resolver;
7-
8-
Resolver::getInstance()->requireDataFixture('Magento/Store/_files/second_website_with_two_stores_rollback.php');
6+
declare(strict_types=1);
97

10-
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
11-
$productRepository = $objectManager->create(\Magento\Catalog\Api\ProductRepositoryInterface::class);
8+
use Magento\Catalog\Api\ProductRepositoryInterface;
9+
use Magento\Framework\Exception\NoSuchEntityException;
10+
use Magento\Framework\Registry;
11+
use Magento\TestFramework\Helper\Bootstrap;
12+
use Magento\TestFramework\Workaround\Override\Fixture\Resolver;
1213

13-
/** @var \Magento\Framework\Registry $registry */
14-
$registry = $objectManager->get(\Magento\Framework\Registry::class);
14+
$objectManager = Bootstrap::getObjectManager();
15+
/** @var ProductRepositoryInterface $productRepository */
16+
$productRepository = $objectManager->get(ProductRepositoryInterface::class);
17+
$productRepository->cleanCache();
18+
/** @var Registry $registry */
19+
$registry = $objectManager->get(Registry::class);
1520

1621
$registry->unregister('isSecureArea');
1722
$registry->register('isSecureArea', true);
1823

19-
/** @var \Magento\Catalog\Api\ProductRepositoryInterface $productRepository */
20-
$productRepository = $objectManager->create(\Magento\Catalog\Api\ProductRepositoryInterface::class);
21-
2224
try {
2325
foreach (['simple-2', 'simple-1'] as $sku) {
24-
$product = $productRepository->get($sku, false, null, true);
25-
$productRepository->delete($product);
26+
$productRepository->deleteById($sku);
2627
}
27-
} catch (\Magento\Framework\Exception\NoSuchEntityException $exception) {
28+
} catch (NoSuchEntityException $exception) {
2829
//Product already removed
2930
}
3031

3132
$registry->unregister('isSecureArea');
3233
$registry->register('isSecureArea', false);
34+
35+
Resolver::getInstance()->requireDataFixture('Magento/Store/_files/second_website_with_two_stores_rollback.php');
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
use Magento\Catalog\Api\ProductRepositoryInterface;
9+
use Magento\Checkout\Model\Type\Onepage;
10+
use Magento\Customer\Api\CustomerRepositoryInterface;
11+
use Magento\Quote\Api\CartRepositoryInterface;
12+
use Magento\Quote\Api\Data\CartInterface;
13+
use Magento\Quote\Api\Data\CartInterfaceFactory;
14+
use Magento\Store\Model\StoreManagerInterface;
15+
use Magento\TestFramework\Helper\Bootstrap;
16+
use Magento\TestFramework\Workaround\Override\Fixture\Resolver;
17+
18+
Resolver::getInstance()->requireDataFixture('Magento/Customer/_files/customer.php');
19+
Resolver::getInstance()->requireDataFixture('Magento/Catalog/_files/products_with_websites_and_stores.php');
20+
21+
$objectManager = Bootstrap::getObjectManager();
22+
/** @var ProductRepositoryInterface $productRepository */
23+
$productRepository = $objectManager->get(ProductRepositoryInterface::class);
24+
$productRepository->cleanCache();
25+
/** @var CartRepositoryInterface $quoteRepository */
26+
$quoteRepository = $objectManager->get(CartRepositoryInterface::class);
27+
/** @var CustomerRepositoryInterface $customerRepository */
28+
$customerRepository = $objectManager->get(CustomerRepositoryInterface::class);
29+
$customer = $customerRepository->get('[email protected]');
30+
/** @var StoreManagerInterface $storeManager */
31+
$storeManager = $objectManager->get(StoreManagerInterface::class);
32+
/** @var CartInterface $quote */
33+
$quote = $objectManager->get(CartInterfaceFactory::class)->create();
34+
$quote->setStoreId($storeManager->getStore('fixture_second_store')->getId())
35+
->setIsActive(true)
36+
->setIsMultiShipping(0)
37+
->setCustomer($customer)
38+
->setCheckoutMethod(Onepage::METHOD_CUSTOMER)
39+
->setReservedOrderId('test_order_on_second_website')
40+
->addProduct($productRepository->get('simple-2'), 1);
41+
$quoteRepository->save($quote);
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
use Magento\Quote\Api\CartRepositoryInterface;
9+
use Magento\TestFramework\Helper\Bootstrap;
10+
use Magento\TestFramework\Quote\Model\GetQuoteByReservedOrderId;
11+
use Magento\TestFramework\Workaround\Override\Fixture\Resolver;
12+
13+
$objectManager = Bootstrap::getObjectManager();
14+
/** @var CartRepositoryInterface $quoteRepository */
15+
$quoteRepository = $objectManager->get(CartRepositoryInterface::class);
16+
/** @var GetQuoteByReservedOrderId $getQuoteByReservedOrderId */
17+
$getQuoteByReservedOrderId = $objectManager->get(GetQuoteByReservedOrderId::class);
18+
$quote = $getQuoteByReservedOrderId->execute('test_order_on_second_website');
19+
if ($quote !== null) {
20+
$quoteRepository->delete($quote);
21+
}
22+
23+
Resolver::getInstance()
24+
->requireDataFixture('Magento/Catalog/_files/products_with_websites_and_stores_rollback.php');
25+
Resolver::getInstance()->requireDataFixture('Magento/Customer/_files/customer_rollback.php');
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\Customer\Block\Adminhtml\Edit\Tab\Cart;
9+
10+
use Magento\Customer\Block\Adminhtml\Edit\Tab\Cart;
11+
use Magento\Customer\Controller\RegistryConstants;
12+
use Magento\Framework\Data\Collection;
13+
use Magento\Framework\ObjectManagerInterface;
14+
use Magento\Framework\Registry;
15+
use Magento\Framework\View\LayoutInterface;
16+
use Magento\Quote\Model\QuoteRepository;
17+
use Magento\TestFramework\Helper\Bootstrap;
18+
use Magento\TestFramework\Store\ExecuteInStoreContext;
19+
use PHPUnit\Framework\TestCase;
20+
21+
/**
22+
* Class checks that shopping cart grid can be filtered
23+
*
24+
* @see \Magento\Customer\Block\Adminhtml\Edit\Tab\Cart::_prepareCollection()
25+
*
26+
* @magentoAppArea adminhtml
27+
* @magentoDbIsolation disabled
28+
*/
29+
class CollectionTest extends TestCase
30+
{
31+
/** @var ObjectManagerInterface */
32+
private $objectManager;
33+
34+
/** @var ExecuteInStoreContext */
35+
private $executeInStoreContext;
36+
37+
/** @var Registry */
38+
private $registry;
39+
40+
/** @var LayoutInterface */
41+
private $layout;
42+
43+
/**
44+
* @inheritdoc
45+
*/
46+
protected function setUp(): void
47+
{
48+
parent::setUp();
49+
50+
$this->objectManager = Bootstrap::getObjectManager();
51+
$this->executeInStoreContext = $this->objectManager->get(ExecuteInStoreContext::class);
52+
$this->registry = $this->objectManager->get(Registry::class);
53+
$this->layout = $this->objectManager->get(LayoutInterface::class);
54+
}
55+
56+
/**
57+
* @inheritdoc
58+
*/
59+
protected function tearDown(): void
60+
{
61+
$this->registry->unregister(RegistryConstants::CURRENT_CUSTOMER_ID);
62+
63+
parent::tearDown();
64+
}
65+
66+
/**
67+
* @magentoDataFixture Magento/Checkout/_files/quote_with_address_saved.php
68+
* @magentoDataFixture Magento/Checkout/_files/customer_quote_on_second_website.php
69+
*
70+
* @return void
71+
*/
72+
public function testCollectionOnDifferentStores(): void
73+
{
74+
$this->registry->unregister(RegistryConstants::CURRENT_CUSTOMER_ID);
75+
$this->registry->register(RegistryConstants::CURRENT_CUSTOMER_ID, 1);
76+
$collectionFirstWebsite = $this->executeInStoreContext->execute(
77+
'default',
78+
[$this->layout->createBlock(Cart::class), 'getPreparedCollection']
79+
);
80+
$this->assertCollection($collectionFirstWebsite, 'Simple Product');
81+
$this->objectManager->removeSharedInstance(QuoteRepository::class);
82+
$collectionSecondWebsite = $this->executeInStoreContext->execute(
83+
'fixture_second_store',
84+
[$this->layout->createBlock(Cart::class), 'getPreparedCollection']
85+
);
86+
$this->assertCollection($collectionSecondWebsite, 'Simple Product on second website');
87+
}
88+
89+
/**
90+
* Check is collection match expected value
91+
*
92+
* @param Collection $collection
93+
* @param string $itemName
94+
* @return void
95+
*/
96+
private function assertCollection(Collection $collection, string $itemName): void
97+
{
98+
$this->assertCount(1, $collection, 'Collection size does not match expected value');
99+
$this->assertEquals($itemName, $collection->getFirstItem()->getName());
100+
}
101+
}

0 commit comments

Comments
 (0)