Completed
Push — master ( 8fab1b...fcd699 )
by Alejandro
16s queued 11s
created

EntityManagerFactoryTest::provideConfig()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 22
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 14
nc 1
nop 0
dl 0
loc 22
rs 9.7998
c 0
b 0
f 0
1
<?php
2
declare(strict_types=1);
3
4
namespace ShlinkioTest\Shlink\Common\Doctrine;
5
6
use Doctrine\Common\Persistence\Mapping\Driver\PHPDriver;
7
use Doctrine\DBAL\Driver\PDOSqlite;
8
use Doctrine\DBAL\Types\Type;
9
use PHPUnit\Framework\TestCase;
10
use Shlinkio\Shlink\Common\Doctrine\EntityManagerFactory;
11
use Shlinkio\Shlink\Common\Doctrine\Type\ChronosDateTimeType;
12
use Zend\ServiceManager\ServiceManager;
13
14
use function array_merge;
15
16
class EntityManagerFactoryTest extends TestCase
17
{
18
    /** @var EntityManagerFactory */
19
    private $factory;
20
21
    public function setUp(): void
22
    {
23
        if (Type::hasType(ChronosDateTimeType::CHRONOS_DATETIME)) {
24
            Type::overrideType(ChronosDateTimeType::CHRONOS_DATETIME, null);
25
        }
26
        $this->factory = new EntityManagerFactory();
27
    }
28
29
    /**
30
     * @test
31
     * @dataProvider provideConfig
32
     */
33
    public function serviceIsCreated(array $config, int $expectedAutoGenerateProxies): void
34
    {
35
        $sm = new ServiceManager(['services' => [
36
            'config' => $config,
37
        ]]);
38
39
        $this->assertFalse(Type::hasType(ChronosDateTimeType::CHRONOS_DATETIME));
40
        $em = ($this->factory)($sm);
41
42
        $this->assertTrue(Type::hasType(ChronosDateTimeType::CHRONOS_DATETIME));
43
        $this->assertEquals($expectedAutoGenerateProxies, $em->getConfiguration()->getAutoGenerateProxyClasses());
44
        $this->assertInstanceOf(PDOSqlite\Driver::class, $em->getConnection()->getDriver());
45
        $this->assertEquals(__DIR__, $em->getConfiguration()->getProxyDir());
46
47
        /** @var PHPDriver $metaDriver */
48
        $metaDriver = $em->getConfiguration()->getMetadataDriverImpl();
49
        $this->assertEquals([__FILE__], $metaDriver->getLocator()->getPaths());
50
    }
51
52
    public function provideConfig(): iterable
53
    {
54
        $baseConfig = [
55
            'entity_manager' => [
56
                'orm' => [
57
                    'types' => [
58
                        ChronosDateTimeType::CHRONOS_DATETIME => ChronosDateTimeType::class,
59
                    ],
60
                    'proxies_dir' => __DIR__,
61
                    'entities_mappings' => [__FILE__],
62
                ],
63
                'connection' => [
64
                    'driver' => 'pdo_sqlite',
65
                ],
66
            ],
67
        ];
68
69
        yield [array_merge($baseConfig, ['debug' => true]), 1];
70
        yield [array_merge($baseConfig, ['debug' => '1']), 1];
71
        yield [array_merge($baseConfig, ['debug' => 'true']), 1];
72
        yield [array_merge($baseConfig, ['debug' => false]), 0];
73
        yield [array_merge($baseConfig, ['debug' => null]), 0];
74
    }
75
}
76