Passed
Push — phpunit8 ( f24111 )
by Sam
08:30
created

ConfirmationMiddlewareTest::testBypass()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 12
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

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