AbstractTestCase::getTestLogger()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 3
c 1
b 0
f 0
dl 0
loc 7
rs 10
cc 2
nc 2
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace RemotelyLiving\PHPCommandBus\Tests\Integration;
6
7
use PHPUnit\Framework\TestCase;
8
use Psr\Log\Test\TestLogger;
9
use RemotelyLiving\PHPCommandBus\Middleware;
10
use RemotelyLiving\PHPCommandBus\CommandBus;
11
use RemotelyLiving\PHPCommandBus\Resolver;
12
use RemotelyLiving\PHPCommandBus\Interfaces;
13
use RemotelyLiving\PHPCommandBus\Tests\Stubs;
14
15
abstract class AbstractTestCase extends TestCase
16
{
17
    protected ?TestLogger $testLogger = null;
18
19
    public function getTestLogger(): TestLogger
20
    {
21
        if ($this->testLogger === null) {
22
            $this->testLogger = new TestLogger();
23
        }
24
25
        return $this->testLogger;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this->testLogger could return the type null which is incompatible with the type-hinted return Psr\Log\Test\TestLogger. Consider adding an additional type-check to rule them out.
Loading history...
26
    }
27
28
    public function createConfiguredCommandBus(): Interfaces\CommandBus
29
    {
30
        $commandLogger = new Middleware\CommandLogger();
31
        $commandLogger->setLogger($this->getTestLogger());
32
33
        $container = new Stubs\Container([
34
            Stubs\Commands\PublishDraft::class => new Stubs\Handlers\PublishDraft(),
35
        ]);
36
37
        $resolver = Resolver::create($container);
38
        $lazyFn = function (): Interfaces\Handler {
39
            return new Stubs\Handlers\ReserveRoom();
40
        };
41
42
        $resolver->pushHandlerDeferred(Stubs\Commands\ReserveRoom::class, $lazyFn);
43
44
        return CommandBus::create($resolver)
45
            ->pushMiddleware($commandLogger);
46
    }
47
}
48