|
2 | 2 |
|
3 | 3 | namespace Kevinrob\GuzzleCache\Tests;
|
4 | 4 |
|
| 5 | +use GuzzleHttp\Promise\RejectedPromise; |
5 | 6 | use GuzzleHttp\Psr7\Request;
|
6 | 7 | use GuzzleHttp\Psr7\Response;
|
7 | 8 | use GuzzleHttp\Psr7\Utils;
|
| 9 | +use Kevinrob\GuzzleCache\CacheEntry; |
8 | 10 | use Kevinrob\GuzzleCache\CacheMiddleware as BaseCacheMiddleware;
|
9 | 11 | use Kevinrob\GuzzleCache\Storage\Psr6CacheStorage;
|
10 | 12 | use Kevinrob\GuzzleCache\Strategy\CacheStrategyInterface;
|
@@ -35,6 +37,27 @@ public function testRewindAfterReadingStream()
|
35 | 37 |
|
36 | 38 | $this->assertEquals('seekable stream', $response->getBody()->getContents());
|
37 | 39 | }
|
| 40 | + |
| 41 | + public function testStaleOnRejected() |
| 42 | + { |
| 43 | + $request = new Request('GET', '/uri'); |
| 44 | + $response = (new Response())->withHeader('Cache-Control', 'stale-if-error=120'); |
| 45 | + $strategy = $this->createStub(CacheStrategyInterface::class); |
| 46 | + $strategy->method('fetch')->willReturn(new CacheEntry( |
| 47 | + $request, |
| 48 | + $response, |
| 49 | + new \DateTime('-1 second') |
| 50 | + )); |
| 51 | + $handler = function () { |
| 52 | + return new RejectedPromise(new \RuntimeException('Unexpected error')); |
| 53 | + }; |
| 54 | + $middleware = new CacheMiddleware($strategy); |
| 55 | + |
| 56 | + $result = ($middleware($handler)($request, []))->wait(); |
| 57 | + |
| 58 | + $this->assertInstanceOf(ResponseInterface::class, $result); |
| 59 | + $this->assertEquals(CacheMiddleware::HEADER_CACHE_STALE, $result->getHeaderLine(CacheMiddleware::HEADER_CACHE_INFO)); |
| 60 | + } |
38 | 61 | }
|
39 | 62 |
|
40 | 63 | class CacheMiddleware extends BaseCacheMiddleware
|
|
0 commit comments