Completed
Push — master ( c3465a...e27b3b )
by Tom
03:42 queued 15s
created

CliConfiguratorTest::testValidCommands()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 23
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 23
rs 9.0856
cc 1
eloc 14
nc 1
nop 2
1
<?php
2
3
namespace DoctrineORMModuleTest\Listener;
4
5
use Doctrine\DBAL\Connection;
6
use Doctrine\ORM\EntityManager;
7
use Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper;
8
use DoctrineORMModule\CliConfigurator;
9
use DoctrineORMModuleTest\ServiceManagerFactory;
10
use PHPUnit\Framework\TestCase;
11
use Symfony\Component\Console\Application;
12
13
/**
14
 * @license MIT
15
 * @link    http://www.doctrine-project.org/
16
 * @author  Nicolas Eeckeloo <[email protected]>
17
 */
18
class CliConfiguratorTest extends TestCase
19
{
20
    /**
21
     * @var \Zend\ServiceManager\ServiceManager
22
     */
23
    protected $serviceManager;
24
25
    /**
26
     * @var \Doctrine\ORM\EntityManager
27
     */
28
    protected $objectManager;
29
30
    /**
31
     * {@inheritDoc}
32
     */
33
    public function setUp()
34
    {
35
        $this->serviceManager = ServiceManagerFactory::getServiceManager();
36
        $this->objectManager  = $this->serviceManager->get('doctrine.entitymanager.orm_default');
37
    }
38
39
    public function testOrmDefaultIsUsedAsTheEntityManagerIfNoneIsProvided()
40
    {
41
        $application = new Application();
42
43
        $cliConfigurator = new CliConfigurator($this->serviceManager);
44
        $cliConfigurator->configure($application);
45
46
        /* @var $entityManagerHelper \Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper */
47
        $entityManagerHelper = $application->getHelperSet()->get('entityManager');
48
49
        $this->assertInstanceOf(EntityManagerHelper::class, $entityManagerHelper);
50
        $this->assertSame($this->objectManager, $entityManagerHelper->getEntityManager());
51
    }
52
53
    /**
54
     * @backupGlobals enabled
55
     */
56
    public function testEntityManagerUsedCanBeSpecifiedInCommandLineArgument()
57
    {
58
        $objectManagerName = 'doctrine.entitymanager.some_other_name';
59
60
        $connection = $this->getMockBuilder(Connection::class)
61
            ->disableOriginalConstructor()
62
            ->getMock();
63
64
        $entityManager = $this->getMockbuilder(EntityManager::class)
65
            ->disableOriginalConstructor()
66
            ->getMock();
67
68
        $entityManager
69
            ->expects($this->atLeastOnce())
70
            ->method('getConnection')
71
            ->willReturn($connection);
72
73
        $this->serviceManager->setService($objectManagerName, $entityManager);
74
75
        $application = new Application();
76
77
        $_SERVER['argv'][] = '--object-manager=' . $objectManagerName;
78
79
        $cliConfigurator = new CliConfigurator($this->serviceManager);
80
        $cliConfigurator->configure($application);
81
82
        /* @var $entityManagerHelper \Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper */
83
        $entityManagerHelper = $application->getHelperSet()->get('entityManager');
84
85
        $this->assertInstanceOf(EntityManagerHelper::class, $entityManagerHelper);
86
        $this->assertSame($entityManager, $entityManagerHelper->getEntityManager());
87
    }
88
89
    public function testValidHelpers()
90
    {
91
        $application = new Application();
92
93
        $cliConfigurator = new CliConfigurator($this->serviceManager);
94
        $cliConfigurator->configure($application);
95
96
        $helperSet = $application->getHelperSet();
97
98
        /* @var $emHelper \Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper */
99
        $emHelper = $helperSet->get('em');
100
        $this->assertInstanceOf(\Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper::class, $emHelper);
101
        $this->assertSame($this->objectManager, $emHelper->getEntityManager());
102
103
        /* @var $dbHelper \Doctrine\DBAL\Tools\Console\Helper\ConnectionHelper */
104
        $dbHelper = $helperSet->get('db');
105
        $this->assertInstanceOf(\Doctrine\DBAL\Tools\Console\Helper\ConnectionHelper::class, $dbHelper);
106
        $this->assertSame($this->objectManager->getConnection(), $dbHelper->getConnection());
107
    }
108
109
    /**
110
     * @param string $commandName
111
     * @param string $className
112
     *
113
     * @dataProvider dataProviderForTestValidCommands
114
     */
115
    public function testValidCommands($commandName, $className)
116
    {
117
        $application = new Application();
118
119
        $cliConfigurator = new CliConfigurator($this->serviceManager);
120
        $cliConfigurator->configure($application);
121
122
        /* @var $command \Symfony\Component\Console\Command\Command */
123
        $command = $application->get($commandName);
124
        $this->assertInstanceOf($className, $command);
125
126
        // check for the entity-manager option
127
        $this->assertTrue($command->getDefinition()->hasOption('object-manager'));
128
129
        $entityManagerOption = $command->getDefinition()->getOption('object-manager');
130
131
        $this->assertTrue($entityManagerOption->isValueOptional());
132
        $this->assertFalse($entityManagerOption->isValueRequired());
133
        $this->assertFalse($entityManagerOption->isArray());
134
        $this->assertNull($entityManagerOption->getShortcut());
135
        $this->assertSame('doctrine.entitymanager.orm_default', $entityManagerOption->getDefault());
136
        $this->assertSame('The name of the object manager to use.', $entityManagerOption->getDescription());
137
    }
138
139
    /**
140
     * @return array
141
     */
142
    public function dataProviderForTestValidCommands()
143
    {
144
        return [
145
            [
146
                'dbal:import',
147
                \Doctrine\DBAL\Tools\Console\Command\ImportCommand::class,
148
            ],
149
            [
150
                'dbal:run-sql',
151
                \Doctrine\DBAL\Tools\Console\Command\RunSqlCommand::class,
152
            ],
153
            [
154
                'orm:clear-cache:query',
155
                \Doctrine\ORM\Tools\Console\Command\ClearCache\QueryCommand::class,
156
            ],
157
            [
158
                'orm:clear-cache:result',
159
                \Doctrine\ORM\Tools\Console\Command\ClearCache\ResultCommand::class,
160
            ],
161
            [
162
                'orm:generate-proxies',
163
                \Doctrine\ORM\Tools\Console\Command\GenerateProxiesCommand::class,
164
            ],
165
            [
166
                'orm:ensure-production-settings',
167
                \Doctrine\ORM\Tools\Console\Command\EnsureProductionSettingsCommand::class,
168
            ],
169
            [
170
                'orm:info',
171
                \Doctrine\ORM\Tools\Console\Command\InfoCommand::class,
172
            ],
173
            [
174
                'orm:schema-tool:create',
175
                \Doctrine\ORM\Tools\Console\Command\SchemaTool\CreateCommand::class,
176
            ],
177
            [
178
                'orm:schema-tool:update',
179
                \Doctrine\ORM\Tools\Console\Command\SchemaTool\UpdateCommand::class,
180
            ],
181
            [
182
                'orm:schema-tool:drop',
183
                \Doctrine\ORM\Tools\Console\Command\SchemaTool\DropCommand::class,
184
            ],
185
            [
186
                'orm:validate-schema',
187
                \Doctrine\ORM\Tools\Console\Command\ValidateSchemaCommand::class,
188
            ],
189
            [
190
                'orm:run-dql',
191
                \Doctrine\ORM\Tools\Console\Command\RunDqlCommand::class,
192
            ],
193
            [
194
                'migrations:generate',
195
                \Doctrine\DBAL\Migrations\Tools\Console\Command\GenerateCommand::class,
196
            ],
197
            [
198
                'migrations:diff',
199
                \Doctrine\DBAL\Migrations\Tools\Console\Command\DiffCommand::class,
200
            ],
201
            [
202
                'migrations:execute',
203
                \Doctrine\DBAL\Migrations\Tools\Console\Command\ExecuteCommand::class,
204
            ],
205
        ];
206
    }
207
}
208