Passed
Push — 4 ( 8d762e...bca470 )
by Damian
05:11
created

testAbsoluteResource()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 3
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 6
rs 9.4285
1
<?php
2
3
namespace SilverStripe\Control\Tests;
4
5
use SilverStripe\Control\Director;
6
use SilverStripe\Control\SimpleResourceURLGenerator;
7
use SilverStripe\Core\Injector\Injector;
8
use SilverStripe\Core\Manifest\Module;
9
use SilverStripe\Core\Manifest\ResourceURLGenerator;
10
use SilverStripe\Dev\SapphireTest;
11
12
class SimpleResourceURLGeneratorTest extends SapphireTest
13
{
14
    protected function setUp()
15
    {
16
        parent::setUp();
17
        Director::config()->set(
18
            'alternate_base_folder',
19
            __DIR__ . '/SimpleResourceURLGeneratorTest/_fakewebroot'
20
        );
21
        Director::config()->set(
22
            'alternate_base_url',
23
            'http://www.mysite.com/'
24
        );
25
        Director::config()->set(
26
            'alternate_public_dir',
27
            'public'
28
        );
29
    }
30
31
    public function testAddMTime()
32
    {
33
        /** @var SimpleResourceURLGenerator $generator */
34
        $generator = Injector::inst()->get(ResourceURLGenerator::class);
35
        $mtime = filemtime(__DIR__ . '/SimpleResourceURLGeneratorTest/_fakewebroot/basemodule/client/file.js');
36
        $this->assertEquals(
37
            '/resources/basemodule/client/file.js?m=' . $mtime,
38
            $generator->urlForResource('basemodule/client/file.js')
39
        );
40
    }
41
42
    public function testVendorResource()
43
    {
44
        /** @var SimpleResourceURLGenerator $generator */
45
        $generator = Injector::inst()->get(ResourceURLGenerator::class);
46
        $mtime = filemtime(
47
            __DIR__ . '/SimpleResourceURLGeneratorTest/_fakewebroot/vendor/silverstripe/mymodule/client/style.css'
48
        );
49
        $this->assertEquals(
50
            '/resources/vendor/silverstripe/mymodule/client/style.css?m=' . $mtime,
51
            $generator->urlForResource('vendor/silverstripe/mymodule/client/style.css')
52
        );
53
    }
54
55
    public function testPublicDirResource()
56
    {
57
        /** @var SimpleResourceURLGenerator $generator */
58
        $generator = Injector::inst()->get(ResourceURLGenerator::class);
59
        $mtime = filemtime(
60
            __DIR__ . '/SimpleResourceURLGeneratorTest/_fakewebroot/public/basemodule/css/style.css'
61
        );
62
63
        $this->assertEquals(
64
            '/basemodule/css/style.css?m=' . $mtime,
65
            $generator->urlForResource('public/basemodule/css/style.css')
66
        );
67
68
        $mtime = filemtime(
69
            __DIR__ . '/SimpleResourceURLGeneratorTest/_fakewebroot/basemodule/client/file.js'
70
        );
71
72
        $this->assertEquals(
73
            '/resources/basemodule/client/file.js?m=' . $mtime,
74
            $generator->urlForResource('basemodule/client/file.js')
75
        );
76
    }
77
78
    public function testModuleResource()
79
    {
80
        /** @var SimpleResourceURLGenerator $generator */
81
        $generator = Injector::inst()->get(ResourceURLGenerator::class);
82
        $module = new Module(
83
            __DIR__ . '/SimpleResourceURLGeneratorTest/_fakewebroot/vendor/silverstripe/mymodule/',
84
            __DIR__ . '/SimpleResourceURLGeneratorTest/_fakewebroot/'
85
        );
86
        $mtime = filemtime(
87
            __DIR__ . '/SimpleResourceURLGeneratorTest/_fakewebroot/vendor/silverstripe/mymodule/client/style.css'
88
        );
89
        $this->assertEquals(
90
            '/resources/vendor/silverstripe/mymodule/client/style.css?m=' . $mtime,
91
            $generator->urlForResource($module->getResource('client/style.css'))
92
        );
93
    }
94
95
    public function testURLForResourceFailsGracefully()
96
    {
97
        /** @var SimpleResourceURLGenerator $generator */
98
        $generator = Injector::inst()->get(ResourceURLGenerator::class);
99
        $url = @$generator->urlForResource('doesnotexist.jpg');
100
        $this->assertEquals('/doesnotexist.jpg', $url);
101
    }
102
103
    public function testAbsoluteResource()
104
    {
105
        /** @var SimpleResourceURLGenerator $generator */
106
        $generator = Injector::inst()->get(ResourceURLGenerator::class);
107
        $fakeExternalAsset = 'https://cdn.example.com/some_library.css';
108
        $this->assertEquals($fakeExternalAsset, $generator->urlForResource($fakeExternalAsset));
109
    }
110
}
111