Skip to content

Commit 6e675cb

Browse files
committed
B2B-2931: [Graphql Resolver Cache] improve reliability and developer awareness on cache keyspace
1 parent 3035663 commit 6e675cb

File tree

2 files changed

+31
-8
lines changed

2 files changed

+31
-8
lines changed

app/code/Magento/GraphQlResolverCache/Model/Resolver/Result/HydratorDehydratorProvider.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,6 @@ private function getResolverClassChain(ResolverInterface $resolver): array
210210
foreach (class_parents($resolver) as $classParent) {
211211
$resolverClasses[] = trim($classParent, '\\');
212212
}
213-
return array_reverse($resolverClasses);
213+
return $resolverClasses;
214214
}
215215
}

dev/tests/integration/testsuite/Magento/GraphQlResolverCache/Model/Resolver/Result/Cache/KeyCalculator/ProviderTest.php

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
namespace Magento\GraphQlResolverCache\Model\Resolver\Result\Cache\KeyCalculator;
99

10+
use Magento\CustomerGraphQl\Model\Resolver\CacheKey\FactorProvider\CustomerGroup;
1011
use Magento\CustomerGraphQl\Model\Resolver\Customer;
1112
use Magento\CustomerGraphQl\Model\Resolver\CustomerAddresses;
1213
use Magento\Framework\GraphQl\Query\ResolverInterface;
@@ -96,15 +97,19 @@ public function testProviderEmptyConfig()
9697
public function testProviderKeyFactorsConfigured()
9798
{
9899
$this->provider = $this->objectManager->create(Provider::class, [
99-
'factorProviders' => [
100-
'Magento\StoreGraphQl\Model\Resolver\StoreConfigResolver' => [
101-
'store' => 'Magento\StoreGraphQl\Model\Resolver\CacheKey\FactorProvider\Store',
102-
'currency' => 'Magento\StoreGraphQl\Model\Resolver\CacheKey\FactorProvider\Currency'
103-
],
100+
'factorProviders' => [
101+
'Magento\StoreGraphQl\Model\Resolver\StoreConfigResolver' => [
102+
'store' => 'Magento\StoreGraphQl\Model\Resolver\CacheKey\FactorProvider\Store',
103+
'currency' => 'Magento\StoreGraphQl\Model\Resolver\CacheKey\FactorProvider\Currency'
104+
],
105+
'StoreConfigDerivedMock' => [
106+
'customer_group' => 'Magento\CustomerGraphQl\Model\Resolver\CacheKey\FactorProvider\CustomerGroup'
104107
]
105-
]);
108+
]
109+
]);
106110
$resolver = $this->getMockBuilder(StoreConfigResolver::class)
107111
->disableOriginalConstructor()
112+
->setMockClassName('StoreConfigDerivedMock')
108113
->getMock();
109114
$storeFactorMock = $this->getMockBuilder(StoreProvider::class)
110115
->disableOriginalConstructor()
@@ -114,6 +119,10 @@ public function testProviderKeyFactorsConfigured()
114119
->disableOriginalConstructor()
115120
->onlyMethods(['getFactorName', 'getFactorValue'])
116121
->getMock();
122+
$customerGroupFactorMock = $this->getMockBuilder(CustomerGroup::class)
123+
->disableOriginalConstructor()
124+
->onlyMethods(['getFactorName', 'getFactorValue'])
125+
->getMock();
117126
$storeFactorMock->expects($this->any())
118127
->method('getFactorName')
119128
->withAnyParameters()
@@ -131,15 +140,29 @@ public function testProviderKeyFactorsConfigured()
131140
->method('getFactorValue')
132141
->withAnyParameters()->willReturn('USD');
133142

143+
$customerGroupFactorMock->expects($this->any())
144+
->method('getFactorName')
145+
->withAnyParameters()
146+
->willReturn('CUSTOMER_GROUP');
147+
$customerGroupFactorMock->expects($this->any())
148+
->method('getFactorValue')
149+
->withAnyParameters()
150+
->willReturn('1');
151+
134152
$this->objectManager->addSharedInstance($storeFactorMock, StoreProvider::class);
135153
$this->objectManager->addSharedInstance($currencyFactorMock, CurrencyProvider::class);
136-
$expectedKey = hash('sha256', strtoupper(implode('|', ['currency' => 'USD', 'store' => 'default'])));
154+
$this->objectManager->addSharedInstance($customerGroupFactorMock, CustomerGroup::class);
155+
$expectedKey = hash(
156+
'sha256',
157+
strtoupper(implode('|', ['currency' => 'USD', 'customer_group' => '1', 'store' => 'default']))
158+
);
137159
$calc = $this->provider->getKeyCalculatorForResolver($resolver);
138160
$key = $calc->calculateCacheKey();
139161
$this->assertNotEmpty($key);
140162
$this->assertEquals($expectedKey, $key);
141163
$this->objectManager->removeSharedInstance(StoreProvider::class);
142164
$this->objectManager->removeSharedInstance(CurrencyProvider::class);
165+
$this->objectManager->removeSharedInstance(CustomerGroup::class);
143166
}
144167

145168
/**

0 commit comments

Comments
 (0)