Skip to content

Commit ee9dc43

Browse files
committed
MAGE-1044 Add virtual replica test
1 parent 265f8ec commit ee9dc43

File tree

2 files changed

+69
-16
lines changed

2 files changed

+69
-16
lines changed

Service/Product/ReplicaManager.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -133,12 +133,14 @@ protected function clearAlgoliaReplicaSettingCache($primaryIndexName = null): vo
133133
* relevant to the Magento integration
134134
*
135135
* @param string $primaryIndexName
136+
* @param bool $refreshCache
136137
* @return string[] Array of replica index names
137138
* @throws LocalizedException
139+
* @throws NoSuchEntityException
138140
*/
139-
protected function getMagentoReplicaConfigurationFromAlgolia(string $primaryIndexName): array
141+
protected function getMagentoReplicaConfigurationFromAlgolia(string $primaryIndexName, bool $refreshCache = false): array
140142
{
141-
$algoliaReplicas = $this->getReplicaConfigurationFromAlgolia($primaryIndexName);
143+
$algoliaReplicas = $this->getReplicaConfigurationFromAlgolia($primaryIndexName, $refreshCache);
142144
$magentoReplicas = $this->getMagentoReplicaSettings($primaryIndexName, $algoliaReplicas);
143145
return array_values(array_intersect($magentoReplicas, $algoliaReplicas));
144146
}
@@ -241,7 +243,7 @@ protected function setReplicasOnPrimaryIndex(int $storeId): array
241243
$indexName = $this->indexNameFetcher->getProductIndexName($storeId);
242244
$sortingIndices = $this->sortingTransformer->getSortingIndices($storeId);
243245
$newMagentoReplicasSetting = $this->sortingTransformer->transformSortingIndicesToReplicaSetting($sortingIndices);
244-
$oldMagentoReplicasSetting = $this->getMagentoReplicaConfigurationFromAlgolia($indexName);
246+
$oldMagentoReplicasSetting = $this->getMagentoReplicaConfigurationFromAlgolia($indexName, true);
245247
$nonMagentoReplicasSetting = $this->getNonMagentoReplicaConfigurationFromAlgolia($indexName);
246248
$oldMagentoReplicaIndices = $this->getBareIndexNamesFromReplicaSetting($oldMagentoReplicasSetting);
247249
$newMagentoReplicaIndices = $this->getBareIndexNamesFromReplicaSetting($newMagentoReplicasSetting);

Test/Integration/Product/ReplicaIndexingTest.php

Lines changed: 64 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,11 @@ protected function assertSortingAttribute($sortAttr, $sortDir): void
5959

6060
protected function assertNoSortingAttribute($sortAttr, $sortDir): void
6161
{
62-
$this->assertTrue(!$this->hasSortingAttribute($sortAttr, $sortDir));
62+
$this->assertFalse($this->hasSortingAttribute($sortAttr, $sortDir));
6363
}
6464

65-
public function testReplicaLimits() {
65+
public function testReplicaLimits()
66+
{
6667
$this->assertEquals(20, $this->replicaManager->getMaxVirtualReplicasPerIndex());
6768
}
6869

@@ -85,14 +86,8 @@ public function testStandardReplicaConfig(): void
8586

8687
$sortIndexName = $indexName . '_' . $sortAttr . '_' . $sortDir;
8788

88-
$this->assertTrue(
89-
(bool) array_filter(
90-
$currentSettings['replicas'],
91-
function($replica) use ($sortIndexName) {
92-
return str_contains($replica, $sortIndexName);
93-
}
94-
)
95-
);
89+
$this->assertTrue($this->isStandardReplica($currentSettings['replicas'], $sortIndexName));
90+
$this->assertFalse($this->isVirtualReplica($currentSettings['replicas'], $sortIndexName));
9691

9792
// Assert replica index created
9893
$replicaSettings = $this->algoliaHelper->getSettings($sortIndexName);
@@ -111,6 +106,11 @@ function($replica) use ($sortIndexName) {
111106
*/
112107
public function testVirtualReplicaConfig(): void
113108
{
109+
$indexName = $this->getIndexName('default_');
110+
$ogAlgoliaSettings = $this->algoliaHelper->getSettings($indexName);
111+
112+
$this->assertFalse(array_key_exists('replicas', $ogAlgoliaSettings));
113+
114114
$productHelper = $this->objectManager->get(ProductHelper::class);
115115
$sortAttr = 'color';
116116
$sortDir = 'asc';
@@ -121,9 +121,10 @@ public function testVirtualReplicaConfig(): void
121121

122122
$sorting = $this->configHelper->getSorting();
123123
$sorting[] = [
124-
'attribute' => $sortAttr,
125-
'sort' => $sortDir,
126-
'sortLabel' => $sortAttr
124+
'attribute' => $sortAttr,
125+
'sort' => $sortDir,
126+
'sortLabel' => $sortAttr,
127+
'virtualReplica' => 1
127128
];
128129
$this->configHelper->setSorting($sorting);
129130

@@ -133,6 +134,56 @@ public function testVirtualReplicaConfig(): void
133134

134135
$this->assertSortingAttribute($sortAttr, $sortDir);
135136

137+
// Cannot use config fixture because we have disabled db isolation
138+
$this->setConfig('algoliasearch_instant/instant/is_instant_enabled', 1);
139+
140+
$this->indicesConfigurator->saveConfigurationToAlgolia(1);
141+
$this->algoliaHelper->waitLastTask();
142+
143+
// Assert replica config created
144+
$currentSettings = $this->algoliaHelper->getSettings($indexName);
145+
$this->assertArrayHasKey('replicas', $currentSettings);
146+
147+
$sortIndexName = $indexName . '_' . $sortAttr . '_' . $sortDir;
148+
149+
$this->assertTrue($this->isVirtualReplica($currentSettings['replicas'], $sortIndexName));
150+
$this->assertFalse($this->isStandardReplica($currentSettings['replicas'], $sortIndexName));
151+
152+
// Assert replica index created
153+
$replicaSettings = $this->algoliaHelper->getSettings($sortIndexName);
154+
$this->assertArrayHasKey('primary', $replicaSettings);
155+
$this->assertEquals($indexName, $replicaSettings['primary']);
156+
157+
// Restore prior state (for this test only)
158+
$this->algoliaHelper->setSettings($indexName, $ogAlgoliaSettings);
159+
$this->setConfig('algoliasearch_instant/instant/is_instant_enabled', 0);
160+
161+
}
162+
163+
/**
164+
* @param string[] $replicaSetting
165+
* @param string $replicaIndexName
166+
* @return bool
167+
*/
168+
protected function isVirtualReplica(array $replicaSetting, string $replicaIndexName): bool
169+
{
170+
return (bool) array_filter(
171+
$replicaSetting,
172+
function ($replica) use ($replicaIndexName) {
173+
return str_contains($replica, "virtual($replicaIndexName)");
174+
}
175+
);
176+
}
177+
178+
protected function isStandardReplica(array $replicaSetting, string $replicaIndexName): bool
179+
{
180+
return (bool) array_filter(
181+
$replicaSetting,
182+
function ($replica) use ($replicaIndexName) {
183+
$regex = '/^' . preg_quote($replicaIndexName) . '$/';
184+
return preg_match($regex, $replica);
185+
}
186+
);
136187
}
137188

138189
public function tearDown(): void

0 commit comments

Comments
 (0)