Passed
Pull Request — 4 (#9509)
by Brett
07:12
created

SimpleResourceURLGeneratorTest::testAddSha1()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 11
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 7
nc 1
nop 0
dl 0
loc 11
rs 10
c 1
b 0
f 0
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(
36
            __DIR__ . '/SimpleResourceURLGeneratorTest/_fakewebroot/basemodule/client/file.js'
37
        );
38
        $this->assertEquals(
39
            '/' . RESOURCES_DIR . '/basemodule/client/file.js?m=' . $mtime,
40
            $generator->urlForResource('basemodule/client/file.js')
41
        );
42
    }
43
44
    public function testAddSha1()
45
    {
46
        /** @var SimpleResourceURLGenerator $generator */
47
        $generator = Injector::inst()->get(ResourceURLGenerator::class);
48
        $generator->setNonceStyle('sha1');
49
        $hash = sha1_file(
50
            __DIR__ . '/SimpleResourceURLGeneratorTest/_fakewebroot/basemodule/client/file.js'
51
        );
52
        $this->assertEquals(
53
            '/' . RESOURCES_DIR . '/basemodule/client/file.js?m=' . $hash,
54
            $generator->urlForResource('basemodule/client/file.js')
55
        );
56
    }
57
58
    public function testAddMd5()
59
    {
60
        /** @var SimpleResourceURLGenerator $generator */
61
        $generator = Injector::inst()->get(ResourceURLGenerator::class);
62
        $generator->setNonceStyle('md5');
63
        $hash = md5_file(
64
            __DIR__ . '/SimpleResourceURLGeneratorTest/_fakewebroot/basemodule/client/file.js'
65
        );
66
        $this->assertEquals(
67
            '/' . RESOURCES_DIR . '/basemodule/client/file.js?m=' . $hash,
68
            $generator->urlForResource('basemodule/client/file.js')
69
        );
70
    }
71
72
    public function testVendorResource()
73
    {
74
        /** @var SimpleResourceURLGenerator $generator */
75
        $generator = Injector::inst()->get(ResourceURLGenerator::class);
76
        $mtime = filemtime(
77
            __DIR__ . '/SimpleResourceURLGeneratorTest/_fakewebroot/vendor/silverstripe/mymodule/client/style.css'
78
        );
79
        $this->assertEquals(
80
            '/' . RESOURCES_DIR . '/vendor/silverstripe/mymodule/client/style.css?m=' . $mtime,
81
            $generator->urlForResource('vendor/silverstripe/mymodule/client/style.css')
82
        );
83
    }
84
85
    public function testPublicDirResource()
86
    {
87
        /** @var SimpleResourceURLGenerator $generator */
88
        $generator = Injector::inst()->get(ResourceURLGenerator::class);
89
        $mtime = filemtime(
90
            __DIR__ . '/SimpleResourceURLGeneratorTest/_fakewebroot/public/basemodule/css/style.css'
91
        );
92
93
        $this->assertEquals(
94
            '/basemodule/css/style.css?m=' . $mtime,
95
            $generator->urlForResource('public/basemodule/css/style.css')
96
        );
97
98
        $mtime = filemtime(
99
            __DIR__ . '/SimpleResourceURLGeneratorTest/_fakewebroot/basemodule/client/file.js'
100
        );
101
102
        $this->assertEquals(
103
            '/' . RESOURCES_DIR . '/basemodule/client/file.js?m=' . $mtime,
104
            $generator->urlForResource('basemodule/client/file.js')
105
        );
106
    }
107
108
    public function testModuleResource()
109
    {
110
        /** @var SimpleResourceURLGenerator $generator */
111
        $generator = Injector::inst()->get(ResourceURLGenerator::class);
112
        $module = new Module(
113
            __DIR__ . '/SimpleResourceURLGeneratorTest/_fakewebroot/vendor/silverstripe/mymodule/',
114
            __DIR__ . '/SimpleResourceURLGeneratorTest/_fakewebroot/'
115
        );
116
        $mtime = filemtime(
117
            __DIR__ . '/SimpleResourceURLGeneratorTest/_fakewebroot/vendor/silverstripe/mymodule/client/style.css'
118
        );
119
        $this->assertEquals(
120
            '/' . RESOURCES_DIR . '/vendor/silverstripe/mymodule/client/style.css?m=' . $mtime,
121
            $generator->urlForResource($module->getResource('client/style.css'))
122
        );
123
    }
124
125
    public function testURLForResourceFailsGracefully()
126
    {
127
        /** @var SimpleResourceURLGenerator $generator */
128
        $generator = Injector::inst()->get(ResourceURLGenerator::class);
129
        $url = @$generator->urlForResource('doesnotexist.jpg');
130
        $this->assertEquals('/doesnotexist.jpg', $url);
131
    }
132
133
    public function testAbsoluteResource()
134
    {
135
        /** @var SimpleResourceURLGenerator $generator */
136
        $generator = Injector::inst()->get(ResourceURLGenerator::class);
137
        $fakeExternalAsset = 'https://cdn.example.com/some_library.css';
138
        $this->assertEquals($fakeExternalAsset, $generator->urlForResource($fakeExternalAsset));
139
    }
140
}
141