Completed
Push — 2.x ( 741cb0...393be3 )
by Frank
01:26
created

S3ClientStub::failOnNextCopy()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace League\Flysystem\AwsS3V3;
6
7
use Aws\Command;
8
use Aws\CommandInterface;
9
use Aws\S3\Exception\S3Exception;
10
use Aws\S3\S3ClientInterface;
11
use Aws\S3\S3ClientTrait;
12
use GuzzleHttp\Psr7\Response;
13
14
/**
15
 * @codeCoverageIgnore
16
 */
17
class S3ClientStub implements S3ClientInterface
18
{
19
    use S3ClientTrait;
20
21
    /**
22
     * @var S3ClientInterface
23
     */
24
    private $actualClient;
25
26
    /**
27
     * @var S3Exception[]
28
     */
29
    private $stagedExceptions = [];
30
31
    public function __construct(S3ClientInterface $client)
32
    {
33
        return $this->actualClient = $client;
0 ignored issues
show
Bug introduced by
Constructors do not have meaningful return values, anything that is returned from here is discarded. Are you sure this is correct?
Loading history...
34
    }
35
36
    public function failOnNextCopy(): void
37
    {
38
        $this->throwExceptionWhenExecutingCommand('CopyObject');
39
    }
40
41
    public function throwExceptionWhenExecutingCommand(string $commandName, S3Exception $exception = null): void
42
    {
43
        $this->stagedExceptions[$commandName] = $exception ?: new S3Exception($commandName, new Command($commandName));
44
    }
45
46
    public function throw500ExceptionWhenExecutingCommand(string $commandName): void
47
    {
48
        $response = new Response(500);
49
        $exception = new S3Exception($commandName, new Command($commandName), compact('response'));
50
51
        $this->throwExceptionWhenExecutingCommand($commandName, $exception);
52
    }
53
54
    public function execute(CommandInterface $command)
55
    {
56
        return $this->executeAsync($command)->wait();
57
    }
58
59
    public function getCommand($name, array $args = [])
60
    {
61
        return $this->actualClient->getCommand($name, $args);
62
    }
63
64
    public function getHandlerList()
65
    {
66
        return $this->actualClient->getHandlerList();
67
    }
68
69
    public function getIterator($name, array $args = [])
70
    {
71
        return $this->actualClient->getIterator($name, $args);
72
    }
73
74
    public function __call($name, array $arguments)
75
    {
76
        return $this->actualClient->__call($name, $arguments);
77
    }
78
79
    public function executeAsync(CommandInterface $command)
80
    {
81
        if (array_key_exists($name = $command->getName(), $this->stagedExceptions)) {
82
            $exception = $this->stagedExceptions[$name];
83
            unset($this->stagedExceptions[$name]);
84
            throw $exception;
85
        }
86
87
        return $this->actualClient->executeAsync($command);
88
    }
89
90
    public function getCredentials()
91
    {
92
        return $this->actualClient->getCredentials();
93
    }
94
95
    public function getRegion()
96
    {
97
        return $this->actualClient->getRegion();
98
    }
99
100
    public function getEndpoint()
101
    {
102
        return $this->actualClient->getEndpoint();
103
    }
104
105
    public function getApi()
106
    {
107
        return $this->actualClient->getApi();
108
    }
109
110
    public function getConfig($option = null)
111
    {
112
        return $this->actualClient->getConfig($option);
113
    }
114
115
    public function getPaginator($name, array $args = [])
116
    {
117
        return $this->actualClient->getPaginator($name, $args);
118
    }
119
120
    public function waitUntil($name, array $args = [])
121
    {
122
        $this->actualClient->waitUntil($name, $args);
123
    }
124
125
    public function getWaiter($name, array $args = [])
126
    {
127
        return $this->actualClient->getWaiter($name, $args);
128
    }
129
130
    public function createPresignedRequest(CommandInterface $command, $expires, array $options = [])
131
    {
132
        return $this->actualClient->createPresignedRequest($command, $expires, $options);
133
    }
134
135
    public function getObjectUrl($bucket, $key)
136
    {
137
        return $this->actualClient->getObjectUrl($bucket, $key);
138
    }
139
}
140