Skip to content

Commit 71432ae

Browse files
authored
Merge pull request #9053 from magento-gl/Arrows_Delivery_07022024
[Arrows] Platform Health Delivery
2 parents 29cd372 + cbed4c8 commit 71432ae

File tree

10 files changed

+212
-28
lines changed

10 files changed

+212
-28
lines changed

app/code/Magento/Indexer/Setup/Recurring.php

+11
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,17 @@ public function __construct(
9090
*/
9191
public function install(SchemaSetupInterface $setup, ModuleContextInterface $context)
9292
{
93+
foreach ($this->config->getIndexers() as $index) {
94+
$indexerId = $index['indexer_id'];
95+
$state = $this->stateFactory->create();
96+
$state->loadByIndexer($indexerId);
97+
// If state does not exist, create default index mode to scheduled
98+
if (empty($state->getData('state_id'))) {
99+
$indexer = $this->indexerFactory->create()->load($indexerId);
100+
$indexer->setScheduled(true);
101+
}
102+
}
103+
93104
/** @var State[] $stateIndexers */
94105
$stateIndexers = [];
95106
$states = $this->statesFactory->create();

dev/tests/integration/framework/Magento/TestFramework/Application.php

+91-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@
1111
use Magento\Framework\Autoload\AutoloaderInterface;
1212
use Magento\Framework\Config\ConfigOptionsListConstants;
1313
use Magento\Framework\Filesystem\Glob;
14+
use Magento\Framework\Indexer\IndexerRegistry;
1415
use Magento\Framework\Mail;
16+
use Magento\Indexer\Model\Indexer\Collection;
1517
use Magento\TestFramework;
1618
use Magento\TestFramework\Fixture\Data\ProcessorInterface;
1719
use Psr\Log\LoggerInterface;
@@ -567,9 +569,11 @@ public function install($cleanup)
567569
);
568570

569571
$this->runPostInstallCommands();
572+
$this->makeIndexStatusRealtime();
570573

571574
// enable only specified list of caches
572575
$initParamsQuery = $this->getInitParamsQuery();
576+
573577
$this->_shell->execute(
574578
PHP_BINARY . ' -f %s cache:disable -vvv --bootstrap=%s',
575579
[BP . '/bin/magento', $initParamsQuery]
@@ -745,7 +749,7 @@ protected function _ensureDirExists($dir)
745749
// phpcs:ignore Magento2.Functions.DiscouragedFunction
746750
mkdir($dir, 0777, true);
747751
umask($old);
748-
// phpcs:ignore Magento2.Functions.DiscouragedFunction
752+
// phpcs:ignore Magento2.Functions.DiscouragedFunction
749753
} elseif (!is_dir($dir)) {
750754
throw new \Magento\Framework\Exception\LocalizedException(__("'%1' is not a directory.", $dir));
751755
}
@@ -825,4 +829,90 @@ protected function getCustomDirs()
825829
];
826830
return $customDirs;
827831
}
832+
833+
/**
834+
* Initialize the application and set the index status to realtime.
835+
*
836+
* @return void
837+
*/
838+
private function makeIndexStatusRealtime(): void
839+
{
840+
$overriddenParams = $this->getOverriddenParams();
841+
$directoryList = $this->getDirectoryList($overriddenParams);
842+
$objectManager = $this->getObjectManagers($overriddenParams, $directoryList);
843+
Helper\Bootstrap::setObjectManager($objectManager);
844+
$objectManagerConfiguration = [
845+
'preferences' => [
846+
\Magento\Framework\App\State::class => TestFramework\App\State::class
847+
]
848+
];
849+
$objectManager->configure($objectManagerConfiguration);
850+
$this->setIndexerToRealtime($objectManager);
851+
}
852+
853+
/**
854+
* Retrieves the overridden parameters.
855+
*
856+
* @return array
857+
*/
858+
private function getOverriddenParams(): array
859+
{
860+
$overriddenParams[\Magento\Framework\App\State::PARAM_MODE] = $this->_appMode;
861+
return $this->_customizeParams($overriddenParams);
862+
}
863+
864+
/**
865+
* Retrieves the directory list.
866+
*
867+
* @param array $overriddenParams
868+
* @return DirectoryList
869+
*/
870+
private function getDirectoryList($overriddenParams): DirectoryList
871+
{
872+
$directories = isset($overriddenParams[\Magento\Framework\App\Bootstrap::INIT_PARAM_FILESYSTEM_DIR_PATHS])
873+
? $overriddenParams[\Magento\Framework\App\Bootstrap::INIT_PARAM_FILESYSTEM_DIR_PATHS]
874+
: [];
875+
return new DirectoryList(BP, $directories);
876+
}
877+
878+
/**
879+
* Retrieves the object manager.
880+
*
881+
* @param array $overriddenParams
882+
* @param DirectoryList $directoryList The directory list.
883+
* @return ObjectManager
884+
*/
885+
private function getObjectManagers($overriddenParams, $directoryList): ObjectManager
886+
{
887+
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
888+
if (!$objectManager) {
889+
$objectManager = $this->_factory->create($overriddenParams);
890+
$objectManager->addSharedInstance($directoryList, DirectoryList::class);
891+
$objectManager->addSharedInstance($directoryList, \Magento\Framework\Filesystem\DirectoryList::class);
892+
} else {
893+
$objectManager = $this->_factory->restore($objectManager, $directoryList, $overriddenParams);
894+
}
895+
return $objectManager;
896+
}
897+
898+
/**
899+
* Sets the indexer mode to realtime.
900+
*
901+
* @param ObjectManager $objectManager
902+
* @return void
903+
*/
904+
private function setIndexerToRealtime($objectManager): void
905+
{
906+
/** @var Collection $indexCollection */
907+
$indexCollection = $objectManager->get(Collection::class);
908+
$indexerIds = $indexCollection->getAllIds();
909+
if (!empty($indexerIds)) {
910+
foreach ($indexerIds as $indexerId) {
911+
/** @var IndexerInterface $model */
912+
$model = $objectManager->get(IndexerRegistry::class)
913+
->get($indexerId);
914+
$model->setScheduled(false);
915+
}
916+
}
917+
}
828918
}

dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/ApplicationTest.php

+54-1
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,26 @@ class ApplicationTest extends \PHPUnit\Framework\TestCase
5656
*/
5757
private $appMode;
5858

59+
/**
60+
* @var \Magento\TestFramework\ObjectManagerFactory|\PHPUnit\Framework\MockObject\MockObject
61+
*/
62+
private $factoryMock;
63+
64+
/**
65+
* @var \Magento\TestFramework\ObjectManagerFactory
66+
*/
67+
private $_factory;
68+
69+
/**
70+
* @var \Magento\Indexer\Model\Indexer\Collection | \PHPUnit\Framework\MockObject\MockObject
71+
*/
72+
private $collectionMock;
73+
74+
/**
75+
* @var \Magento\TestFramework\ObjectManager | \PHPUnit\Framework\MockObject\MockObject
76+
*/
77+
private $objectManager;
78+
5979
/**
6080
* @inheritdoc
6181
*/
@@ -78,6 +98,19 @@ protected function setUp(): void
7898
$this->appMode,
7999
$this->autoloadWrapper
80100
);
101+
102+
$this->factoryMock = $this->getMockBuilder(\Magento\TestFramework\ObjectManagerFactory::class)
103+
->disableOriginalConstructor()
104+
->onlyMethods(['create', 'restore'])
105+
->getMock();
106+
107+
$this->collectionMock = $this->getMockBuilder(\Magento\Indexer\Model\Indexer\Collection::class)
108+
->disableOriginalConstructor()
109+
->getMock();
110+
111+
$this->objectManager = $this->getMockBuilder(\Magento\TestFramework\ObjectManager::class)
112+
->disableOriginalConstructor()
113+
->getMock();
81114
}
82115

83116
/**
@@ -136,12 +169,18 @@ public function testInstall(
136169
);
137170

138171
// bypass db dump logic
172+
$reflectionProperty = new \ReflectionProperty($subject, '_factory');
173+
$reflectionProperty->setAccessible(true);
174+
$reflectionProperty->setValue($subject, $this->factoryMock);
175+
$this->_factory = $this->factoryMock;
139176
$dbMock = $this->getMockBuilder(Mysql::class)->disableOriginalConstructor()->getMock();
140177

141178
$reflectionSubject = new ReflectionClass($subject);
142179
$dbProperty = $reflectionSubject->getProperty('_db');
143180
$dbProperty->setAccessible(true);
144181
$dbProperty->setValue($subject, $dbMock);
182+
$property = $reflectionSubject->getProperty('canLoadArea');
183+
$property->setValue($subject, false);
145184

146185
$dbMock
147186
->expects($this->any())
@@ -150,7 +189,6 @@ public function testInstall(
150189
false,
151190
true
152191
);
153-
154192
$withArgs = [];
155193
// Add expected shell execution calls
156194
foreach ($expectedShellExecutionCalls as $expectedShellExecutionArguments) {
@@ -174,6 +212,21 @@ public function testInstall(
174212
}
175213
});
176214

215+
$this->objectManager->expects($this->any())
216+
->method('configure')
217+
->willReturnSelf();
218+
TestFrameworkBootstrap::setObjectManager($this->objectManager);
219+
220+
$this->_factory->expects($this->any())
221+
->method('restore')
222+
->willReturn($this->objectManager);
223+
$this->objectManager->expects($this->any())
224+
->method('get')
225+
->willReturnCallback(fn($param) => match ([$param]) {
226+
[\Magento\Indexer\Model\Indexer\Collection::class] => $this->collectionMock,
227+
default => ''
228+
});
229+
177230
$subject->install(false);
178231
}
179232

dev/tests/integration/testsuite/Magento/Customer/Model/ResourceModel/Grid/CollectionReindexOnAccountLockTest.php

+15
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,11 @@
77
namespace Magento\Customer\Model\ResourceModel\Grid;
88

99
use Magento\Customer\Api\AccountManagementInterface;
10+
use Magento\Customer\Model\Customer;
1011
use Magento\Customer\Model\CustomerRegistry;
1112
use Magento\Framework\Exception\InvalidEmailOrPasswordException;
1213
use Magento\Framework\Exception\NoSuchEntityException;
14+
use Magento\Framework\Indexer\IndexerRegistry;
1315
use Magento\TestFramework\Helper\Bootstrap;
1416
use Magento\TestFramework\Indexer\TestCase;
1517

@@ -20,6 +22,19 @@
2022
*/
2123
class CollectionReindexOnAccountLockTest extends TestCase
2224
{
25+
/** Set Up
26+
*
27+
* @return void
28+
*
29+
*/
30+
protected function setUp(): void
31+
{
32+
parent::setUp();
33+
$indexerRegistry = Bootstrap::getObjectManager()->create(IndexerRegistry::class);
34+
$indexer = $indexerRegistry->get(Customer::CUSTOMER_GRID_INDEXER_ID);
35+
$indexer->reindexAll();
36+
}
37+
2338
/**
2439
* Trigger customer account lock by making 10 failed authentication attempts
2540
*/

dev/tests/integration/testsuite/Magento/Customer/Model/ResourceModel/Grid/CollectionTest.php

+6-8
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88

99
use Magento\Customer\Api\CustomerRepositoryInterface;
1010
use Magento\Customer\Api\Data\CustomerInterface;
11+
use Magento\Customer\Model\Customer;
12+
use Magento\Framework\Indexer\IndexerRegistry;
1113
use Magento\Framework\Stdlib\DateTime\TimezoneInterface;
1214
use Magento\TestFramework\Helper\Bootstrap;
1315
use Magento\TestFramework\Indexer\TestCase;
@@ -17,6 +19,7 @@
1719
*/
1820
class CollectionTest extends TestCase
1921
{
22+
2023
public static function setUpBeforeClass(): void
2124
{
2225
$db = Bootstrap::getInstance()
@@ -28,6 +31,9 @@ public static function setUpBeforeClass(): void
2831
}
2932
$db->restoreFromDbDump();
3033

34+
$indexerRegistry = Bootstrap::getObjectManager()->create(IndexerRegistry::class);
35+
$indexer = $indexerRegistry->get(Customer::CUSTOMER_GRID_INDEXER_ID);
36+
$indexer->reindexAll();
3137
parent::setUpBeforeClass();
3238
}
3339

@@ -88,12 +94,4 @@ public function testAddFieldToFilter(): void
8894

8995
$this->assertStringContainsString($expectedSelect, $collection->getSelectSql(true));
9096
}
91-
92-
/**
93-
* @inheritDoc
94-
*/
95-
protected function tearDown(): void
96-
{
97-
parent::tearDown();
98-
}
9997
}

dev/tests/integration/testsuite/Magento/Customer/Ui/Component/DataProviderTest.php

+5
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88
namespace Magento\Customer\Ui\Component;
99

1010
use Magento\Backend\Model\Locale\Resolver;
11+
use Magento\Customer\Model\Customer;
1112
use Magento\Framework\Api\Filter;
13+
use Magento\Framework\Indexer\IndexerRegistry;
1214
use Magento\Framework\Locale\ResolverInterface;
1315
use Magento\TestFramework\Helper\Bootstrap;
1416
use PHPUnit\Framework\MockObject\MockObject;
@@ -37,6 +39,9 @@ class DataProviderTest extends TestCase
3739
protected function setUp(): void
3840
{
3941
$this->initLocaleResolverMock();
42+
$indexerRegistry = Bootstrap::getObjectManager()->create(IndexerRegistry::class);
43+
$indexer = $indexerRegistry->get(Customer::CUSTOMER_GRID_INDEXER_ID);
44+
$indexer->reindexAll();
4045
}
4146

4247
/**

dev/tests/integration/testsuite/Magento/Customer/Ui/Component/Listing/Address/DataProviderTest.php

+5
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@
88
namespace Magento\Customer\Ui\Component\Listing\Address;
99

1010
use Magento\Backend\Model\Locale\Resolver;
11+
use Magento\Customer\Model\Customer;
1112
use Magento\Framework\Api\Filter;
1213
use Magento\Framework\App\RequestInterface;
14+
use Magento\Framework\Indexer\IndexerRegistry;
1315
use Magento\Framework\Locale\ResolverInterface;
1416
use Magento\TestFramework\Helper\Bootstrap;
1517
use PHPUnit\Framework\MockObject\MockObject;
@@ -52,6 +54,9 @@ protected function setUp(): void
5254
'request' => $this->requestMock,
5355
]
5456
);
57+
$indexerRegistry = Bootstrap::getObjectManager()->create(IndexerRegistry::class);
58+
$indexer = $indexerRegistry->get(Customer::CUSTOMER_GRID_INDEXER_ID);
59+
$indexer->reindexAll();
5560
}
5661

5762
/**

dev/tests/integration/testsuite/Magento/Customer/Ui/Component/Listing/AttributeRepositoryTest.php

+5
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
namespace Magento\Customer\Ui\Component\Listing;
99

10+
use Magento\Customer\Model\Customer;
11+
use Magento\Framework\Indexer\IndexerRegistry;
1012
use Magento\TestFramework\Helper\Bootstrap;
1113
use PHPUnit\Framework\TestCase;
1214

@@ -28,6 +30,9 @@ class AttributeRepositoryTest extends TestCase
2830
protected function setUp(): void
2931
{
3032
$this->model = Bootstrap::getObjectManager()->create(AttributeRepository::class);
33+
$indexerRegistry = Bootstrap::getObjectManager()->create(IndexerRegistry::class);
34+
$indexer = $indexerRegistry->get(Customer::CUSTOMER_GRID_INDEXER_ID);
35+
$indexer->reindexAll();
3136
}
3237

3338
/**

0 commit comments

Comments
 (0)