Skip to content

Commit 201c0f2

Browse files
Merge pull request #6450 from magento-engcom/engcom-regression-bugfixes
[EngCom] Regression bugfixes (MC-39762 & MC-39783)
2 parents 64ab709 + c868032 commit 201c0f2

File tree

3 files changed

+140
-0
lines changed

3 files changed

+140
-0
lines changed
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
declare(strict_types=1);
8+
9+
namespace Magento\Customer\Model\Plugin;
10+
11+
use Magento\Customer\Model\ResourceModel\Customer\CollectionFactory as CustomerCollectionFactory;
12+
use Magento\Framework\Indexer\IndexerRegistry;
13+
use Magento\Store\Model\Website;
14+
15+
/**
16+
* Run customer_grid indexer after deleting website for specified customers
17+
*/
18+
class CustomerGridIndexAfterWebsiteDelete
19+
{
20+
private const CUSTOMER_GRID_INDEXER_ID = 'customer_grid';
21+
22+
/**
23+
* @var IndexerRegistry
24+
*/
25+
private $indexerRegistry;
26+
27+
/**
28+
* @var CustomerCollectionFactory
29+
*/
30+
private $customerCollectionFactory;
31+
32+
/**
33+
* @param IndexerRegistry $indexerRegistry
34+
* @param CustomerCollectionFactory $customerCollectionFactory
35+
*/
36+
public function __construct(IndexerRegistry $indexerRegistry, CustomerCollectionFactory $customerCollectionFactory)
37+
{
38+
$this->indexerRegistry = $indexerRegistry;
39+
$this->customerCollectionFactory = $customerCollectionFactory;
40+
}
41+
42+
/**
43+
* Run customer_grid indexer after deleting website
44+
*
45+
* @param Website $subject
46+
* @param callable $proceed
47+
* @return Website
48+
*/
49+
public function aroundDelete(Website $subject, callable $proceed): Website
50+
{
51+
$customerIds = $this->getCustomerIdsByWebsiteId((int) $subject->getId());
52+
$result = $proceed();
53+
54+
if ($customerIds) {
55+
$this->indexerRegistry->get(self::CUSTOMER_GRID_INDEXER_ID)
56+
->reindexList($customerIds);
57+
}
58+
59+
return $result;
60+
}
61+
62+
/**
63+
* Returns customer ids by website id
64+
*
65+
* @param int $websiteId
66+
* @return array
67+
*/
68+
private function getCustomerIdsByWebsiteId(int $websiteId): array
69+
{
70+
$collection = $this->customerCollectionFactory->create();
71+
$collection->addFieldToFilter('website_id', $websiteId);
72+
73+
return $collection->getAllIds();
74+
}
75+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
9+
<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/testSchema.xsd">
11+
<test name="AdminVerifyCustomerOnGridAfterDeletingWebsiteTest">
12+
<annotations>
13+
<features value="Customer"/>
14+
<stories value="Customer grid"/>
15+
<title value="The customer's grid is not available after deleting the website"/>
16+
<description value="Verify grid after deleting website associated with customer"/>
17+
<severity value="CRITICAL"/>
18+
<testCaseId value="MC-39783"/>
19+
<group value="customer"/>
20+
</annotations>
21+
<before>
22+
<actionGroup ref="AdminLoginActionGroup" stepKey="LoginAsAdmin"/>
23+
<actionGroup ref="AdminCreateWebsiteActionGroup" stepKey="createWebsite">
24+
<argument name="newWebsiteName" value="{{customWebsite.name}}"/>
25+
<argument name="websiteCode" value="{{customWebsite.code}}"/>
26+
</actionGroup>
27+
<actionGroup ref="AdminCreateNewStoreGroupActionGroup" stepKey="createNewStore">
28+
<argument name="website" value="{{customWebsite.name}}"/>
29+
<argument name="storeGroupName" value="{{customStoreGroup.name}}"/>
30+
<argument name="storeGroupCode" value="{{customStoreGroup.code}}"/>
31+
</actionGroup>
32+
<actionGroup ref="AdminCreateStoreViewActionGroup" stepKey="createCustomStoreView">
33+
<argument name="StoreGroup" value="customStoreGroup"/>
34+
<argument name="customStore" value="customStore"/>
35+
</actionGroup>
36+
<actionGroup ref="AdminGoCreatedWebsitePageActionGroup" stepKey="openWebsiteToGetId">
37+
<argument name="websiteName" value="{{customWebsite.name}}"/>
38+
</actionGroup>
39+
<grabFromCurrentUrl regex="~/website_id/(\d+)/~" stepKey="grabWebsiteIdFromURL"/>
40+
<createData entity="Simple_Customer_Without_Address" stepKey="createCustomer">
41+
<field key="website_id">$grabWebsiteIdFromURL</field>
42+
</createData>
43+
</before>
44+
<after>
45+
<deleteData createDataKey="createCustomer" stepKey="deleteCustomer"/>
46+
<actionGroup ref="AdminLogoutActionGroup" stepKey="logout"/>
47+
</after>
48+
49+
<actionGroup ref="AdminDeleteWebsiteActionGroup" stepKey="DeleteWebsite">
50+
<argument name="websiteName" value="{{customWebsite.name}}"/>
51+
</actionGroup>
52+
<actionGroup ref="AdminOpenCustomersGridActionGroup" stepKey="goToCustomersGridPage"/>
53+
<actionGroup stepKey="resetFilter" ref="AdminResetFilterInCustomerGrid"/>
54+
<actionGroup stepKey="filterByEamil" ref="AdminFilterCustomerGridByEmail">
55+
<argument name="email" value="$$createCustomer.email$$"/>
56+
</actionGroup>
57+
<actionGroup stepKey="checkCustomerInGrid" ref="AdminAssertCustomerInCustomersGrid">
58+
<argument name="text" value="$$createCustomer.email$$"/>
59+
<argument name="row" value="1"/>
60+
</actionGroup>
61+
</test>
62+
</tests>

app/code/Magento/Customer/etc/adminhtml/di.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,7 @@
4141
<argument name="reporting" xsi:type="object">CustomerGridCollectionReporting</argument>
4242
</arguments>
4343
</type>
44+
<type name="Magento\Store\Model\Website">
45+
<plugin name="reindex_customer_grid_after_website_remove" type="Magento\Customer\Model\Plugin\CustomerGridIndexAfterWebsiteDelete" />
46+
</type>
4447
</config>

0 commit comments

Comments
 (0)