Skip to content

Commit a7180c2

Browse files
committed
MC-37934: Unexpected behavior of "Manage Shopping Cart" regarding "Products in the Comparison List"
1 parent b12a471 commit a7180c2

File tree

6 files changed

+137
-3
lines changed

6 files changed

+137
-3
lines changed

app/code/Magento/Reports/Model/ResourceModel/Event.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ public function getCurrentStoreIds(array $predefinedStoreIds = null)
135135
// get all or specified stores
136136
if ($predefinedStoreIds !== null) {
137137
$stores = $predefinedStoreIds;
138-
} else if ($this->_storeManager->getStore()->getId() == 0) {
138+
} elseif ($this->_storeManager->getStore()->getId() == 0) {
139139
foreach ($this->_storeManager->getStores() as $store) {
140140
$stores[] = $store->getId();
141141
}

dev/tests/integration/testsuite/Magento/Customer/_files/customer_for_second_website_rollback.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,16 @@
2121
$customerRepository = $objectManager->get(CustomerRepositoryInterface::class);
2222
/** @var WebsiteRepositoryInterface $websiteRepository */
2323
$websiteRepository = $objectManager->get(WebsiteRepositoryInterface::class);
24-
$websiteId = $websiteRepository->get('test')->getId();
2524

2625
$registry->unregister('isSecureArea');
2726
$registry->register('isSecureArea', true);
2827

2928
try {
29+
$websiteId = $websiteRepository->get('test')->getId();
3030
$customer = $customerRepository->get('customer@example.com', $websiteId);
3131
$customerRepository->delete($customer);
3232
} catch (NoSuchEntityException $e) {
33-
//customer already deleted
33+
//customer or website already deleted
3434
}
3535

3636
$registry->unregister('isSecureArea');
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
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\Customer\Model\Session;
9+
use Magento\Framework\App\Config\MutableScopeConfigInterface;
10+
use Magento\Framework\DataObject;
11+
use Magento\Framework\Event\Observer;
12+
use Magento\Reports\Observer\CatalogProductCompareAddProductObserver;
13+
use Magento\TestFramework\Helper\Bootstrap;
14+
use Magento\TestFramework\Workaround\Override\Fixture\Resolver;
15+
use Magento\Catalog\Model\Indexer\Category\Product as CategoryProductIndexer;
16+
use Magento\Customer\Api\CustomerRepositoryInterface;
17+
use Magento\Catalog\Api\ProductRepositoryInterface;
18+
use Magento\Store\Model\StoreManagerInterface;
19+
20+
Resolver::getInstance()->requireDataFixture('Magento/Catalog/_files/product_two_websites.php');
21+
Resolver::getInstance()->requireDataFixture('Magento/Customer/_files/customer_for_second_website.php');
22+
23+
$objectManager = Bootstrap::getObjectManager();
24+
$storeManager = $objectManager->get(StoreManagerInterface::class);
25+
/** @var CustomerRepositoryInterface $customerRepository */
26+
$customerRepository = $objectManager->get(CustomerRepositoryInterface::class);
27+
$websiteId = $storeManager->getStore('fixture_second_store')->getWebsiteId();
28+
$customer = $customerRepository->get('customer@example.com', $websiteId);
29+
/** @var MutableScopeConfigInterface $config */
30+
$config = $objectManager->get(MutableScopeConfigInterface::class);
31+
$originValues = [
32+
'reports/options/enabled' => $config->getValue('reports/options/enabled'),
33+
'reports/options/product_compare_enabled' => $config->getValue('reports/options/product_compare_enabled'),
34+
];
35+
$storeManager->setCurrentStore($storeManager->getStore('fixture_second_store')->getId());
36+
37+
try {
38+
/** @var CategoryProductIndexer $indexer */
39+
$indexer = $objectManager->create(CategoryProductIndexer::class);
40+
$indexer->executeFull();
41+
$config->setValue('reports/options/enabled', 1);
42+
$config->setValue('reports/options/product_compare_enabled', 1);
43+
/** @var Session $session */
44+
$session = $objectManager->get(Session::class);
45+
$session->loginById($customer->getId());
46+
$session->setCustomerId($customer->getId());
47+
/** @var ProductRepositoryInterface $productRepository */
48+
$productRepository = $objectManager->get(ProductRepositoryInterface::class);
49+
$product = $productRepository->get('simple-on-two-websites');
50+
$event = new DataObject(['product' => $product]);
51+
/** @var CatalogProductCompareAddProductObserver $reportObserver */
52+
$reportObserver = $objectManager->get(CatalogProductCompareAddProductObserver::class);
53+
$reportObserver->execute(new Observer(['event' => $event]));
54+
} finally {
55+
$session->logout();
56+
foreach ($originValues as $key => $value) {
57+
$config->setValue($key, $value);
58+
}
59+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
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\TestFramework\Workaround\Override\Fixture\Resolver;
9+
10+
Resolver::getInstance()->requireDataFixture('Magento/Catalog/_files/product_two_websites_rollback.php');
11+
Resolver::getInstance()->requireDataFixture('Magento/Customer/_files/customer_for_second_website_rollback.php');
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
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\Customer\Model\Session;
9+
use Magento\Framework\App\Config\MutableScopeConfigInterface;
10+
use Magento\Framework\DataObject;
11+
use Magento\Framework\Event\Observer;
12+
use Magento\Reports\Observer\CatalogProductViewObserver;
13+
use Magento\TestFramework\Helper\Bootstrap;
14+
use Magento\TestFramework\Workaround\Override\Fixture\Resolver;
15+
use Magento\Catalog\Model\Indexer\Category\Product as CategoryProductIndexer;
16+
use Magento\Customer\Api\CustomerRepositoryInterface;
17+
use Magento\Catalog\Api\ProductRepositoryInterface;
18+
use Magento\Store\Model\StoreManagerInterface;
19+
20+
Resolver::getInstance()->requireDataFixture('Magento/Catalog/_files/product_two_websites.php');
21+
Resolver::getInstance()->requireDataFixture('Magento/Customer/_files/customer_for_second_website.php');
22+
23+
$objectManager = Bootstrap::getObjectManager();
24+
$storeManager = $objectManager->get(StoreManagerInterface::class);
25+
/** @var CustomerRepositoryInterface $customerRepository */
26+
$customerRepository = $objectManager->get(CustomerRepositoryInterface::class);
27+
$websiteId = $storeManager->getStore('fixture_second_store')->getWebsiteId();
28+
$customer = $customerRepository->get('customer@example.com', $websiteId);
29+
/** @var MutableScopeConfigInterface $config */
30+
$config = $objectManager->get(MutableScopeConfigInterface::class);
31+
$originalValue = $config->getValue('reports/options/enabled');
32+
$storeManager->setCurrentStore($storeManager->getStore('fixture_second_store')->getId());
33+
34+
try {
35+
/** @var CategoryProductIndexer $indexer */
36+
$indexer = $objectManager->create(CategoryProductIndexer::class);
37+
$indexer->executeFull();
38+
$config->setValue('reports/options/enabled', 1);
39+
/** @var Session $session */
40+
$session = $objectManager->get(Session::class);
41+
$session->loginById($customer->getId());
42+
$session->setCustomerId($customer->getId());
43+
/** @var ProductRepositoryInterface $productRepository */
44+
$productRepository = $objectManager->get(ProductRepositoryInterface::class);
45+
$product = $productRepository->get('simple-on-two-websites');
46+
$event = new DataObject(['product' => $product]);
47+
/** @var CatalogProductViewObserver $reportObserver */
48+
$reportObserver = $objectManager->get(CatalogProductViewObserver::class);
49+
$reportObserver->execute(new Observer(['event' => $event]));
50+
} finally {
51+
$session->logout();
52+
$config->setValue('reports/options/enabled', $originalValue);
53+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
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\TestFramework\Workaround\Override\Fixture\Resolver;
9+
10+
Resolver::getInstance()->requireDataFixture('Magento/Catalog/_files/product_two_websites_rollback.php');
11+
Resolver::getInstance()->requireDataFixture('Magento/Customer/_files/customer_for_second_website_rollback.php');

0 commit comments

Comments
 (0)