Skip to content

Commit e88b1cc

Browse files
MC-32154: Customer grid not indexing automatically
1 parent 5a9fcab commit e88b1cc

File tree

3 files changed

+37
-238
lines changed

3 files changed

+37
-238
lines changed

app/code/Magento/CustomerImportExport/Model/Import/Customer.php

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
use Magento\ImportExport\Model\Import;
1212
use Magento\ImportExport\Model\Import\ErrorProcessing\ProcessingErrorAggregatorInterface;
1313
use Magento\ImportExport\Model\Import\AbstractSource;
14+
use Magento\Customer\Model\Indexer\Processor;
15+
use Magento\Framework\App\ObjectManager;
1416

1517
/**
1618
* Customer entity import
@@ -168,6 +170,11 @@ class Customer extends AbstractCustomer
168170
'lock_expires',
169171
];
170172

173+
/**
174+
* @var Processor
175+
*/
176+
private $indexerProcessor;
177+
171178
/**
172179
* @param \Magento\Framework\Stdlib\StringUtils $string
173180
* @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
@@ -182,6 +189,7 @@ class Customer extends AbstractCustomer
182189
* @param \Magento\Customer\Model\ResourceModel\Attribute\CollectionFactory $attrCollectionFactory
183190
* @param \Magento\Customer\Model\CustomerFactory $customerFactory
184191
* @param array $data
192+
* @param Processor $indexerProcessor
185193
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
186194
*/
187195
public function __construct(
@@ -197,7 +205,8 @@ public function __construct(
197205
\Magento\CustomerImportExport\Model\ResourceModel\Import\Customer\StorageFactory $storageFactory,
198206
\Magento\Customer\Model\ResourceModel\Attribute\CollectionFactory $attrCollectionFactory,
199207
\Magento\Customer\Model\CustomerFactory $customerFactory,
200-
array $data = []
208+
array $data = [],
209+
?Processor $indexerProcessor = null
201210
) {
202211
$this->_resourceHelper = $resourceHelper;
203212

@@ -254,6 +263,7 @@ public function __construct(
254263
/** @var $customerResource \Magento\Customer\Model\ResourceModel\Customer */
255264
$customerResource = $this->_customerModel->getResource();
256265
$this->_entityTable = $customerResource->getEntityTable();
266+
$this->indexerProcessor = $indexerProcessor ?: ObjectManager::getInstance()->get(Processor::class);
257267
}
258268

259269
/**
@@ -554,7 +564,7 @@ protected function _importData()
554564
$this->_deleteCustomerEntities($entitiesToDelete);
555565
}
556566
}
557-
567+
$this->indexerProcessor->markIndexerAsInvalid();
558568
return true;
559569
}
560570

app/code/Magento/CustomerImportExport/Test/Unit/Model/Import/CustomerTest.php

Lines changed: 0 additions & 236 deletions
This file was deleted.

dev/tests/integration/testsuite/Magento/CustomerImportExport/Model/Import/CustomerTest.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use Magento\Framework\App\Filesystem\DirectoryList;
1212
use Magento\Framework\Exception\NoSuchEntityException;
1313
use Magento\ImportExport\Model\Import;
14+
use Magento\Framework\Indexer\StateInterface;
1415

1516
/**
1617
* Test for class \Magento\CustomerImportExport\Model\Import\Customer which covers validation logic
@@ -39,6 +40,11 @@ class CustomerTest extends \PHPUnit\Framework\TestCase
3940
*/
4041
protected $directoryWrite;
4142

43+
/**
44+
* @var \Magento\Customer\Model\Indexer\Processor
45+
*/
46+
private $indexerProcessor;
47+
4248
/**
4349
* Create all necessary data for tests
4450
*/
@@ -49,6 +55,8 @@ protected function setUp()
4955
$this->_model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
5056
->create(\Magento\CustomerImportExport\Model\Import\Customer::class);
5157
$this->_model->setParameters(['behavior' => Import::BEHAVIOR_ADD_UPDATE]);
58+
$this->indexerProcessor = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
59+
->create(\Magento\Customer\Model\Indexer\Processor::class);
5260

5361
$propertyAccessor = new \ReflectionProperty($this->_model, 'errorMessageTemplates');
5462
$propertyAccessor->setAccessible(true);
@@ -377,6 +385,23 @@ public function testUpdateExistingCustomers(): void
377385
$this->assertEquals(1, $customer->getStoreId());
378386
}
379387

388+
/**
389+
* Test customer indexer gets invalidated after import when Update on Schedule mode is set
390+
*
391+
* @magentoDbIsolation enabled
392+
* @return void
393+
*/
394+
public function testCustomerIndexer(): void
395+
{
396+
$this->indexerProcessor->getIndexer()->reindexAll();
397+
$statusBeforeImport = $this->indexerProcessor->getIndexer()->getStatus();
398+
$this->indexerProcessor->getIndexer()->setScheduled(true);
399+
$this->doImport(__DIR__ . '/_files/customers_with_gender_to_import.csv', Import::BEHAVIOR_ADD_UPDATE);
400+
$statusAfterImport = $this->indexerProcessor->getIndexer()->getStatus();
401+
$this->assertEquals(StateInterface::STATUS_VALID, $statusBeforeImport);
402+
$this->assertEquals(StateInterface::STATUS_INVALID, $statusAfterImport);
403+
}
404+
380405
/**
381406
* Gets customer entity.
382407
*

0 commit comments

Comments
 (0)