Passed
Push — master ( 654348...8ec1ee )
by Dāvis
03:00
created

MockMiddleware   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 29
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
dl 0
loc 29
rs 10
c 0
b 0
f 0
wmc 4

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 1
A __invoke() 0 14 3
1
<?php
2
3
namespace Sludio\HelperBundle\Guzzle\GuzzleHttp\Middleware;
4
5
use Sludio\HelperBundle\Guzzle\Cache\StorageAdapterInterface;
6
use GuzzleHttp\Promise\FulfilledPromise;
7
use GuzzleHttp\Promise\RejectedPromise;
8
use Psr\Http\Message\RequestInterface;
9
10
class MockMiddleware extends CacheMiddleware
11
{
12
    const DEBUG_HEADER = 'X-Guzzle-Mock';
13
    const DEBUG_HEADER_HIT = 'REPLAY';
14
    const DEBUG_HEADER_MISS = 'RECORD';
15
16
    private $mode;
17
18
    public function __construct(StorageAdapterInterface $adapter, $mode, $debug = false)
19
    {
20
        parent::__construct($adapter, $debug);
21
22
        $this->mode = $mode;
23
    }
24
25
    public function __invoke(callable $handler)
26
    {
27
        return function(RequestInterface $request, array $options) use ($handler) {
28
            if ('record' === $this->mode) {
29
                return $this->handleSave($handler, $request, $options);
30
            }
31
32
            if (null === $response = $this->adapter->fetch($request)) {
33
                return new RejectedPromise(sprintf('Record not found for request: %s %s', $request->getMethod(), $request->getUri()));
34
            }
35
36
            $response = $this->addDebugHeader($response, 'REPLAY');
37
38
            return new FulfilledPromise($response);
39
        };
40
    }
41
}