Completed
Pull Request — master (#727)
by
unknown
02:10
created

ServiceRepositoryTest   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 61
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 8

Importance

Changes 0
Metric Value
wmc 3
lcom 0
cbo 8
dl 0
loc 61
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A setUp() 0 8 2
A testRepositoryServiceWiring() 0 49 1
1
<?php
2
3
/*
4
 * This file is part of the Doctrine Bundle
5
 *
6
 * The code was originally distributed inside the Symfony framework.
7
 *
8
 * (c) Fabien Potencier <[email protected]>
9
 * (c) Doctrine Project, Benjamin Eberlei <[email protected]>
10
 *
11
 * For the full copyright and license information, please view the LICENSE
12
 * file that was distributed with this source code.
13
 */
14
15
namespace Doctrine\Bundle\DoctrineBundle\Tests;
16
17
use Doctrine\Bundle\DoctrineBundle\DependencyInjection\Compiler\ServiceRepositoryCompilerPass;
18
use Doctrine\Bundle\DoctrineBundle\DependencyInjection\DoctrineExtension;
19
use Doctrine\Bundle\DoctrineBundle\Repository\DefaultServiceRepository;
20
use Doctrine\Common\Annotations\AnnotationReader;
21
use Doctrine\ORM\EntityRepository;
22
use Doctrine\ORM\QueryBuilder;
23
use Fixtures\Bundles\RepositoryServiceBundle\Entity\TestCustomRepoEntity;
24
use Fixtures\Bundles\RepositoryServiceBundle\Entity\TestDefaultRepoEntity;
25
use Fixtures\Bundles\RepositoryServiceBundle\RepositoryServiceBundle;
26
use Fixtures\Bundles\RepositoryServiceBundle\Repository\TestCustomRepoRepository;
27
use Symfony\Component\DependencyInjection\ContainerBuilder;
28
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
29
use Symfony\Component\DependencyInjection\Reference;
30
31
class ServiceRepositoryTest extends TestCase
32
{
33
    protected function setUp()
34
    {
35
        parent::setUp();
36
37
        if (!class_exists('Doctrine\\ORM\\Version')) {
38
            $this->markTestSkipped('Doctrine ORM is not available.');
39
        }
40
    }
41
42
    public function testRepositoryServiceWiring()
43
    {
44
        $container = new ContainerBuilder(new ParameterBag(array(
45
            'kernel.name' => 'app',
46
            'kernel.debug' => false,
47
            'kernel.bundles' => array('RepositoryServiceBundle' => RepositoryServiceBundle::class),
48
            'kernel.cache_dir' => sys_get_temp_dir(),
49
            'kernel.environment' => 'test',
50
            'kernel.root_dir' => __DIR__.'/../../../../', // src dir
51
        )));
52
        $container->set('annotation_reader', new AnnotationReader());
53
        $extension = new DoctrineExtension();
54
        $container->registerExtension($extension);
55
        $extension->load(array(array(
56
            'dbal' => array(
57
                'driver' => 'pdo_mysql',
58
                'charset' => 'UTF8',
59
            ),
60
            'orm' => array(
61
                'mappings' => array('RepositoryServiceBundle' => array(
62
                    'type' => 'annotation',
63
                    'dir' => __DIR__.'/DependencyInjection/Fixtures/Bundles/RepositoryServiceBundle/Entity',
64
                    'prefix' => 'Fixtures\Bundles\RepositoryServiceBundle\Entity',
65
                )),
66
                'use_service_repositories' => true,
67
            ),
68
        )), $container);
69
70
        $container->register(TestCustomRepoRepository::class)
71
            ->setAutowired(true)
72
            ->setPublic(false)
73
            ->addTag('doctrine.repository_service');
74
75
        $container->getCompilerPassConfig()->addPass(new ServiceRepositoryCompilerPass());
76
        $container->compile();
77
78
        $em = $container->get('doctrine.orm.default_entity_manager');
79
        $customRepo = $em->getRepository(TestCustomRepoEntity::class);
80
        $this->assertSame($customRepo, $container->get(TestCustomRepoRepository::class));
81
        // a smoke test, trying some methods
82
        $this->assertSame(TestCustomRepoEntity::class, $customRepo->getClassName());
83
        $this->assertInstanceOf(QueryBuilder::class, $customRepo->createQueryBuilder('tc'));
84
85
        $genericRepository = $em->getRepository(TestDefaultRepoEntity::class);
86
        $this->assertInstanceOf(EntityRepository::class, $genericRepository);
87
        $this->assertSame($genericRepository, $genericRepository = $em->getRepository(TestDefaultRepoEntity::class));
88
        // a smoke test, trying one of the methods
89
        $this->assertSame(TestDefaultRepoEntity::class, $genericRepository->getClassName());
90
    }
91
}
92