Passed
Pull Request — master (#407)
by Kirill
06:33
created

AwsS3ResolverTest   A

Complexity

Total Complexity 2

Size/Duplication

Total Lines 82
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 45
c 1
b 0
f 0
dl 0
loc 82
rs 10
wmc 2

2 Methods

Rating   Name   Duplication   Size   Complexity  
A testBuildUrl() 0 45 1
A testWrongFsInfo() 0 23 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Spiral\Tests\Storage\Unit\Resolver;
6
7
use Aws\CommandInterface;
8
use Aws\S3\S3Client;
9
use League\Flysystem\AwsS3V3\AwsS3V3Adapter;
10
use Psr\Http\Message\RequestInterface;
11
use Spiral\Storage\Config\DTO\FileSystemInfo\Aws\AwsS3Info;
12
use Spiral\Storage\Config\DTO\FileSystemInfo\LocalInfo;
13
use Spiral\Storage\Exception\StorageException;
14
use Spiral\Storage\Resolver\AwsS3Resolver;
15
use Spiral\Tests\Storage\Traits\AwsS3FsBuilderTrait;
16
use Spiral\Tests\Storage\Traits\LocalFsBuilderTrait;
17
use Spiral\Tests\Storage\Unit\UnitTestCase;
18
19
class AwsS3ResolverTest extends UnitTestCase
20
{
21
    use LocalFsBuilderTrait;
22
    use AwsS3FsBuilderTrait;
23
24
    /**
25
     * @throws StorageException
26
     */
27
    public function testWrongFsInfo(): void
28
    {
29
        $this->expectException(StorageException::class);
30
        $this->expectExceptionMessage(
31
            \sprintf(
32
                'Wrong filesystem info (`%s`) for resolver `%s`',
33
                LocalInfo::class,
34
                AwsS3Resolver::class
35
            )
36
        );
37
38
        $localServer = 'local';
39
        $awsServer = 'aws';
40
41
        new AwsS3Resolver(
42
            $this->getUriParser(),
43
            $this->buildStorageConfig(
44
                [
45
                    $localServer => $this->buildLocalInfoDescription(),
46
                    $awsServer => $this->buildAwsS3ServerDescription(),
47
                ]
48
            ),
49
            $this->buildBucketNameByServer($localServer)
50
        );
51
    }
52
53
    /**
54
     * @throws StorageException
55
     */
56
    public function testBuildUrl(): void
57
    {
58
        $serverName = 'aws';
59
        $bucketName = 'awsBucket';
60
61
        $uri = 'http://some-host.com/somefile.txt';
62
63
        $commandMock = $this->createMock(CommandInterface::class);
64
65
        $requestMock = $this->createMock(RequestInterface::class);
66
67
        $requestMock->expects($this->exactly(2))
68
            ->method('getUri')
69
            ->willReturn($uri);
70
71
        $s3Client = $this->createMock(S3Client::class);
72
73
        $s3Client->expects($this->exactly(2))
74
            ->method('createPresignedRequest')
75
            ->willReturn($requestMock);
76
77
        $s3Client->expects($this->exactly(2))
78
            ->method('getCommand')
79
            ->willReturn($commandMock);
80
81
        $serverDescription = [
82
            AwsS3Info::ADAPTER_KEY => AwsS3V3Adapter::class,
83
            AwsS3Info::OPTIONS_KEY => [
84
                AwsS3Info::BUCKET_KEY => 'debugBucket',
85
                AwsS3Info::CLIENT_KEY => $s3Client,
86
            ],
87
        ];
88
89
        $resolver = new AwsS3Resolver(
90
            $this->getUriParser(),
91
            $this->buildStorageConfig(
92
                [$serverName => $serverDescription],
93
                [$bucketName => $this->buildServerBucketInfoDesc($serverName)]
94
            ),
95
            $bucketName
96
        );
97
98
        $this->assertEquals($uri, $resolver->buildUrl('somefile.txt'));
99
100
        $this->assertEquals($uri, $resolver->buildUrl('somefile.txt', [AwsS3Resolver::EXPIRES_OPTION => '+1hour']));
101
    }
102
}
103