testResolvesCommandsWhenHandlerDeferred()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 6
c 1
b 0
f 0
dl 0
loc 10
rs 10
cc 1
nc 1
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace RemotelyLiving\PHPCommandBus\Tests\Unit;
6
7
use RemotelyLiving\PHPCommandBus\Exceptions;
8
use RemotelyLiving\PHPCommandBus\Interfaces;
9
use RemotelyLiving\PHPCommandBus\Resolver;
10
use RemotelyLiving\PHPCommandBus\Tests\Stubs;
11
12
class ResolverTest extends AbstractTestCase
13
{
14
    private Stubs\Container $emptyContainer;
15
16
    private Stubs\Container $containerHandlerSet;
17
18
    private Interfaces\Resolver $resolver;
19
20
    protected function setUp(): void
21
    {
22
        $this->emptyContainer = new Stubs\Container([]);
23
        $this->containerHandlerSet = new Stubs\Container([
24
            Stubs\Commands\ReserveRoom::class => new Stubs\Handlers\ReserveRoom(),
25
        ]);
26
27
        $this->resolver = Resolver::create();
28
    }
29
30
    public function testResolvesCommandsWhenFound(): void
31
    {
32
        $reserveRoomHandler = new Stubs\Handlers\ReserveRoom();
33
        $publishDraftHandler = new Stubs\Handlers\PublishDraft();
34
35
        $this->resolver
36
            ->pushHandler(Stubs\Commands\ReserveRoom::class, $reserveRoomHandler)
37
            ->pushHandler(Stubs\Commands\PublishDraft::class, $publishDraftHandler);
38
39
        $this->assertInstanceOf(
40
            Stubs\Handlers\ReserveRoom::class,
41
            $this->resolver->resolve(new Stubs\Commands\ReserveRoom())
42
        );
43
    }
44
45
    public function testResolvesCommandsWhenFoundInContainer(): void
46
    {
47
        $this->resolver = Resolver::create($this->containerHandlerSet);
48
        $this->assertInstanceOf(
49
            Stubs\Handlers\ReserveRoom::class,
50
            $this->resolver->resolve(new Stubs\Commands\ReserveRoom())
51
        );
52
    }
53
54
    public function testResolvesCommandsWhenHandlerDeferred(): void
55
    {
56
        $this->resolver->pushHandlerDeferred(
57
            Stubs\Commands\ReserveRoom::class,
58
            fn() => new Stubs\Handlers\ReserveRoom()
59
        );
60
61
        $this->assertInstanceOf(
62
            Stubs\Handlers\ReserveRoom::class,
63
            $this->resolver->resolve(new Stubs\Commands\ReserveRoom())
64
        );
65
    }
66
67
    public function testThrowsOutOfBoundsWhenNoHandlerFound(): void
68
    {
69
        $this->expectException(Exceptions\OutOfBounds::class);
70
        $this->resolver->resolve(new Stubs\Commands\PublishDraft());
71
    }
72
73
    public function testThrowsOutOfBoundsWhenNoHandlerFoundInContainer(): void
74
    {
75
        $this->resolver = Resolver::create($this->emptyContainer);
76
        $this->expectException(Exceptions\OutOfBounds::class);
77
        $this->resolver->resolve(new Stubs\Commands\PublishDraft());
78
    }
79
}
80