Completed
Pull Request — master (#67)
by Ross
02:01
created

CommandHandlerPassTest::testProcess()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 14
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 14
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 9
nc 1
nop 0

1 Method

Rating   Name   Duplication   Size   Complexity  
A CommandHandlerPassTest::setUp() 0 4 1
1
<?php
2
3
namespace League\Tactician\Bundle\Tests\DependencyInjection\Compiler;
4
5
use League\Tactician\Bundle\DependencyInjection\Compiler\CommandHandlerPass;
6
use League\Tactician\Bundle\DependencyInjection\HandlerMapping\ClassNameMapping;
7
use League\Tactician\Bundle\DependencyInjection\HandlerMapping\HandlerMapping;
8
use PHPUnit\Framework\TestCase;
9
use Symfony\Component\DependencyInjection\ContainerBuilder;
10
11
class CommandHandlerPassTest extends TestCase
12
{
13
    /**
14
     * @var HandlerMapping
15
     */
16
    private $mappingStrategy;
17
18
    protected function setUp()
19
    {
20
        $this->mappingStrategy = new ClassNameMapping();
21
    }
22
23
    // TODO: Somehow assert that routing is run and mapped onto the locators
24
    // TODO: test that it runs with a minimal configuration
25
26
    public function testAddingSingleDefaultBus()
27
    {
28
        $container = $this->containerWithConfig(
29
            [
30
                'commandbus' =>
31
                    [
32
                        'default' => ['middleware' => []],
33
                    ]
34
            ]
35
        );
36
37
        (new CommandHandlerPass($this->mappingStrategy))->process($container);
38
39
        $this->assertTrue($container->hasDefinition('tactician.commandbus.default'));
40
41
        $this->assertDefaultAliasesAreDeclared($container, 'default');
42
    }
43
44
    public function testProcessAddsLocatorAndHandlerDefinitionForTaggedBuses()
45
    {
46
        $container = $this->containerWithConfig(
47
            [
48
                'default_bus' => 'custom_bus',
49
                'commandbus' =>
50
                    [
51
                        'default' => ['middleware' => ['one']],
52
                        'custom_bus' => ['middleware' => ['two']],
53
                        'other_bus' => ['middleware' => ['three']]
54
                    ]
55
            ]
56
        );
57
58
        (new CommandHandlerPass($this->mappingStrategy))->process($container);
59
60
        $this->assertTrue($container->hasDefinition('tactician.commandbus.default'));
61
        $this->assertTrue($container->hasDefinition('tactician.commandbus.custom_bus'));
62
        $this->assertTrue($container->hasDefinition('tactician.commandbus.other_bus'));
63
64
        $this->assertDefaultAliasesAreDeclared($container, 'custom_bus');
65
    }
66
67
    private function containerWithConfig($config)
68
    {
69
        $container = new ContainerBuilder();
70
71
        $container->prependExtensionConfig('tactician', $config);
72
73
        return $container;
74
    }
75
76
    /**
77
     * @param $container
78
     */
79
    protected function assertDefaultAliasesAreDeclared(ContainerBuilder $container, string $defaultBusId)
80
    {
81
        $this->assertSame(
82
            $container->findDefinition('tactician.commandbus'),
83
            $container->getDefinition("tactician.commandbus.$defaultBusId")
84
        );
85
86
        $this->assertSame(
87
            $container->findDefinition('tactician.handler.locator.symfony'),
88
            $container->getDefinition("tactician.commandbus.$defaultBusId.handler.locator")
89
        );
90
91
        $this->assertSame(
92
            $container->findDefinition('tactician.middleware.command_handler'),
93
            $container->getDefinition("tactician.commandbus.$defaultBusId.middleware.command_handler")
94
        );
95
    }
96
}
97