Completed
Push — master ( 8c0a67...1fafee )
by Grégoire
9s
created

ProxyMetadataBuilderTest::setUp()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 3
c 0
b 0
f 0
nc 2
nop 0
dl 0
loc 6
rs 9.4285
1
<?php
2
3
/*
4
 * This file is part of the Sonata Project package.
5
 *
6
 * (c) Thomas Rabaix <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace Sonata\MediaBundle\Tests\Metadata;
13
14
use AmazonS3 as AmazonClient;
15
use Gaufrette\Adapter\AmazonS3;
16
use Sonata\MediaBundle\Filesystem\Local;
17
use Sonata\MediaBundle\Filesystem\Replicate;
18
use Sonata\MediaBundle\Metadata\ProxyMetadataBuilder;
19
use Sonata\MediaBundle\Tests\Helpers\PHPUnit_Framework_TestCase;
20
21
class ProxyMetadataBuilderTest extends PHPUnit_Framework_TestCase
22
{
23
    public function testProxyAmazon()
24
    {
25
        $amazon = $this->getMockBuilder('Sonata\MediaBundle\Metadata\AmazonMetadataBuilder')->disableOriginalConstructor()->getMock();
26
        $amazon->expects($this->once())
27
            ->method('get')
28
            ->will($this->returnValue(array('key' => 'amazon')));
29
30
        $noop = $this->createMock('Sonata\MediaBundle\Metadata\NoopMetadataBuilder');
31
        $noop->expects($this->never())
32
            ->method('get')
33
            ->will($this->returnValue(array('key' => 'noop')));
34
35
        //adapter cannot be mocked
36
        $amazonclient = new AmazonClient(array('key' => 'XXXXXXXXXXXX', 'secret' => 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'));
37
        $adapter = new AmazonS3($amazonclient, '');
38
39
        $filesystem = $this->getMockBuilder('Gaufrette\Filesystem')->disableOriginalConstructor()->getMock();
40
        $filesystem->expects($this->any())->method('getAdapter')->will($this->returnValue($adapter));
41
42
        $provider = $this->createMock('Sonata\MediaBundle\Provider\MediaProviderInterface');
43
        $provider->expects($this->any())->method('getFilesystem')->will($this->returnValue($filesystem));
44
45
        $media = $this->createMock('Sonata\MediaBundle\Model\MediaInterface');
46
        $media->expects($this->any())
47
            ->method('getProviderName')
48
            ->will($this->returnValue('sonata.media.provider.image'));
49
50
        $filename = '/test/folder/testfile.png';
51
52
        $container = $this->getContainerMock(array(
53
            'sonata.media.metadata.noop' => $noop,
54
            'sonata.media.metadata.amazon' => $amazon,
55
            'sonata.media.provider.image' => $provider,
56
        ));
57
58
        $proxymetadatabuilder = new ProxyMetadataBuilder($container);
59
60
        $this->assertSame(array('key' => 'amazon'), $proxymetadatabuilder->get($media, $filename));
61
    }
62
63
    public function testProxyLocal()
64
    {
65
        $amazon = $this->getMockBuilder('Sonata\MediaBundle\Metadata\AmazonMetadataBuilder')->disableOriginalConstructor()->getMock();
66
        $amazon->expects($this->never())
67
            ->method('get')
68
            ->will($this->returnValue(array('key' => 'amazon')));
69
70
        $noop = $this->createMock('Sonata\MediaBundle\Metadata\NoopMetadataBuilder');
71
        $noop->expects($this->once())
72
            ->method('get')
73
            ->will($this->returnValue(array('key' => 'noop')));
74
75
        //adapter cannot be mocked
76
        $adapter = new Local('');
77
78
        $filesystem = $this->getMockBuilder('Gaufrette\Filesystem')->disableOriginalConstructor()->getMock();
79
        $filesystem->expects($this->any())->method('getAdapter')->will($this->returnValue($adapter));
80
81
        $provider = $this->createMock('Sonata\MediaBundle\Provider\MediaProviderInterface');
82
        $provider->expects($this->any())->method('getFilesystem')->will($this->returnValue($filesystem));
83
84
        $media = $this->createMock('Sonata\MediaBundle\Model\MediaInterface');
85
        $media->expects($this->any())
86
            ->method('getProviderName')
87
            ->will($this->returnValue('sonata.media.provider.image'));
88
89
        $filename = '/test/folder/testfile.png';
90
91
        $container = $this->getContainerMock(array(
92
            'sonata.media.metadata.noop' => $noop,
93
            'sonata.media.metadata.amazon' => $amazon,
94
            'sonata.media.provider.image' => $provider,
95
        ));
96
97
        $proxymetadatabuilder = new ProxyMetadataBuilder($container);
98
99
        $this->assertSame(array('key' => 'noop'), $proxymetadatabuilder->get($media, $filename));
100
    }
101
102
    public function testProxyNoProvider()
103
    {
104
        $amazon = $this->getMockBuilder('Sonata\MediaBundle\Metadata\AmazonMetadataBuilder')->disableOriginalConstructor()->getMock();
105
        $amazon->expects($this->never())
106
            ->method('get')
107
            ->will($this->returnValue(array('key' => 'amazon')));
108
109
        $noop = $this->createMock('Sonata\MediaBundle\Metadata\NoopMetadataBuilder');
110
        $noop->expects($this->never())
111
            ->method('get')
112
            ->will($this->returnValue(array('key' => 'noop')));
113
114
        //adapter cannot be mocked
115
        $adapter = new Local('');
116
117
        $filesystem = $this->getMockBuilder('Gaufrette\Filesystem')->disableOriginalConstructor()->getMock();
118
        $filesystem->expects($this->any())->method('getAdapter')->will($this->returnValue($adapter));
119
120
        $provider = $this->createMock('Sonata\MediaBundle\Provider\MediaProviderInterface');
121
        $provider->expects($this->any())->method('getFilesystem')->will($this->returnValue($filesystem));
122
123
        $media = $this->createMock('Sonata\MediaBundle\Model\MediaInterface');
124
        $media->expects($this->any())
125
            ->method('getProviderName')
126
            ->will($this->returnValue('wrongprovider'));
127
128
        $filename = '/test/folder/testfile.png';
129
130
        $container = $this->getContainerMock(array(
131
            'sonata.media.metadata.noop' => $noop,
132
            'sonata.media.metadata.amazon' => $amazon,
133
            'sonata.media.provider.image' => $provider,
134
        ));
135
136
        $proxymetadatabuilder = new ProxyMetadataBuilder($container);
137
138
        $this->assertSame(array(), $proxymetadatabuilder->get($media, $filename));
139
    }
140
141
    public function testProxyReplicateWithAmazon()
142
    {
143
        $amazon = $this->getMockBuilder('Sonata\MediaBundle\Metadata\AmazonMetadataBuilder')->disableOriginalConstructor()->getMock();
144
        $amazon->expects($this->once())
145
            ->method('get')
146
            ->will($this->returnValue(array('key' => 'amazon')));
147
148
        $noop = $this->createMock('Sonata\MediaBundle\Metadata\NoopMetadataBuilder');
149
        $noop->expects($this->never())
150
            ->method('get')
151
            ->will($this->returnValue(array('key' => 'noop')));
152
153
        //adapter cannot be mocked
154
        $amazonclient = new AmazonClient(array('key' => 'XXXXXXXXXXXX', 'secret' => 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'));
155
        $adapter1 = new AmazonS3($amazonclient, '');
156
        $adapter2 = new Local('');
157
        $adapter = new Replicate($adapter1, $adapter2);
158
159
        $filesystem = $this->getMockBuilder('Gaufrette\Filesystem')->disableOriginalConstructor()->getMock();
160
        $filesystem->expects($this->any())->method('getAdapter')->will($this->returnValue($adapter));
161
162
        $provider = $this->createMock('Sonata\MediaBundle\Provider\MediaProviderInterface');
163
        $provider->expects($this->any())->method('getFilesystem')->will($this->returnValue($filesystem));
164
165
        $media = $this->createMock('Sonata\MediaBundle\Model\MediaInterface');
166
        $media->expects($this->any())
167
            ->method('getProviderName')
168
            ->will($this->returnValue('sonata.media.provider.image'));
169
170
        $filename = '/test/folder/testfile.png';
171
172
        $container = $this->getContainerMock(array(
173
            'sonata.media.metadata.noop' => $noop,
174
            'sonata.media.metadata.amazon' => $amazon,
175
            'sonata.media.provider.image' => $provider,
176
        ));
177
178
        $proxymetadatabuilder = new ProxyMetadataBuilder($container);
179
180
        $this->assertSame(array('key' => 'amazon'), $proxymetadatabuilder->get($media, $filename));
181
    }
182
183
    public function testProxyReplicateWithoutAmazon()
184
    {
185
        $amazon = $this->getMockBuilder('Sonata\MediaBundle\Metadata\AmazonMetadataBuilder')->disableOriginalConstructor()->getMock();
186
        $amazon->expects($this->never())
187
            ->method('get')
188
            ->will($this->returnValue(array('key' => 'amazon')));
189
190
        $noop = $this->createMock('Sonata\MediaBundle\Metadata\NoopMetadataBuilder');
191
        $noop->expects($this->once())
192
            ->method('get')
193
            ->will($this->returnValue(array('key' => 'noop')));
194
195
        //adapter cannot be mocked
196
        $adapter1 = new Local('');
197
        $adapter2 = new Local('');
198
        $adapter = new Replicate($adapter1, $adapter2);
199
200
        $filesystem = $this->getMockBuilder('Gaufrette\Filesystem')->disableOriginalConstructor()->getMock();
201
        $filesystem->expects($this->any())->method('getAdapter')->will($this->returnValue($adapter));
202
203
        $provider = $this->createMock('Sonata\MediaBundle\Provider\MediaProviderInterface');
204
        $provider->expects($this->any())->method('getFilesystem')->will($this->returnValue($filesystem));
205
206
        $media = $this->createMock('Sonata\MediaBundle\Model\MediaInterface');
207
        $media->expects($this->any())
208
            ->method('getProviderName')
209
            ->will($this->returnValue('sonata.media.provider.image'));
210
211
        $filename = '/test/folder/testfile.png';
212
213
        $container = $this->getContainerMock(array(
214
            'sonata.media.metadata.noop' => $noop,
215
            'sonata.media.metadata.amazon' => $amazon,
216
            'sonata.media.provider.image' => $provider,
217
        ));
218
219
        $proxymetadatabuilder = new ProxyMetadataBuilder($container);
220
221
        $this->assertSame(array('key' => 'noop'), $proxymetadatabuilder->get($media, $filename));
222
    }
223
224
    /**
225
     * Return a mock object for the DI ContainerInterface.
226
     *
227
     * @param array $services A key-value list of services the container contains
228
     *
229
     * @return \PHPUnit_Framework_MockObject_MockObject
230
     */
231
    protected function getContainerMock(array $services)
232
    {
233
        $container = $this->createMock('Symfony\Component\DependencyInjection\ContainerInterface');
234
        $container
235
            ->expects($this->any())
236
            ->method('get')
237
            ->will($this->returnCallback(function ($service) use ($services) {
238
                return $services[$service];
239
            }))
240
        ;
241
        $container
242
            ->expects($this->any())
243
            ->method('has')
244
            ->will($this->returnCallback(function ($service) use ($services) {
245
                if (isset($services[$service])) {
246
                    return true;
247
                }
248
249
                return false;
250
            }))
251
        ;
252
253
        return $container;
254
    }
255
}
256