Passed
Branch master (e8fd46)
by Alexey
03:15
created

HttpApplicationTest::canRunHttpApplication()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 42
Code Lines 33

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 33
nc 1
nop 0
dl 0
loc 42
rs 8.8571
c 0
b 0
f 0
1
<?php
2
3
use PHPUnit\Framework\TestCase;
4
use Psr\Http\Message\ResponseInterface;
5
use Psr\Http\Message\ServerRequestInterface;
6
use Venta\Contracts\Container\Container;
7
use Venta\Contracts\Http\ResponseEmitter;
8
use Venta\Contracts\Kernel\Kernel;
9
use Venta\Contracts\Routing\MiddlewareCollector as MiddlewareCollector;
10
use Venta\Contracts\Routing\MiddlewarePipeline;
11
use Venta\Contracts\Routing\RouteCollector;
12
use Venta\Contracts\Routing\RouteMatcher;
13
use Venta\Contracts\Routing\Strategy;
14
use Venta\Routing\Route;
15
16
/**
17
 * Class HttpApplicationTest
18
 */
19
class HttpApplicationTest extends TestCase
20
{
21
    public function tearDown()
22
    {
23
        Mockery::close();
24
    }
25
26
    /**
27
     * @test
28
     */
29
    public function canBootKernel()
30
    {
31
        $kernel = Mockery::spy(Kernel::class, ['boot' => Mockery::mock(Container::class)]);
32
33
        $app = new \Venta\Framework\Http\HttpApplication($kernel);
34
35
        $kernel->shouldHaveReceived('boot')->withNoArgs()->once();
36
    }
37
38
    /**
39
     * @ignore
40
     */
41
    public function canRunHttpApplication()
42
    {
43
        // Define mock stubs used in ->run() method
44
        $container = Mockery::mock(Container::class);
45
        $request = Mockery::mock(ServerRequestInterface::class);
46
        $matcher = Mockery::mock(RouteMatcher::class);
47
        $routeCollector = Mockery::mock(RouteCollector::class);
48
        $route = Mockery::mock(Route::class);
49
        $middlewareCollector = Mockery::mock(MiddlewareCollector::class);
50
        $strategy = Mockery::mock(Strategy::class);
51
        $pipeline = Mockery::mock(MiddlewarePipeline::class);
52
        $emitter = Mockery::mock(ResponseEmitter::class);
53
        $response = Mockery::mock(ResponseInterface::class);
54
        $kernel = Mockery::mock(Kernel::class);
55
56
        // Mock container calls
57
        $container->shouldReceive('get')->with(ServerRequestInterface::class)->andReturn($request);
58
        $container->shouldReceive('get')->with(RouteMatcher::class)->andReturn($matcher);
59
        $container->shouldReceive('get')->with(RouteCollector::class)->andReturn($routeCollector);
60
        $container->shouldReceive('share')->with(Route::class, $route, ['route']);
61
        $container->shouldReceive('get')->with(MiddlewareCollector::class)->andReturn($middlewareCollector);
62
        $container->shouldReceive('get')->with(Strategy::class)->andReturn($strategy);
63
        $container->shouldReceive('get')->with(MiddlewarePipeline::class)->andReturn($pipeline);
64
        $container->shouldReceive('get')->with(ResponseEmitter::class)->andReturn($emitter);
65
66
        // Mock stub calls
67
        $matcher->shouldReceive('match')->with($request, $routeCollector)->andReturn($route)->once();
68
        $route->shouldReceive('getMiddlewares')->withNoArgs()->andReturn(['name' => 'middleware'])->once();
69
        $middlewareCollector->shouldReceive('pushMiddleware')->with('name', 'middleware')->once();
70
        $strategy->shouldReceive('dispatch')->with($route)->andReturn($response)->once();
71
        $pipeline->shouldReceive('handle')
72
                 ->with($request, Mockery::type(Closure::class)
73
                 )->andReturnUsing(function ($request, $last) {
74
                return $last($request);
75
            })->once();
76
        $emitter->shouldReceive('emit')->with($response)->once();
77
        $kernel->shouldReceive('boot')->withNoArgs()->andReturn($container)->once();
78
79
        // Create and run application
80
        $app = new \Venta\Framework\Http\HttpApplication($kernel);
81
        $app->run();
82
    }
83
84
}
85