DeferBackendTest::testWrapScripts()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 20
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 3
Bugs 1 Features 0
Metric Value
eloc 14
c 3
b 1
f 0
dl 0
loc 20
rs 9.7998
cc 1
nc 1
nop 0
1
<?php
2
3
namespace LeKoala\DeferBackend\Test;
4
5
use LeKoala\DeferBackend\CspProvider;
6
use SilverStripe\Dev\SapphireTest;
7
use LeKoala\DeferBackend\DeferBackend;
8
use SilverStripe\Control\HTTPResponse;
9
10
class DeferBackendTest extends SapphireTest
11
{
12
    public function testWriteToHeader(): void
13
    {
14
        $backend = new DeferBackend;
15
        $this->assertFalse($backend->writeJavascriptToBody);
16
    }
17
18
    public function testNonce(): void
19
    {
20
        $this->assertNotEmpty(CspProvider::getCspNonce());
21
    }
22
23
    public function testProvideTemplate(): void
24
    {
25
        $this->assertContains("getCspNonce", CspProvider::get_template_global_variables());
26
    }
27
28
    public function testAddSecurityHeaders(): void
29
    {
30
        $res = new HTTPResponse();
31
        CspProvider::addSecurityHeaders($res);
32
33
        $headers = array_keys($res->getHeaders());
34
        $this->assertContains('referrer-policy', $headers, "Header not found in : " . implode(", ", $headers));
35
    }
36
37
    public function testWrapScripts(): void
38
    {
39
        $backend = new DeferBackend;
40
        $backend->customScript("var test = 'test';");
41
42
        $sampleHTML = <<<HTML
43
<html>
44
<head></head>
45
<body></body>
46
</html>
47
HTML;
48
        $resultHTML = $backend->includeInHTML($sampleHTML);
49
        $this->assertStringContainsString("window.addEventListener('DOMContentLoaded'", $resultHTML);
50
51
        // not for js modules
52
        $backend->clear();
53
        $backend->customScript("var test = 'test';", "jsmodule");
54
55
        $resultHTML = $backend->includeInHTML($sampleHTML);
56
        $this->assertStringNotContainsString("window.addEventListener('DOMContentLoaded'", $resultHTML);
57
    }
58
}
59