Skip to content

Commit 2fe213b

Browse files
authored
Merge pull request #4 from edrep/fix/cache-key-query-params
Include request query in cache key
2 parents 62f6c2d + 24f2d09 commit 2fe213b

2 files changed

Lines changed: 31 additions & 1 deletion

File tree

src/Traits/AlwaysCacheResponses.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,10 @@ public function bootAlwaysCacheResponses(SaloonRequest $request): void
8585
protected function cacheKey(SaloonRequest $request, array $headers): string
8686
{
8787
$requestUrl = $request->getFullRequestUrl();
88+
$requestQuery = $request->getQuery();
8889
$className = get_class($request);
8990

90-
return json_encode(compact('requestUrl', 'className', 'headers'), JSON_THROW_ON_ERROR);
91+
return json_encode(compact('requestUrl', 'requestQuery', 'className', 'headers'), JSON_THROW_ON_ERROR);
9192
}
9293

9394
/**

tests/Feature/CacheTest.php

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,35 @@
9191
expect($filesystem->fileExists($hash))->toBeTrue();
9292
});
9393

94+
test('query parameters are used in the cache key', function () use ($filesystem) {
95+
$mockClient = new MockClient([
96+
MockResponse::make(['name' => 'Sam']),
97+
MockResponse::make(['name' => 'Sam']),
98+
MockResponse::make(['name' => 'Sam']),
99+
]);
100+
101+
$requestA = new CachedUserRequest();
102+
$requestA->addQuery('name', 'Sam');
103+
$responseA = $requestA->send($mockClient);
104+
105+
expect($responseA->isCached())->toBeFalse();
106+
expect($responseA->json())->toEqual(['name' => 'Sam']);
107+
expect($responseA->status())->toEqual(200);
108+
109+
$requestB = new CachedUserRequest();
110+
$requestB->addQuery('name', 'Sam');
111+
$responseB = $requestB->send($mockClient);
112+
113+
expect($responseB->isCached())->toBeTrue();
114+
expect($responseB->json())->toEqual(['name' => 'Sam']);
115+
expect($responseB->status())->toEqual(200);
116+
117+
$requestC = new CachedUserRequest();
118+
$responseC = $requestC->send($mockClient);
119+
120+
expect($responseC->isCached())->toBeFalse();
121+
});
122+
94123
test('the generation of the custom key can be overwritten', function () use ($filesystem) {
95124
$mockClient = new MockClient([
96125
MockResponse::make(['name' => 'Sam']),

0 commit comments

Comments
 (0)