Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 23 additions & 5 deletions src/DoctrineORMModule/Module.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@

use Symfony\Component\Console\Helper\DialogHelper;
use Symfony\Component\Console\Helper\QuestionHelper;
use Symfony\Component\Console\Input\ArgvInput;
use Symfony\Component\Console\Input\InputOption;
use Zend\ModuleManager\Feature\ControllerProviderInterface;
use Zend\ModuleManager\Feature\ConfigProviderInterface;
use Zend\ModuleManager\Feature\InitProviderInterface;
Expand Down Expand Up @@ -134,10 +136,26 @@ public function initializeConsole(EventInterface $event)
);
}

$cli->addCommands(array_map(array($serviceLocator, 'get'), $commands));
foreach ($commands as $commandName) {
/* @var $command \Symfony\Component\Console\Command\Command */
$command = $serviceLocator->get($commandName);
$command->getDefinition()->addOption(new InputOption(
'object-manager',
null,
InputOption::VALUE_OPTIONAL,
'The name of the object manager to use.',
'doctrine.entitymanager.orm_default'
));

/* @var $entityManager \Doctrine\ORM\EntityManager */
$entityManager = $serviceLocator->get('doctrine.entitymanager.orm_default');
$cli->add($command);
}

$arguments = new ArgvInput();
$objectManagerName = ($arguments->getParameterOption('--object-manager')) ?:
'doctrine.entitymanager.orm_default';

/* @var $objectManager \Doctrine\ORM\EntityManagerInterface */
$objectManager = $serviceLocator->get($objectManagerName);
$helperSet = $cli->getHelperSet();

if (class_exists('Symfony\Component\Console\Helper\QuestionHelper')) {
Expand All @@ -146,7 +164,7 @@ public function initializeConsole(EventInterface $event)
$helperSet->set(new DialogHelper(), 'dialog');
}

$helperSet->set(new ConnectionHelper($entityManager->getConnection()), 'db');
$helperSet->set(new EntityManagerHelper($entityManager), 'em');
$helperSet->set(new ConnectionHelper($objectManager->getConnection()), 'db');
$helperSet->set(new EntityManagerHelper($objectManager), 'em');
}
}
217 changes: 153 additions & 64 deletions tests/DoctrineORMModuleTest/CliTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,10 @@

namespace DoctrineORMModuleTest;

use DoctrineORMModule\Module;
use PHPUnit_Framework_TestCase;
use Symfony\Component\Console\Application;
use Zend\EventManager\Event;

/**
* Tests used to verify that command line functionality is active
Expand All @@ -30,6 +33,11 @@
*/
class CliTest extends PHPUnit_Framework_TestCase
{
/**
* @var \Zend\ServiceManager\ServiceManager
*/
protected $serviceManager;

/**
* @var \Symfony\Component\Console\Application
*/
Expand All @@ -38,7 +46,7 @@ class CliTest extends PHPUnit_Framework_TestCase
/**
* @var \Doctrine\ORM\EntityManager
*/
protected $entityManager;
protected $objectManager;

/**
* {@inheritDoc}
Expand All @@ -61,8 +69,9 @@ function () use (&$invocations) {
);

$application->bootstrap();
$this->entityManager = $serviceManager->get('doctrine.entitymanager.orm_default');
$this->cli = $serviceManager->get('doctrine.cli');
$this->serviceManager = $serviceManager;
$this->objectManager = $serviceManager->get('doctrine.entitymanager.orm_default');
$this->cli = $serviceManager->get('doctrine.cli');
$this->assertSame(1, $invocations);
}

Expand All @@ -73,73 +82,153 @@ public function testValidHelpers()
/* @var $emHelper \Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper */
$emHelper = $helperSet->get('em');
$this->assertInstanceOf('Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper', $emHelper);
$this->assertSame($this->entityManager, $emHelper->getEntityManager());
$this->assertSame($this->objectManager, $emHelper->getEntityManager());

/* @var $dbHelper \Doctrine\DBAL\Tools\Console\Helper\ConnectionHelper */
$dbHelper = $helperSet->get('db');
$this->assertInstanceOf('Doctrine\DBAL\Tools\Console\Helper\ConnectionHelper', $dbHelper);
$this->assertSame($this->entityManager->getConnection(), $dbHelper->getConnection());
$this->assertSame($this->objectManager->getConnection(), $dbHelper->getConnection());
}

public function testValidCommands()
public function testOrmDefaultIsUsedAsTheEntityManagerIfNoneIsProvided()
{
$this->assertInstanceOf('Doctrine\DBAL\Tools\Console\Command\ImportCommand', $this->cli->get('dbal:import'));
$this->assertInstanceOf('Doctrine\DBAL\Tools\Console\Command\RunSqlCommand', $this->cli->get('dbal:run-sql'));
$this->assertInstanceOf(
'Doctrine\ORM\Tools\Console\Command\ClearCache\MetadataCommand',
$this->cli->get('orm:clear-cache:metadata')
);
$this->assertInstanceOf(
'Doctrine\ORM\Tools\Console\Command\ClearCache\QueryCommand',
$this->cli->get('orm:clear-cache:query')
);
$this->assertInstanceOf(
'Doctrine\ORM\Tools\Console\Command\ClearCache\ResultCommand',
$this->cli->get('orm:clear-cache:result')
);
$this->assertInstanceOf(
'Doctrine\ORM\Tools\Console\Command\GenerateProxiesCommand',
$this->cli->get('orm:generate-proxies')
);
$this->assertInstanceOf(
'Doctrine\ORM\Tools\Console\Command\EnsureProductionSettingsCommand',
$this->cli->get('orm:ensure-production-settings')
);
$this->assertInstanceOf(
'Doctrine\ORM\Tools\Console\Command\InfoCommand',
$this->cli->get('orm:info')
);
$this->assertInstanceOf(
'Doctrine\ORM\Tools\Console\Command\SchemaTool\CreateCommand',
$this->cli->get('orm:schema-tool:create')
);
$this->assertInstanceOf(
'Doctrine\ORM\Tools\Console\Command\SchemaTool\UpdateCommand',
$this->cli->get('orm:schema-tool:update')
);
$this->assertInstanceOf(
'Doctrine\ORM\Tools\Console\Command\SchemaTool\DropCommand',
$this->cli->get('orm:schema-tool:drop')
);
$this->assertInstanceOf(
'Doctrine\ORM\Tools\Console\Command\ValidateSchemaCommand',
$this->cli->get('orm:validate-schema')
);
$this->assertInstanceOf(
'Doctrine\ORM\Tools\Console\Command\RunDqlCommand',
$this->cli->get('orm:run-dql')
);
$this->assertInstanceOf(
'Doctrine\DBAL\Migrations\Tools\Console\Command\GenerateCommand',
$this->cli->get('migrations:generate')
);
$this->assertInstanceOf(
'Doctrine\DBAL\Migrations\Tools\Console\Command\DiffCommand',
$this->cli->get('migrations:diff')
);
$this->assertInstanceOf(
'Doctrine\DBAL\Migrations\Tools\Console\Command\ExecuteCommand',
$this->cli->get('migrations:execute')
);
$application = new Application();
$event = new Event('loadCli.post', $application, ['ServiceManager' => $this->serviceManager]);

$module = new Module();
$module->initializeConsole($event);

/* @var $entityManagerHelper \Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper */
$entityManagerHelper = $application->getHelperSet()->get('entityManager');
$this->assertInstanceOf('Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper', $entityManagerHelper);
$this->assertSame($this->objectManager, $entityManagerHelper->getEntityManager());
}

/**
* @backupGlobals enabled
*/
public function testEntityManagerUsedCanBeSpecifiedInCommandLineArgument()
{
$connection = $this->getMockBuilder('Doctrine\DBAL\Connection')
->disableOriginalConstructor()
->getMock();

$entityManager = $this->getMockbuilder('Doctrine\ORM\EntityManager')
->disableOriginalConstructor()
->getMock();

$entityManager
->expects($this->atLeastOnce())
->method('getConnection')
->willReturn($connection);

$this->serviceManager->setService('doctrine.entitymanager.some_other_name', $entityManager);

$application = new Application();
$event = new Event('loadCli.post', $application, ['ServiceManager' => $this->serviceManager]);

$_SERVER['argv'][] = '--object-manager=doctrine.entitymanager.some_other_name';

$module = new Module();
$module->initializeConsole($event);

/* @var $entityManagerHelper \Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper */
$entityManagerHelper = $application->getHelperSet()->get('entityManager');
$this->assertInstanceOf('Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper', $entityManagerHelper);
$this->assertSame($entityManager, $entityManagerHelper->getEntityManager());
}

/**
* @param string $commandName
* @param string $className
*
* @dataProvider dataProviderForTestValidCommands
*/
public function testValidCommands($commandName, $className)
{
/* @var $command \Symfony\Component\Console\Command\Command */
$command = $this->cli->get($commandName);
$this->assertInstanceOf($className, $command);

// check for the entity-manager option
$this->assertTrue($command->getDefinition()->hasOption('object-manager'));

$entityManagerOption = $command->getDefinition()->getOption('object-manager');

$this->assertTrue($entityManagerOption->isValueOptional());
$this->assertFalse($entityManagerOption->isValueRequired());
$this->assertFalse($entityManagerOption->isArray());
$this->assertNull($entityManagerOption->getShortcut());
$this->assertSame('doctrine.entitymanager.orm_default', $entityManagerOption->getDefault());
$this->assertSame('The name of the object manager to use.', $entityManagerOption->getDescription());
}

/**
* @return array
*/
public function dataProviderForTestValidCommands()
{
return [
[
'dbal:import',
'Doctrine\DBAL\Tools\Console\Command\ImportCommand',
],
[
'dbal:run-sql',
'Doctrine\DBAL\Tools\Console\Command\RunSqlCommand',
],
[
'orm:clear-cache:query',
'Doctrine\ORM\Tools\Console\Command\ClearCache\QueryCommand',
],
[
'orm:clear-cache:result',
'Doctrine\ORM\Tools\Console\Command\ClearCache\ResultCommand',
],
[
'orm:generate-proxies',
'Doctrine\ORM\Tools\Console\Command\GenerateProxiesCommand',
],
[
'orm:ensure-production-settings',
'Doctrine\ORM\Tools\Console\Command\EnsureProductionSettingsCommand',
],
[
'orm:info',
'Doctrine\ORM\Tools\Console\Command\InfoCommand',
],
[
'orm:schema-tool:create',
'Doctrine\ORM\Tools\Console\Command\SchemaTool\CreateCommand',
],
[
'orm:schema-tool:update',
'Doctrine\ORM\Tools\Console\Command\SchemaTool\UpdateCommand',
],
[
'orm:schema-tool:drop',
'Doctrine\ORM\Tools\Console\Command\SchemaTool\DropCommand',
],
[
'orm:validate-schema',
'Doctrine\ORM\Tools\Console\Command\ValidateSchemaCommand',
],
[
'orm:run-dql',
'Doctrine\ORM\Tools\Console\Command\RunDqlCommand',
],
[
'migrations:generate',
'Doctrine\DBAL\Migrations\Tools\Console\Command\GenerateCommand',
],
[
'migrations:diff',
'Doctrine\DBAL\Migrations\Tools\Console\Command\DiffCommand',
],
[
'migrations:execute',
'Doctrine\DBAL\Migrations\Tools\Console\Command\ExecuteCommand',
],
];
}
}