Completed
Pull Request — 1.0 (#9)
by Romain
09:21
created

testServiceProviderOverrides()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 0
dl 0
loc 14
rs 9.7998
c 0
b 0
f 0
1
<?php
2
3
4
namespace TheCodingMachine\Interop\ServiceProviderBridgeBundle;
5
6
7
use Psr\Log\LoggerInterface;
8
use Psr\Log\NullLogger;
9
use Symfony\Component\DependencyInjection\ContainerBuilder;
10
use Symfony\Component\DependencyInjection\Definition;
11
use TheCodingMachine\Interop\ServiceProviderBridgeBundle\Tests\Fixtures\TestServiceProvider;
12
use TheCodingMachine\Interop\ServiceProviderBridgeBundle\Tests\Fixtures\TestServiceProviderOverride;
13
use TheCodingMachine\Interop\ServiceProviderBridgeBundle\Tests\Fixtures\TestServiceProviderOverride2;
14
15
class ServiceProviderCompilationPassTest extends \PHPUnit_Framework_TestCase
16
{
17
    protected function getContainer(array $lazyArray, $useDiscovery = false)
18
    {
19
        $bundle = new InteropServiceProviderBridgeBundle($lazyArray, $useDiscovery);
20
21
        $container = new ContainerBuilder();
22
        $container->setParameter('database_host', 'localhost');
23
        $container->setDefinition('logger', new Definition(NullLogger::class));
24
25
        $bundle->build($container);
26
        $container->compile();
27
        $bundle->setContainer($container);
28
        $bundle->boot();
29
        return $container;
30
    }
31
32
    public function testSimpleServiceProvider()
33
    {
34
        $container = $this->getContainer([
35
            TestServiceProvider::class
36
        ]);
37
38
        $serviceA = $container->get('serviceA');
39
40
        $this->assertInstanceOf(\stdClass::class, $serviceA);
41
        $this->assertEquals(42, $container->get('function'));
42
    }
43
44
    public function testServiceProviderOverrides()
45
    {
46
        $container = $this->getContainer([
47
            TestServiceProvider::class,
48
            TestServiceProviderOverride::class,
49
            TestServiceProviderOverride2::class
50
        ]);
51
52
        $serviceA = $container->get('serviceA');
53
54
        $this->assertInstanceOf(\stdClass::class, $serviceA);
55
        $this->assertEquals('foo', $serviceA->newProperty);
56
        $this->assertEquals('bar', $serviceA->newProperty2);
57
    }
58
59
    public function testExtensionsAreCalledInCorrectOrder()
60
    {
61
        $container = $this->getContainer([
62
            new TestServiceProvider(),
63
            new TestServiceProviderOverride(),
64
        ]);
65
66
        $value = $container->get('stringValue');
67
68
        $this->assertSame('foo12', $value);
69
    }
70
71
    /**
72
     * @expectedException \TheCodingMachine\Interop\ServiceProviderBridgeBundle\Exception\InvalidArgumentException
73
     */
74
    /*public function testExceptionMessageIfNoPuliBundle()
75
    {
76
        $bundle = new InteropServiceProviderBridgeBundle([], true);
77
        $container = new ContainerBuilder();
78
        $bundle->build($container);
79
        $container->compile();
80
    }*/
81
82
    /**
83
     *
84
     */
85
    public function testTcmDiscovery()
86
    {
87
        // If TCM discovery is enabled, the CommonAliasesServiceProvider is registered.
88
        $container = $this->getContainer([], true);
89
90
        $logger = $container->get(LoggerInterface::class);
91
92
        $this->assertInstanceOf(LoggerInterface::class, $logger);
93
    }
94
}
95