1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
<?php
use Jasny\Controller;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Message\ResponseInterface;
class ControllerTest extends PHPUnit_Framework_TestCase
{
/**
* Test running controller
*/
public function testInvoke()
{
$controller = $this->getMockBuilder(Controller::class)->disableOriginalConstructor()->getMockForAbstractClass();
list($request, $response) = $this->getRequests();
$controller->expects($this->once())->method('run')->will($this->returnValue($response));
$result = $controller($request, $response);
$this->assertEquals($response, $result, "Invoking controller should return 'ResponseInterface' instance");
$this->assertEquals($response, $controller->getResponse(), "Can not get 'ResponseInterface' instance from controller");
$this->assertEquals($request, $controller->getRequest(), "Can not get 'ServerRequestInterface' instance from controller");
}
/**
* Test response status functions if response object is not set
*/
public function testResponseStatusEmptyResponse()
{
$controller = $this->getMockBuilder(Controller::class)->disableOriginalConstructor()->getMockForAbstractClass();
$data = $this->getStatusCodesMap(null);
foreach ($data as $func => $value) {
$this->assertEquals($value, $controller->$func(), "Method '$func' returns incorrect value");
}
}
/**
* Test functions that check response status code
*
* @dataProvider responseStatusProvider
* @param int $statusCode
*/
public function testResponseStatus($code)
{
$controller = $this->getMockBuilder(Controller::class)->disableOriginalConstructor()->getMockForAbstractClass();
list($request, $response) = $this->getRequests();
$response->method('getStatusCode')->will($this->returnValue($code));
$controller($request, $response);
$data = $this->getStatusCodesMap($code);
foreach ($data as $func => $value) {
$this->assertEquals($value, $controller->$func(), "Method '$func' returns incorrect value");
}
$this->assertEquals($data['isClientError'] || $data['isServerError'], $controller->isError(), "Method 'isError' returns incorrect value");
}
/**
* Provide data for testing status methods
*
* @return array
*/
public function responseStatusProvider()
{
return [
[null], [199],
[200], [201], [299],
[300], [304], [399],
[400], [403], [499],
[500], [503]
];
}
/**
* Get map of status codes to states
*
* @param int $code
* @return []
*/
public function getStatusCodesMap($code)
{
return [
'isSuccessful' => !$code || ($code >= 200 && $code < 300),
'isRedirection' => $code >= 300 && $code < 400,
'isClientError' => $code >= 400 && $code < 500,
'isServerError' => $code >= 500
];
}
/**
* Get request and response instances
*
* @return array
*/
public function getRequests()
{
return [
$this->createMock(ServerRequestInterface::class),
$this->createMock(ResponseInterface::class)
];
}
}
|