Completed
Push — master ( ecd5d7...f9662e )
by Julián
11:22
created

RenderTest   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 99
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 7

Importance

Changes 3
Bugs 1 Features 0
Metric Value
wmc 6
c 3
b 1
f 0
lcom 1
cbo 7
dl 0
loc 99
rs 10
1
<?php
2
3
/*
4
 * janitor (http://juliangut.com/janitor).
5
 * Effortless maintenance management.
6
 *
7
 * @license BSD-3-Clause
8
 * @link https://github.com/juliangut/janitor
9
 * @author Julián Gutiérrez <[email protected]>
10
 */
11
12
namespace Janitor\Test\Handler;
13
14
use Janitor\Handler\Render;
15
use Janitor\ScheduledWatcher;
16
use Janitor\Watcher;
17
use Zend\Diactoros\Response;
18
use Zend\Diactoros\ServerRequestFactory;
19
20
/**
21
 * Class RenderTest.
22
 */
23
class RenderTest extends \PHPUnit_Framework_TestCase
24
{
25
    public function testStatus()
26
    {
27
        $watcher = $this->getMockBuilder(Watcher::class)->disableOriginalConstructor()->getMock();
28
        $watcher->expects(self::once())->method('isActive')->will(self::returnValue(false));
29
        $handler = new Render;
30
31
        /* @var \Psr\Http\Message\ResponseInterface $response */
32
        $response = $handler(ServerRequestFactory::fromGlobals(), new Response('php://temp'), $watcher);
33
34
        self::assertEquals(503, $response->getStatusCode());
35
        self::assertEquals('no-cache', $response->getHeaderLine('Pragma'));
36
        self::assertTrue($response->hasHeader('Cache-Control'));
37
    }
38
39
    public function testRenderingNotActiveHtml()
40
    {
41
        $watcher = $this->getMockBuilder(Watcher::class)->disableOriginalConstructor()->getMock();
42
        $watcher->expects(self::once())->method('isActive')->will(self::returnValue(false));
43
        $handler = new Render;
44
45
        /* @var \Psr\Http\Message\ResponseInterface $response */
46
        $response = $handler(ServerRequestFactory::fromGlobals(), new Response('php://temp'), $watcher);
47
48
        self::assertEquals('text/html', $response->getHeaderLine('Content-Type'));
49
        self::assertEquals('<html><head>', substr($response->getBody(), 0, 12));
50
        self::assertNotFalse(strpos($response->getBody(), 'Maintenance mode is not active!'));
51
    }
52
53
    public function testRenderingActiveHtml()
54
    {
55
        $watcher = $this->getMockBuilder(Watcher::class)->disableOriginalConstructor()->getMock();
56
        $watcher->expects(self::once())->method('isActive')->will(self::returnValue(true));
57
        $handler = new Render;
58
59
        /* @var \Psr\Http\Message\ResponseInterface $response */
60
        $request = ServerRequestFactory::fromGlobals();
61
        $request = $request->withHeader('Accept', 'text/html');
62
63
        $response = $handler($request, new Response('php://temp'), $watcher);
64
65
        self::assertEquals('text/html', $response->getHeaderLine('Content-Type'));
66
        self::assertEquals('<html><head>', substr($response->getBody(), 0, 12));
67
        self::assertNotFalse(strpos($response->getBody(), 'Undergoing maintenance tasks'));
68
    }
69
70
    public function testRenderingActiveJson()
71
    {
72
        $watcher = $this->getMockBuilder(Watcher::class)->disableOriginalConstructor()->getMock();
73
        $watcher->expects(self::once())->method('isActive')->will(self::returnValue(true));
74
        $handler = new Render;
75
76
        /* @var \Psr\Http\Message\ResponseInterface $response */
77
        $request = ServerRequestFactory::fromGlobals();
78
        $request = $request->withHeader('Accept', 'application/json');
79
80
        $response = $handler($request, new Response('php://temp'), $watcher);
81
82
        self::assertEquals('application/json', $response->getHeaderLine('Content-Type'));
83
        self::assertEquals(
84
            '{"message":"Undergoing maintenance tasks"}',
85
            (string) $response->getBody()
86
        );
87
    }
88
89
    public function testRenderingActiveXml()
90
    {
91
        $watcher = $this->getMockBuilder(Watcher::class)->disableOriginalConstructor()->getMock();
92
        $watcher->expects(self::once())->method('isActive')->will(self::returnValue(true));
93
        $handler = new Render;
94
95
        /* @var \Psr\Http\Message\ResponseInterface $response */
96
        $request = ServerRequestFactory::fromGlobals();
97
        $request = $request->withHeader('Accept', 'application/xml');
98
99
        $response = $handler($request, new Response('php://temp'), $watcher);
100
101
        self::assertEquals('application/xml', $response->getHeaderLine('Content-Type'));
102
        self::assertEquals(
103
            '<maintenance><message>Undergoing maintenance tasks</message></maintenance>',
104
            (string) $response->getBody()
105
        );
106
    }
107
108
    public function testRenderingScheduled()
109
    {
110
        $watcher = $this->getMockBuilder(ScheduledWatcher::class)->disableOriginalConstructor()->getMock();
111
        $watcher->expects(self::once())->method('isActive')->will(self::returnValue(true));
112
        $watcher->expects(self::any())->method('getEnd')->will(self::returnValue(new \DateTime));
113
        $handler = new Render;
114
115
        /* @var \Psr\Http\Message\ResponseInterface $response */
116
        $response = $handler(ServerRequestFactory::fromGlobals(), new Response('php://temp'), $watcher);
117
118
        self::assertTrue($response->hasHeader('Expires'));
119
        self::assertNotFalse(strpos($response->getBody(), 'Undergoing maintenance tasks until'));
120
    }
121
}
122