summaryrefslogtreecommitdiffstats
path: root/tests/Router/Middleware/DetermineRouteTest.php
blob: 171e78302c4c71e6be83100cfd8bd037600b88d3 (plain)
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
<?php

use Jasny\Router\Route;
use Jasny\Router\RoutesInterface;
use Jasny\Router\Middleware\DetermineRoute;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Message\ResponseInterface;

use Jasny\TestHelper;

/**
 * @covers Jasny\Router\Middleware\DetermineRoute
 */
class DetermineRouteTest extends PHPUnit_Framework_TestCase
{
    use TestHelper;
    
    public function testConstruct()
    {
        $routes = $this->createMock(RoutesInterface::class);
        $middelware = new DetermineRoute($routes);
        
        $this->assertSame($routes, $middelware->getRoutes());
    }
    
    public function routeProvider()
    {
        return [
            [$this->createMock(Route::class)],
            [null]
        ];
    }

    /**
     * @dataProvider routeProvider
     * 
     * @param Route|null $route
     */
    public function testInvoke($route)
    {
        $requestWithRoute = $this->createMock(ServerRequestInterface::class);
        
        $request = $this->createMock(ServerRequestInterface::class);
        $request->expects($this->once())->method('withAttribute')->with('route', $route)
            ->willReturn($requestWithRoute);
        
        $response = $this->createMock(ResponseInterface::class);
        
        $next = $this->createCallbackMock($this->once(), [$requestWithRoute, $response]);
        
        $routes = $this->createMock(RoutesInterface::class);
        $routes->expects($this->once())->method('getRoute')->with($request)->willReturn($route);
        
        $middelware = new DetermineRoute($routes);
        
        $middelware($request, $response, $next);
    }
    
    /**
     * @expectedException InvalidArgumentException
     */
    public function testInvokeWithInvalidCallback()
    {
        $request = $this->createMock(ServerRequestInterface::class);
        $response = $this->createMock(ResponseInterface::class);
        
        $routes = $this->createMock(RoutesInterface::class);
        $middelware = new DetermineRoute($routes);
        
        $middelware($request, $response, 'not a function');
    }
}