aboutsummaryrefslogtreecommitdiff
path: root/tests/MiddlewarePipelineTest.php
blob: 107dce34973894e71f5837041cfaa2e37250e08c (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
<?php

declare(strict_types=1);

namespace BrettParson\MiniRoute\Tests;

use ArrayObject;
use BrettParson\MiniRoute\Http\RequestInterface;
use BrettParson\MiniRoute\Http\ResponseInterface;
use BrettParson\MiniRoute\Middleware\MiddlewarePipeline;
use BrettParson\MiniRoute\Tests\Fixtures\FakeMiddleware;
use BrettParson\MiniRoute\Tests\Fixtures\TestRequest;
use BrettParson\MiniRoute\Tests\Fixtures\TestResponse;
use PHPUnit\Framework\TestCase;

final class MiddlewarePipelineTest extends TestCase
{
    public function testMiddlewareRunsOutermostFirstAndCoreLast(): void
    {
        $log = new ArrayObject();

        $outer = new FakeMiddleware('outer', $log);
        $inner = new FakeMiddleware('inner', $log);

        $core = static function (RequestInterface $request) use ($log): ResponseInterface {
            $log->append('core');

            return new TestResponse(200, 'ok');
        };

        $pipeline = MiddlewarePipeline::compose([$outer, $inner], $core);

        $response = $pipeline(new TestRequest('GET', '/'));

        $this->assertSame(['outer', 'inner', 'core'], $log->getArrayCopy());
        $this->assertSame(200, $response->status());
    }
}