BusBuilderTest   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 62
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Importance

Changes 0
Metric Value
wmc 7
lcom 1
cbo 4
dl 0
loc 62
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
A busShouldBeCorrectlyRegisteredInContainer() 0 30 4
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\CommandBus;
9
use League\Tactician\Container\ContainerLocator;
10
use PHPUnit\Framework\TestCase;
11
use Symfony\Component\DependencyInjection\ContainerBuilder;
12
use Symfony\Component\DependencyInjection\ServiceLocator;
13
14
final class BusBuilderTest extends TestCase
15
{
16
    public function test_default_name_generates_expected_ids()
17
    {
18
        $builder = new BusBuilder('default', 'some.method.inflector', ['middleware1', 'middleware2']);
19
20
        $this->assertEquals('default', $builder->id());
21
        $this->assertEquals('tactician.commandbus.default', $builder->serviceId());
22
        $this->assertEquals('tactician.commandbus.default.handler.locator', $builder->locatorServiceId());
23
        $this->assertEquals('tactician.commandbus.default.middleware.command_handler', $builder->commandHandlerMiddlewareId());
24
    }
25
26
    public function test_alternate_name_generates_expected_ids()
27
    {
28
        $builder = new BusBuilder('foobar', 'some.method.inflector', ['middleware1', 'middleware2']);
29
30
        $this->assertEquals('foobar', $builder->id());
31
        $this->assertEquals('tactician.commandbus.foobar', $builder->serviceId());
32
        $this->assertEquals('tactician.commandbus.foobar.handler.locator', $builder->locatorServiceId());
33
        $this->assertEquals('tactician.commandbus.foobar.middleware.command_handler', $builder->commandHandlerMiddlewareId());
34
    }
35
36
    public function testProcess()
37
    {
38
        $builder = new BusBuilder('default', 'some.method.inflector', ['middleware1', 'middleware2']);
39
40
        $builder->registerInContainer($container = new ContainerBuilder(), []);
41
42
        $this->busShouldBeCorrectlyRegisteredInContainer($container, 'default', 'some.method.inflector');
43
    }
44
45
    private function busShouldBeCorrectlyRegisteredInContainer(ContainerBuilder $container, $busId, $methodInflector)
46
    {
47
        $handlerLocatorId = "tactician.commandbus.$busId.handler.locator";
48
        $handlerId = "tactician.commandbus.$busId.middleware.command_handler";
49
50
        if (class_exists(ServiceLocator::class)) {
51
            $this->assertSame(
52
                ServiceLocator::class,
53
                $container->getDefinition("tactician.commandbus.$busId.handler.service_locator")->getClass()
54
            );
55
        }
56
57
        $this->assertSame(
58
            class_exists(ServiceLocator::class) ? ContainerLocator::class : ContainerBasedHandlerLocator::class,
59
            $container->getDefinition($handlerLocatorId)->getClass()
60
        );
61
62
        $this->assertSame(
63
            $methodInflector,
64
            (string)$container
65
                ->getDefinition($handlerId)
66
                ->getArgument(2)
67
        );
68
69
        if (method_exists($container, 'registerAliasForArgument')) {
70
            $this->assertTrue(
71
                $container->hasAlias(CommandBus::class . ' $defaultBus')
72
            );
73
        }
74
    }
75
}
76