Completed
Pull Request — master (#67)
by Ross
09:48
created

test_can_bind_to_specific_bus()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 24
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 24
rs 8.9713
c 0
b 0
f 0
cc 1
eloc 15
nc 1
nop 0
1
<?php
2
declare(strict_types=1);
3
4
namespace League\Tactician\Bundle\Tests\DependencyInjection\HandlerMapping;
5
6
use League\Tactician\Bundle\DependencyInjection\HandlerMapping\ClassNameMapping;
7
use League\Tactician\Bundle\DependencyInjection\HandlerMapping\Routing;
8
use League\Tactician\Bundle\DependencyInjection\InvalidCommandBusId;
9
use League\Tactician\Bundle\Tests\Fake\FakeCommand;
10
use League\Tactician\Bundle\Tests\Fake\OtherFakeCommand;
11
use PHPUnit\Framework\TestCase;
12
use Symfony\Component\DependencyInjection\ContainerBuilder;
13
use Symfony\Component\DependencyInjection\Definition;
14
15
final class ClassNameMappingTest extends TestCase
16
{
17
    public function test_will_skip_definitions_without_command_tag()
18
    {
19
        $builder = new ContainerBuilder();
20
        $builder
21
            ->setDefinition('some.handler', new Definition(SomeHandler::class))
22
            ->addTag('tactician.handler', ['foo' => 'bar']);
23
24
        $routing = (new ClassNameMapping())->build($builder, new Routing(['default']));
25
26
        $this->assertEquals([], $routing->commandToServiceMapping('default'));
27
    }
28
29
    public function test_will_find_handler_for_defined_command()
30
    {
31
        $builder = new ContainerBuilder();
32
        $builder
33
            ->setDefinition('some.handler', new Definition(SomeHandler::class))
34
            ->addTag('tactician.handler', ['command' => FakeCommand::class]);
35
36
        $routing = (new ClassNameMapping())->build($builder, new Routing(['default']));
37
38
        $this->assertEquals([FakeCommand::class => 'some.handler'], $routing->commandToServiceMapping('default'));
39
    }
40
41
    public function test_can_bind_to_specific_bus()
42
    {
43
        $builder = new ContainerBuilder();
44
        $builder
45
            ->setDefinition('first.handler', new Definition(SomeHandler::class))
46
            ->addTag('tactician.handler', ['command' => FakeCommand::class, 'bus' => 'bus.a']);
47
48
        $builder
49
            ->setDefinition('second.handler', new Definition(SomeHandler::class))
50
            ->addTag('tactician.handler', ['command' => OtherFakeCommand::class, 'bus' => 'bus.b']);
51
52
        $routing = (new ClassNameMapping())->build($builder, new Routing(['bus.a', 'bus.b']));
53
54
        $this->assertEquals(
55
            [
56
                FakeCommand::class => 'first.handler',
57
            ],
58
            $routing->commandToServiceMapping('bus.a')
59
        );
60
        $this->assertEquals(
61
            [OtherFakeCommand::class => 'second.handler'],
62
            $routing->commandToServiceMapping('bus.b')
63
        );
64
    }
65
66
    public function test_can_bind_to_multiple_buses()
67
    {
68
        $builder = new ContainerBuilder();
69
        $builder
70
            ->setDefinition('first.handler', new Definition(SomeHandler::class))
71
            ->addTag('tactician.handler', ['command' => FakeCommand::class, 'bus' => 'bus.a'])
72
            ->addTag('tactician.handler', ['command' => FakeCommand::class, 'bus' => 'bus.b']);
73
74
        $routing = (new ClassNameMapping())->build($builder, new Routing(['bus.a', 'bus.b']));
75
76
        $this->assertEquals([FakeCommand::class => 'first.handler'], $routing->commandToServiceMapping('bus.a'));
77
        $this->assertEquals([FakeCommand::class => 'first.handler'], $routing->commandToServiceMapping('bus.b'));
78
    }
79
80
    public function test_will_error_when_given_invalid_bus()
81
    {
82
        $this->expectException(InvalidCommandBusId::class);
83
84
        $builder = new ContainerBuilder();
85
        $builder
86
            ->setDefinition('first.handler', new Definition(SomeHandler::class))
87
            ->addTag('tactician.handler', ['command' => FakeCommand::class, 'bus' => 'bus.does.not.exist.mwhahahaha']);
88
89
        (new ClassNameMapping())->build($builder, new Routing(['bus.a', 'bus.b']));
90
    }
91
}
92
93
class SomeHandler
94
{
95
    public function handle($foo)
0 ignored issues
show
Unused Code introduced by
The parameter $foo is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
96
    {
97
    }
98
}
99