Completed
Pull Request — master (#67)
by Ross
04:58
created

BusBuilderTest   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 56
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 4

Importance

Changes 0
Metric Value
wmc 6
lcom 0
cbo 4
dl 0
loc 56
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A test_default_name_generates_expected_ids() 0 9 1
A test_alternate_name_generates_expected_ids() 0 9 1
A testProcess() 0 8 1
B busShouldBeCorrectlyRegisteredInContainer() 0 24 3
1
<?php
2
declare(strict_types=1);
3
4
namespace League\Tactician\Bundle\Tests\DependencyInjection\Compiler\BusBuilder;
5
6
use League\Tactician\Bundle\DependencyInjection\Compiler\BusBuilder\BusBuilder;
7
use League\Tactician\Bundle\Handler\ContainerBasedHandlerLocator;
8
use League\Tactician\Container\ContainerLocator;
9
use PHPUnit\Framework\TestCase;
10
use Symfony\Component\DependencyInjection\ContainerBuilder;
11
use Symfony\Component\DependencyInjection\ServiceLocator;
12
13
final class BusBuilderTest extends TestCase
14
{
15
    public function test_default_name_generates_expected_ids()
16
    {
17
        $builder = new BusBuilder('default', 'some.method.inflector', ['middleware1', 'middleware2']);
18
19
        $this->assertEquals('default', $builder->id());
20
        $this->assertEquals('tactician.commandbus.default', $builder->serviceId());
21
        $this->assertEquals('tactician.commandbus.default.handler.locator', $builder->locatorServiceId());
22
        $this->assertEquals('tactician.commandbus.default.middleware.command_handler', $builder->commandHandlerMiddlewareId());
23
    }
24
25
    public function test_alternate_name_generates_expected_ids()
26
    {
27
        $builder = new BusBuilder('foobar', 'some.method.inflector', ['middleware1', 'middleware2']);
28
29
        $this->assertEquals('foobar', $builder->id());
30
        $this->assertEquals('tactician.commandbus.foobar', $builder->serviceId());
31
        $this->assertEquals('tactician.commandbus.foobar.handler.locator', $builder->locatorServiceId());
32
        $this->assertEquals('tactician.commandbus.foobar.middleware.command_handler', $builder->commandHandlerMiddlewareId());
33
    }
34
35
    public function testProcess()
36
    {
37
        $builder = new BusBuilder('default', 'some.method.inflector', ['middleware1', 'middleware2']);
38
39
        $builder->registerInContainer($container = new ContainerBuilder(), []);
40
41
        $this->busShouldBeCorrectlyRegisteredInContainer($container, 'default', 'some.method.inflector');
42
    }
43
44
    private function busShouldBeCorrectlyRegisteredInContainer(ContainerBuilder $container, $busId, $methodInflector)
45
    {
46
        $handlerLocatorId = "tactician.commandbus.$busId.handler.locator";
47
        $handlerId = "tactician.commandbus.$busId.middleware.command_handler";
48
49
        if (class_exists(ServiceLocator::class)) {
50
            $this->assertSame(
51
                ServiceLocator::class,
52
                $container->getDefinition("tactician.commandbus.$busId.handler.service_locator")->getClass()
53
            );
54
        }
55
56
        $this->assertSame(
57
            class_exists(ServiceLocator::class) ? ContainerLocator::class : ContainerBasedHandlerLocator::class,
58
            $container->getDefinition($handlerLocatorId)->getClass()
59
        );
60
61
        $this->assertSame(
62
            $methodInflector,
63
            (string)$container
64
                ->getDefinition($handlerId)
65
                ->getArgument(2)
66
        );
67
    }
68
}
69