Passed
Pull Request — master (#8)
by Robbie
03:27
created

CrazyEggMiddlewareTest::testScriptInsertion()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 16
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 11
nc 2
nop 2
dl 0
loc 16
rs 9.9
c 0
b 0
f 0
1
<?php
2
3
namespace SilverStripe\CrazyEgg\Tests;
4
5
use SilverStripe\Control\HTTPRequest;
6
use SilverStripe\Control\HTTPResponse;
7
use SilverStripe\Control\Session;
8
use SilverStripe\CrazyEgg\CrazyEggMiddleware;
9
use SilverStripe\CrazyEgg\TagProvider;
10
use SilverStripe\Dev\SapphireTest;
11
use SilverStripe\ORM\FieldType\DBField;
12
use SilverStripe\View\ViewableData;
13
14
class CrazyEggMiddlewareTest extends SapphireTest
15
{
16
    /**
17
     * @dataProvider sampleResponses
18
     *
19
     * @param HTTPResponse $response
20
     * @param bool $match
21
     */
22
    public function testScriptInsertion($response, $match)
23
    {
24
        $tag = DBField::create_field(
25
            "HTMLText",
26
            "<script>'use strict'</script>"
27
        );
28
29
        if ($match) {
30
            $this->assertRegExp(
31
                "#<script>'use strict'</script></head>#is",
32
                $this->checkMiddlewareForResponse($response, $tag)->getBody()
33
            );
34
        } else {
35
            $this->assertNotRegExp(
36
                "#<script>'use strict'</script></head>#is",
37
                $this->checkMiddlewareForResponse($response, $tag)->getBody()
38
            );
39
        }
40
    }
41
42
    /**
43
     * @return array[]
44
     */
45
    public function sampleResponses()
46
    {
47
        $responses = array();
48
49
        $responses[] = array(
50
            new HTTPResponse("<html><head></head><body><p>regular response has script added</p></body></html>"),
51
            true
52
        );
53
54
        $responses[] = array(
55
            new HTTPResponse("<p>fragment doesn't have script added</p>"),
56
            false
57
        );
58
59
        $response = new HTTPResponse(
60
            "<html><head></head><body><p>plain text response doesn't have script added</p></body></html>"
61
        );
62
        $response->addHeader("Content-Type", "text/plain");
63
64
        $responses[] = array($response, false);
65
66
        return $responses;
67
    }
68
69
    /**
70
     * @param HTTPResponse $response
71
     * @param ViewableData $tag
72
     *
73
     * @return HTTPResponse
74
     */
75
    public function checkMiddlewareForResponse(HTTPResponse $response, ViewableData $tag)
76
    {
77
        $request = new HTTPRequest('GET', '/');
78
        $session = new Session(array());
79
        $request->setSession($session);
80
81
        $middleware = new CrazyEggMiddleware();
82
        $middleware->setTagProvider($tag);
83
84
        $response = $middleware->process($request, function () use ($response) {
85
            return $response;
86
        });
87
88
        return $response;
89
    }
90
}
91