Completed
Push — fetcher_factories ( ef2a05...ec83ea )
by David
02:27
created

SplashDefaultRouterTest::testRootUrlError()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 12
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 12
rs 9.4285
cc 1
eloc 8
nc 1
nop 0
1
<?php
2
3
namespace Mouf\Mvc\Splash\Routers;
4
5
use Mouf\Mvc\Splash\Fixtures\TestController2;
6
use Mouf\Mvc\Splash\Services\ControllerRegistry;
7
use Mouf\Mvc\Splash\Services\ParameterFetcherRegistry;
8
use Mouf\Mvc\Splash\Services\SplashUtils;
9
use Mouf\Mvc\Splash\Utils\SplashException;
10
use Mouf\Picotainer\Picotainer;
11
use Zend\Diactoros\Response\HtmlResponse;
12
use Zend\Diactoros\Response\JsonResponse;
13
use Zend\Diactoros\Response\RedirectResponse;
14
use Zend\Diactoros\ServerRequest;
15
16
class SplashDefaultRouterTest extends \PHPUnit_Framework_TestCase
17
{
18
    public function testRoute()
19
    {
20
        $container = new Picotainer([
21
            'controller' => function () {
22
                return new TestController2();
23
            },
24
        ]);
25
        $parameterFetcherRegistry = ParameterFetcherRegistry::buildDefaultControllerRegistry();
26
        $controllerRegistry = new ControllerRegistry($container, $parameterFetcherRegistry, ['controller']);
27
        $defaultRouter = new SplashDefaultRouter($container, [
28
            $controllerRegistry,
29
        ], $parameterFetcherRegistry);
30
31
        $request = new ServerRequest([], [], '/foo/var/bar', 'GET', 'php://input',
32
            [],
33
            [],
34
            ['id' => 42]
35
            );
36
        $response = new HtmlResponse('');
37
        $response = $defaultRouter($request, $response);
38
        $this->assertInstanceOf(JsonResponse::class, $response);
39
        /* @var $response JsonResponse */
40
        $decodedResponse = json_decode((string) $response->getBody(), true);
41
        $this->assertEquals(42, $decodedResponse['id']);
42
        $this->assertEquals('var', $decodedResponse['var']);
43
        $this->assertEquals(42, $decodedResponse['id2']);
44
        $this->assertEquals(42, $decodedResponse['opt']);
45
46
        // Now, let's test the redirect
47
        $request = new ServerRequest([], [], '/foo/var/bar/', 'GET', 'php://input',
48
            [],
49
            [],
50
            ['id' => 42]
51
        );
52
        $response = new HtmlResponse('');
53
        $response = $defaultRouter($request, $response);
54
        $this->assertInstanceOf(RedirectResponse::class, $response);
55
        $this->assertEquals('/foo/var/bar', $response->getHeader('Location')[0]);
56
57
        // Now, let's test the second kind of redirect
58
        $request = new ServerRequest([], [], '/controller', 'GET');
59
        $response = new HtmlResponse('');
60
        $response = $defaultRouter($request, $response);
61
        $this->assertInstanceOf(RedirectResponse::class, $response);
62
        $this->assertEquals('/controller/', $response->getHeader('Location')[0]);
63
    }
64
65
    public function testUnknownRoute()
66
    {
67
        $container = new Picotainer([
68
        ]);
69
        $parameterFetcherRegistry = ParameterFetcherRegistry::buildDefaultControllerRegistry();
70
        $defaultRouter = new SplashDefaultRouter($container, [], $parameterFetcherRegistry);
71
72
        $request = new ServerRequest([], [], '/foo', 'GET');
73
        $response = new HtmlResponse('');
74
        $response = $defaultRouter($request, $response, function () {
75
            return new HtmlResponse('Not found', 404);
76
        });
77
        $this->assertInstanceOf(HtmlResponse::class, $response);
78
        /* @var $response HtmlResponse */
79
        $this->assertEquals(404, $response->getStatusCode());
80
        $this->assertEquals('Not found', (string) $response->getBody());
81
    }
82
83
    public function testRootUrlError()
84
    {
85
        $container = new Picotainer([
86
        ]);
87
        $parameterFetcherRegistry = ParameterFetcherRegistry::buildDefaultControllerRegistry();
88
        $defaultRouter = new SplashDefaultRouter($container, [], $parameterFetcherRegistry, null, null, SplashUtils::MODE_STRICT, true, '/baseUrl/');
89
90
        $request = new ServerRequest([], [], '/foo', 'GET');
91
        $response = new HtmlResponse('');
92
        $this->expectException(SplashException::class);
93
        $response = $defaultRouter($request, $response);
0 ignored issues
show
Unused Code introduced by
$response is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
94
    }
95
}
96