Passed
Push — master ( ddbf8b...086098 )
by Robbie
11:17
created

ConfirmationMiddlewareTest   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 68
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 39
dl 0
loc 68
rs 10
c 0
b 0
f 0
wmc 3

3 Methods

Rating   Name   Duplication   Size   Complexity  
A testConfirmationItems() 0 12 1
A testBypass() 0 12 1
A testProcess() 0 36 1
1
<?php
2
3
namespace SilverStripe\Control\Tests\Middleware;
4
5
use SilverStripe\Control\HTTPResponse;
6
use SilverStripe\Control\Middleware\ConfirmationMiddleware;
7
use SilverStripe\Control\Middleware\ConfirmationMiddleware\Url;
8
use SilverStripe\Control\Tests\HttpRequestMockBuilder;
9
use SilverStripe\Dev\SapphireTest;
10
11
class ConfirmationMiddlewareTest extends SapphireTest
12
{
13
    use HttpRequestMockBuilder;
14
15
    public function testBypass()
16
    {
17
        $request = $this->buildRequestMock('dev/build', ['flush' => 'all']);
18
19
        $middleware = new ConfirmationMiddleware(new Url('dev/build'));
20
        $this->assertFalse($middleware->canBypass($request));
21
22
        $middleware->setBypasses([new Url('no-match')]);
23
        $this->assertFalse($middleware->canBypass($request));
24
25
        $middleware->setBypasses([new Url('dev/build')]);
26
        $this->assertTrue($middleware->canBypass($request));
27
    }
28
29
    public function testConfirmationItems()
30
    {
31
        $request = $this->buildRequestMock('dev/build', ['flush' => 'all']);
32
33
        $middleware = new ConfirmationMiddleware(
34
            new Url('dev/build'),
35
            new Url('dev/build', null, ['flush' => null])
36
        );
37
38
        $items = $middleware->getConfirmationItems($request);
39
40
        $this->assertCount(2, $items);
41
    }
42
43
    public function testProcess()
44
    {
45
        $request = $this->buildRequestMock('dev/build', ['flush' => 'all']);
46
47
        // Testing the middleware does not do anything if rules do not apply
48
        $middleware = new ConfirmationMiddleware(new Url('no-match'));
49
        $next = false;
50
        $middleware->process(
51
            $request,
52
            static function () use (&$next) {
53
                $next = true;
54
            }
55
        );
56
        $this->assertTrue($next);
57
58
        // Test for a redirection when rules hit the request
59
        $middleware = new ConfirmationMiddleware(new Url('dev/build'));
60
        $next = false;
61
        $response = $middleware->process(
62
            $request,
63
            static function () use (&$next) {
64
                $next = true;
65
            }
66
        );
67
        $this->assertFalse($next);
68
        $this->assertInstanceOf(HTTPResponse::class, $response);
69
        $this->assertEquals(302, $response->getStatusCode());
70
        $this->assertEquals('/dev/confirm/middleware', $response->getHeader('location'));
71
72
        // Test bypasses have more priority than rules
73
        $middleware->setBypasses([new Url('dev/build')]);
74
        $next = false;
75
        $response = $middleware->process(
0 ignored issues
show
Unused Code introduced by
The assignment to $response is dead and can be removed.
Loading history...
76
            $request,
77
            static function () use (&$next) {
78
                $next = true;
79
            }
80
        );
81
    }
82
}
83