Completed
Push — 1.0 ( abbc08...86bac3 )
by David
09:10
created

testSimpleServiceProvider()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 11
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 11
rs 9.4285
cc 1
eloc 6
nc 1
nop 0
1
<?php
2
3
4
namespace TheCodingMachine\Interop\ServiceProviderBridgeBundle;
5
6
7
use Puli\Discovery\Api\Type\BindingType;
8
use Puli\Discovery\Binding\ClassBinding;
9
use Puli\Discovery\InMemoryDiscovery;
10
use Puli\SymfonyBundle\PuliBundle;
11
use Symfony\Component\DependencyInjection\ContainerBuilder;
12
use TheCodingMachine\Interop\ServiceProviderBridgeBundle\Tests\Fixtures\TestServiceProvider;
13
use TheCodingMachine\Interop\ServiceProviderBridgeBundle\Tests\Fixtures\TestServiceProviderOverride;
14
use TheCodingMachine\Interop\ServiceProviderBridgeBundle\Tests\Fixtures\TestServiceProviderOverride2;
15
16
class ServiceProviderCompilationPassTest extends \PHPUnit_Framework_TestCase
17
{
18
    protected function getContainer(array $lazyArray, $usePuli = false)
19
    {
20
        $bundle = new InteropServiceProviderBridgeBundle($lazyArray, $usePuli);
21
22
        $container = new ContainerBuilder();
23
        $container->set('puli.discovery', $this->getDiscovery());
24
        $container->setParameter('database_host', 'localhost');
25
26
        $bundle->build($container);
27
        $container->compile();
28
        $bundle->setContainer($container);
29
        $bundle->boot();
30
        return $container;
31
    }
32
33
    protected function getDiscovery()
34
    {
35
        $discovery = new InMemoryDiscovery();
36
        $discovery->addBindingType(new BindingType('container-interop/service-provider'));
0 ignored issues
show
Bug introduced by
The call to BindingType::__construct() misses a required argument $bindingClass.

This check looks for function calls that miss required arguments.

Loading history...
37
        $classBinding = new ClassBinding(TestServiceProvider::class, 'container-interop/service-provider');
38
        $discovery->addBinding($classBinding);
39
        return $discovery;
40
    }
41
42
    public function testSimpleServiceProvider()
43
    {
44
        $container = $this->getContainer([
45
            TestServiceProvider::class
46
        ]);
47
48
        $serviceA = $container->get('serviceA');
49
50
        $this->assertInstanceOf(\stdClass::class, $serviceA);
51
        $this->assertEquals(42, $container->get('function'));
52
    }
53
54
    public function testServiceProviderOverrides()
55
    {
56
        $container = $this->getContainer([
57
            TestServiceProvider::class,
58
            TestServiceProviderOverride::class,
59
            TestServiceProviderOverride2::class
60
        ]);
61
62
        $serviceA = $container->get('serviceA');
63
64
        $this->assertInstanceOf(\stdClass::class, $serviceA);
65
        $this->assertEquals('foo', $serviceA->newProperty);
66
        $this->assertEquals('bar', $serviceA->newProperty2);
67
    }
68
69
    /**
70
     * @expectedException \TheCodingMachine\Interop\ServiceProviderBridgeBundle\Exception\InvalidArgumentException
71
     */
72
    public function testExceptionMessageIfNoPuliBundle()
73
    {
74
        $bundle = new InteropServiceProviderBridgeBundle([], true);
75
        $container = new ContainerBuilder();
76
        $bundle->build($container);
77
        $container->compile();
78
    }
79
80
    /**
81
     *
82
     */
83
    public function testPuliBundle()
84
    {
85
        $container = $this->getContainer([], true);
86
87
        $serviceA = $container->get('serviceA');
88
89
        $this->assertInstanceOf(\stdClass::class, $serviceA);
90
    }
91
}
92