Completed
Push — master ( 81acf3...241a18 )
by
unknown
60:32 queued 45:22
created

ThumbnailChainStrategyTest   A

Complexity

Total Complexity 2

Size/Duplication

Total Lines 84
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 5

Importance

Changes 0
Metric Value
dl 0
loc 84
rs 10
c 0
b 0
f 0
wmc 2
lcom 1
cbo 5

2 Methods

Rating   Name   Duplication   Size   Complexity  
A testThumbnailStrategyChaining() 0 34 1
A testThumbnailStrategyChainBreakOnThumbnailFound() 0 46 1
1
<?php
2
3
/**
4
 * @copyright Copyright (C) eZ Systems AS. All rights reserved.
5
 * @license For full copyright and license information view LICENSE file distributed with this source code.
6
 */
7
declare(strict_types=1);
8
9
namespace eZ\Publish\Core\Repository\Tests\ContentThumbnail;
10
11
use eZ\Publish\API\Repository\Values\Content\Field;
12
use eZ\Publish\API\Repository\Values\Content\Thumbnail;
13
use eZ\Publish\API\Repository\Values\ContentType\ContentType;
14
use eZ\Publish\Core\Repository\Strategy\ContentThumbnail\ThumbnailChainStrategy;
15
use eZ\Publish\SPI\Repository\Strategy\ContentThumbnail\ThumbnailStrategy;
16
use PHPUnit\Framework\TestCase;
17
18
class ThumbnailChainStrategyTest extends TestCase
19
{
20
    public function testThumbnailStrategyChaining(): void
21
    {
22
        $firstStrategyMock = $this->createMock(ThumbnailStrategy::class);
23
        $secondStrategyMock = $this->createMock(ThumbnailStrategy::class);
24
25
        $contentTypeMock = $this->createMock(ContentType::class);
26
        $fieldMocks = [
27
            $this->createMock(Field::class),
28
            $this->createMock(Field::class),
29
            $this->createMock(Field::class),
30
        ];
31
32
        $firstStrategyMock
33
            ->expects($this->once())
34
            ->method('getThumbnail')
35
            ->willReturn(null);
36
37
        $secondStrategyMock
38
            ->expects($this->once())
39
            ->method('getThumbnail')
40
            ->willReturn(new Thumbnail());
41
42
        $thumbnailChainStrategy = new ThumbnailChainStrategy([
43
            $firstStrategyMock,
44
            $secondStrategyMock,
45
        ]);
46
47
        $result = $thumbnailChainStrategy->getThumbnail(
48
            $contentTypeMock,
49
            $fieldMocks
50
        );
51
52
        $this->assertInstanceOf(Thumbnail::class, $result);
53
    }
54
55
    public function testThumbnailStrategyChainBreakOnThumbnailFound(): void
56
    {
57
        $firstStrategyMock = $this->createMock(ThumbnailStrategy::class);
58
        $secondStrategyMock = $this->createMock(ThumbnailStrategy::class);
59
        $thirdStrategyMock = $this->createMock(ThumbnailStrategy::class);
60
61
        $contentTypeMock = $this->createMock(ContentType::class);
62
        $fieldMocks = [
63
            $this->createMock(Field::class),
64
            $this->createMock(Field::class),
65
            $this->createMock(Field::class),
66
        ];
67
68
        $firstStrategyMock
69
            ->expects($this->once())
70
            ->method('getThumbnail')
71
            ->willReturn(null);
72
73
        $secondStrategyMock
74
            ->expects($this->once())
75
            ->method('getThumbnail')
76
            ->willReturn(new Thumbnail([
77
                'resource' => 'second',
78
            ]));
79
80
        $thirdStrategyMock
81
            ->expects($this->never())
82
            ->method('getThumbnail')
83
            ->willReturn(new Thumbnail([
84
                'resource' => 'third',
85
            ]));
86
87
        $thumbnailChainStrategy = new ThumbnailChainStrategy([
88
            $firstStrategyMock,
89
            $secondStrategyMock,
90
            $thirdStrategyMock,
91
        ]);
92
93
        $result = $thumbnailChainStrategy->getThumbnail(
94
            $contentTypeMock,
95
            $fieldMocks
96
        );
97
98
        $this->assertInstanceOf(Thumbnail::class, $result);
99
        $this->assertEquals(new Thumbnail(['resource' => 'second']), $result);
100
    }
101
}
102