PsrContainerExtensionTest   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 72
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 7

Importance

Changes 0
Metric Value
wmc 7
lcom 1
cbo 7
dl 0
loc 72
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A testPsrContainerExtensionIsABehatExtension() 0 4 1
A testGetConfigKeyReturnsNamespace() 0 4 1
A testConfiguration() 0 21 1
A testLoadSetsUpContainer() 0 37 4
1
<?php
2
declare(strict_types=1);
3
4
namespace RoaveTest\BehatPsrContainer;
5
6
use Behat\Testwork\ServiceContainer\Extension;
7
use PHPUnit\Framework\TestCase;
8
use Roave\BehatPsrContainer\ContainerFactory;
9
use Roave\BehatPsrContainer\PsrContainerExtension;
10
use Symfony\Component\Config\Definition\ArrayNode;
11
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
12
use Symfony\Component\Config\Definition\ScalarNode;
13
use Symfony\Component\DependencyInjection\ContainerBuilder;
14
15
/**
16
 * @covers \Roave\BehatPsrContainer\PsrContainerExtension
17
 */
18
final class PsrContainerExtensionTest extends TestCase
19
{
20
    public function testPsrContainerExtensionIsABehatExtension() : void
21
    {
22
        self::assertInstanceOf(Extension::class, new PsrContainerExtension());
23
    }
24
25
    public function testGetConfigKeyReturnsNamespace() : void
26
    {
27
        self::assertSame('Roave\BehatPsrContainer', (new PsrContainerExtension())->getConfigKey());
28
    }
29
30
    public function testConfiguration() : void
31
    {
32
        $builder = new ArrayNodeDefinition('foo');
33
34
        (new PsrContainerExtension())->configure($builder);
35
36
        /** @var ArrayNode $node */
37
        $node = $builder->getNode();
38
        $children = $node->getChildren();
39
        self::assertCount(2, $children);
40
41
        self::assertArrayHasKey('container', $children);
42
        /** @var ScalarNode $containerNode */
43
        $containerNode = $children['container'];
44
        self::assertSame('config/container.php', $containerNode->getDefaultValue());
45
46
        self::assertArrayHasKey('name', $children);
47
        /** @var ScalarNode $nameNode */
48
        $nameNode = $children['name'];
49
        self::assertSame('psr_container', $nameNode->getDefaultValue());
50
    }
51
52
    public function testLoadSetsUpContainer() : void
53
    {
54
        $builder = new ContainerBuilder();
55
        $containerConfigValue = uniqid('containerConfigvalue', true);
56
        $nameConfigValue = uniqid('nameConfigValue', true);
57
58
        (new PsrContainerExtension())->load(
59
            $builder,
60
            [
61
                'container' => $containerConfigValue,
62
                'name' => $nameConfigValue,
63
            ]
64
        );
65
66
        self::assertSame($containerConfigValue, $builder->getParameter('roave.behat.psr.container.included.file'));
67
68
        self::assertTrue($builder->hasDefinition($nameConfigValue));
69
        $definition = $builder->getDefinition($nameConfigValue);
70
        self::assertSame([ContainerFactory::class, 'createContainerFromIncludedFile'], $definition->getFactory());
71
        self::assertSame(['helper_container.container' => [[]]], $definition->getTags());
72
73
        $sharedOrScopeTested = false;
74
75
        if (method_exists($definition, 'isShared')) {
76
            $sharedOrScopeTested = true;
77
            self::assertFalse($definition->isShared());
78
        }
79
80
        if (method_exists($definition, 'getScope')) {
81
            $sharedOrScopeTested = true;
82
            self::assertSame(ContainerBuilder::SCOPE_PROTOTYPE, $definition->getScope());
0 ignored issues
show
Bug introduced by
The method getScope() does not seem to exist on object<Symfony\Component...cyInjection\Definition>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
83
        }
84
85
        if (!$sharedOrScopeTested) {
86
            self::fail('Expected to have assertion on isShared or getScope method, but neither existed');
87
        }
88
    }
89
}
90