Passed
Push — master ( 1e501a...58b99e )
by Adrien
08:31
created

ImageResizerTest::providerResize()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 17
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 13
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 17
rs 9.8333
1
<?php
2
3
declare(strict_types=1);
4
5
namespace EcodevTests\Felix\Service;
6
7
use Ecodev\Felix\Model\Image;
8
use Ecodev\Felix\Service\ImageResizer;
9
use Imagine\Image\ImageInterface;
10
use Imagine\Image\ImagineInterface;
11
use PHPUnit\Framework\TestCase;
12
13
class ImageResizerTest extends TestCase
14
{
15
    /**
16
     * @dataProvider providerResize
17
     */
18
    public function testResize(int $wantedHeight, bool $useWebp, bool $isSvg, string $expected): void
19
    {
20
        $imagineImage = $this->createMock(ImageInterface::class);
21
        $imagineImage->expects(self::any())->method('thumbnail')->willReturnSelf();
22
23
        $imagine = $this->createMock(ImagineInterface::class);
24
        $imagine->expects(self::any())->method('open')->willReturn($imagineImage);
25
26
        $resizer = new ImageResizer($imagine);
27
        $image = $this->createMock(Image::class);
28
        $image->expects(self::once())->method('getPath')->willReturn($isSvg ? '/felix/image.svg' : '/felix/image.png');
29
        $image->expects(self::any())->method('getFilename')->willReturn($isSvg ? 'image.svg' : 'image.png');
30
        $image->expects(self::once())->method('getHeight')->willReturn(200);
31
        $image->expects(self::any())->method('getMime')->willReturn($isSvg ? 'image/svg+xml' : 'image/png');
32
33
        $actual = $resizer->resize($image, $wantedHeight, $useWebp);
34
        self::assertStringEndsWith($expected, $actual);
35
    }
36
37
    public function providerResize(): array
38
    {
39
        return [
40
            'smaller' => [100, false, false, 'data/cache/images/image-100.jpg'],
41
            'smaller webp' => [100, true, false, 'data/cache/images/image-100.webp'],
42
            'same' => [200, false, false, '/felix/image.png'],
43
            'same webp' => [200, true, false, '/felix/image.png'],
44
            'bigger' => [300, false, false, '/felix/image.png'],
45
            'bigger webp' => [300, true, false, '/felix/image.png'],
46
47
            // SVG is never resized
48
            'svg smaller' => [100, false, true, '/felix/image.svg'],
49
            'svg smaller webp' => [100, true, true, '/felix/image.svg'],
50
            'svg same' => [200, false, true, '/felix/image.svg'],
51
            'svg same webp' => [200, true, true, '/felix/image.svg'],
52
            'svg bigger' => [300, false, true, '/felix/image.svg'],
53
            'svg bigger webp' => [300, true, true, '/felix/image.svg'],
54
        ];
55
    }
56
}
57