Passed
Pull Request — 4 (#10244)
by Steve
08:00
created

EmbedContainerTest::getFallbackEmbedContainer()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 1
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 3
rs 10
1
<?php
2
3
namespace SilverStripe\View\Tests\Embed;
4
5
use Embed\Extractor;
6
use Embed\Http\Crawler;
7
use SilverStripe\View\Embed\EmbedContainer;
8
use SilverStripe\AssetAdmin\Controller\AssetAdmin;
0 ignored issues
show
Bug introduced by
The type SilverStripe\AssetAdmin\Controller\AssetAdmin was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
9
10
class EmbedContainerTest extends EmbedUnitTest
11
{
12
    public function testGetDimensions()
13
    {
14
        $container = $this->getEmbedContainer();
15
        $this->assertSame(480, $container->getWidth());
16
        $this->assertSame(270, $container->getHeight());
17
        $container = $this->getFallbackEmbedContainer();
18
        $this->assertSame(100, $container->getWidth());
19
        $this->assertSame(100, $container->getHeight());
20
    }
21
22
    public function testGetPreviewURL()
23
    {
24
        $container = $this->getEmbedContainer();
25
        $this->assertSame('https://www.youtube.com/watch?v=iRXJXaLV0n4', $container->getPreviewURL());
26
        $container = $this->getFallbackEmbedContainer();
27
        if (class_exists(AssetAdmin::class)) {
28
            $this->assertStringContainsString('client/dist/images/icon_file.png', $container->getPreviewURL());
29
        }
30
    }
31
32
    public function testGetName()
33
    {
34
        $container = $this->getEmbedContainer();
35
        $this->assertSame('Try to stay SERIOUS -The most popular CAT videos', $container->getName());
36
    }
37
38
    public function testGetType()
39
    {
40
        $container = $this->getEmbedContainer();
41
        $this->assertSame('rich', $container->getType());
42
        $container = $this->getEmbedContainer(
43
            <<<EOT
44
            <video width="320" height="240" controls>
45
                <source src="movie.ogg" type="video/ogg">
46
                Your browser does not support the video tag.
47
            </video> 
48
            EOT
49
        );
50
        $this->assertSame('video', $container->getType());
51
        $container = $this->getEmbedContainer(
52
            <<<EOT
53
            <audio controls>
54
                <source src="horse.ogg" type="audio/ogg">
55
                Your browser does not support the audio element.
56
            </audio> 
57
            EOT
58
        );
59
        $this->assertSame('audio', $container->getType());
60
        $container = $this->getEmbedContainer(
61
            <<<EOT
62
            <a data-flickr-embed="true" href="https://www.flickr.com/photos/philocycler/32119532132/"><img src="https://live.staticflickr.com/759/32119532132_50c3f7933f_b.jpg" width="1024" height="742" alt="bird"></a>
63
            EOT
64
        );
65
        $this->assertSame('photo', $container->getType());
66
        $container = $this->getEmbedContainer('<p>Lorem ipsum</p>');
67
        $this->assertSame('link', $container->getType());
68
    }
69
70
    public function testValidate()
71
    {
72
        $container = $this->getEmbedContainer();
73
        $this->assertTrue($container->validate());
74
        $container = $this->getFallbackEmbedContainer();
75
        $this->assertFalse($container->validate());
76
    }
77
78
    public function testOptions()
79
    {
80
        $options = ['foo' => 'bar'];
81
        $container = $this->getEmbedContainer();
82
        $this->assertSame([], $container->getOptions());
83
        $container->setOptions($options);
84
        $this->assertSame($options, $container->getOptions());
85
    }
86
87
    public function testGetExtractor()
88
    {
89
        $container = $this->getEmbedContainer();
90
        $extractor = $container->getExtractor();
91
        $this->assertTrue($extractor instanceof Extractor);
92
        $this->assertSame('Try to stay SERIOUS -The most popular CAT videos', $extractor->title);
93
    }
94
95
    private function getFallbackEmbedContainer()
96
    {
97
        return $this->createEmbedContainer('', '', '', '');
98
    }
99
100
    private function getEmbedContainer(string $htmlOverride = '')
101
    {
102
        $html = $htmlOverride ?: implode('', [
103
            '<iframe width="480" height="270" src="https://www.youtube.com/embed/iRXJXaLV0n4?feature=oembed" ',
104
            'frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>'
105
        ]);
106
        $url = 'https://www.youtube.com/watch?v=iRXJXaLV0n4';
107
        return $this->createEmbedContainer(
108
            $url,
109
            $url,
110
            implode('', [
111
                '<html><link rel="alternate" type="application/json+oembed" ',
112
                'href="https://www.youtube.com/oembed?format=json&amp;',
113
                'url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DiRXJXaLV0n4" ',
114
                'title="Try to stay SERIOUS -The most popular CAT videos"></html>'
115
            ]),
116
            json_encode([
117
                'author_url' => 'https://www.youtube.com/channel/UCR2KG2dK1tAkwZZjm7rAiSg',
118
                'thumbnail_width' => 480,
119
                'title' => 'Try to stay SERIOUS -The most popular CAT videos',
120
                'width' => 480,
121
                'provider_name' => 'YouTube',
122
                'author_name' => 'Tiger Funnies',
123
                'height' => 270,
124
                'version' => '1.0',
125
                'type' => 'video',
126
                // phpcs:ignore
127
                'html' => $html,
128
                'provider_url' => 'https://www.youtube.com/',
129
                'thumbnail_height' => 360,
130
                'thumbnail_url' => 'https://i.ytimg.com/vi/iRXJXaLV0n4/hqdefault.jpg',
131
            ])
132
        );
133
    }
134
}
135