Skip to content

Commit ee00b94

Browse files
committed
Merge remote-tracking branch 'tango/MC-37934' into PR-10-14
2 parents 1e511e5 + 33b3e40 commit ee00b94

File tree

7 files changed

+174
-11
lines changed

7 files changed

+174
-11
lines changed

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

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,9 @@ public function applyLogToCollection(
9393
$skipIds = []
9494
) {
9595
$idFieldName = $collection->getResource()->getIdFieldName();
96+
$predefinedStoreIds = ($collection->getStoreId() === null)
97+
? null
98+
: [$collection->getStoreId()];
9699

97100
$derivedSelect = $this->getConnection()
98101
->select()
@@ -103,7 +106,7 @@ public function applyLogToCollection(
103106
->where('event_type_id = ?', (int) $eventTypeId)
104107
->where('subject_id = ?', (int) $eventSubjectId)
105108
->where('subtype = ?', (int) $subtype)
106-
->where('store_id IN(?)', $this->getCurrentStoreIds())
109+
->where('store_id IN(?)', $this->getCurrentStoreIds($predefinedStoreIds))
107110
->group('object_id');
108111

109112
if ($skipIds) {
@@ -132,13 +135,11 @@ public function getCurrentStoreIds(array $predefinedStoreIds = null)
132135
{
133136
$stores = [];
134137
// get all or specified stores
135-
if ($this->_storeManager->getStore()->getId() == 0) {
136-
if (null !== $predefinedStoreIds) {
137-
$stores = $predefinedStoreIds;
138-
} else {
139-
foreach ($this->_storeManager->getStores() as $store) {
140-
$stores[] = $store->getId();
141-
}
138+
if ($predefinedStoreIds !== null) {
139+
$stores = $predefinedStoreIds;
140+
} elseif ($this->_storeManager->getStore()->getId() == 0) {
141+
foreach ($this->_storeManager->getStores() as $store) {
142+
$stores[] = $store->getId();
142143
}
143144
} else {
144145
// get all stores, required by configuration in current store scope

app/code/Magento/Reports/Test/Unit/Model/ResourceModel/EventTest.php

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,9 +134,13 @@ public function testUpdateCustomerTypeWithType()
134134
}
135135

136136
/**
137+
* @dataProvider getApplyLogToCollectionDataProvider
138+
* @param null|array $storeId
139+
* @param null|array $storeIdSelect
140+
*
137141
* @return void
138142
*/
139-
public function testApplyLogToCollection()
143+
public function testApplyLogToCollection($storeId, $storeIdSelect)
140144
{
141145
$derivedSelect = 'SELECT * FROM table';
142146
$idFieldName = 'IdFieldName';
@@ -160,6 +164,7 @@ public function testApplyLogToCollection()
160164
->willReturnSelf();
161165

162166
$collectionMock = $this->getMockBuilder(AbstractDb::class)
167+
->setMethods(['getResource', 'getIdFieldName', 'getSelect', 'getStoreId'])
163168
->disableOriginalConstructor()
164169
->getMock();
165170
$collectionMock
@@ -174,6 +179,10 @@ public function testApplyLogToCollection()
174179
->expects($this->any())
175180
->method('getSelect')
176181
->willReturn($collectionSelectMock);
182+
$collectionMock
183+
->expects($this->any())
184+
->method('getStoreId')
185+
->willReturn($storeId);
177186

178187
$selectMock = $this->getMockBuilder(Select::class)
179188
->disableOriginalConstructor()
@@ -195,6 +204,15 @@ public function testApplyLogToCollection()
195204
->expects($this->any())
196205
->method('__toString')
197206
->willReturn($derivedSelect);
207+
$selectMock
208+
->expects($this->any())
209+
->method('where')
210+
->willReturnMap([
211+
['event_type_id = ?', 1],
212+
['subject_id = ?', 1],
213+
['subtype = ?', 1],
214+
['store_id IN(?)', $storeIdSelect]
215+
]);
198216

199217
$this->connectionMock
200218
->expects($this->once())
@@ -209,6 +227,16 @@ public function testApplyLogToCollection()
209227
$this->event->applyLogToCollection($collectionMock, 1, 1, 1);
210228
}
211229

230+
/**
231+
* @return array
232+
*/
233+
public function getApplyLogToCollectionDataProvider()
234+
{
235+
return [
236+
['storeId' => 1, 'storeIdSelect' => [1]],
237+
['storeId' => null, 'storeIdSelect' => [1]],
238+
];
239+
}
212240
/**
213241
* @return void
214242
*/

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)