X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=src%2FWallabag%2FCoreBundle%2FTests%2FCommand%2FInstallCommandTest.php;h=249672a65d403634f065d4dd35f2b63a04556626;hb=5ecdfcd041767c9e3244a92bb0a6cc3c3f80fea3;hp=64f6c3290dbef63f1bbd0330e4bae943fbe7cb94;hpb=0e7971d8354b0923d2e8f38690b9fe46e695dd93;p=github%2Fwallabag%2Fwallabag.git diff --git a/src/Wallabag/CoreBundle/Tests/Command/InstallCommandTest.php b/src/Wallabag/CoreBundle/Tests/Command/InstallCommandTest.php index 64f6c329..249672a6 100644 --- a/src/Wallabag/CoreBundle/Tests/Command/InstallCommandTest.php +++ b/src/Wallabag/CoreBundle/Tests/Command/InstallCommandTest.php @@ -2,142 +2,150 @@ namespace Wallabag\CoreBundle\Tests\Command; -use Wallabag\CoreBundle\Tests\WallabagTestCase; -use Wallabag\CoreBundle\Command\InstallCommand; +use Doctrine\Bundle\DoctrineBundle\Command\CreateDatabaseDoctrineCommand; +use Doctrine\Bundle\DoctrineBundle\Command\DropDatabaseDoctrineCommand; use Symfony\Bundle\FrameworkBundle\Console\Application; -use Symfony\Component\Console\Tester\CommandTester; use Symfony\Component\Console\Input\ArrayInput; use Symfony\Component\Console\Output\NullOutput; -use Doctrine\Bundle\DoctrineBundle\Command\DropDatabaseDoctrineCommand; -use Doctrine\Bundle\DoctrineBundle\Command\CreateDatabaseDoctrineCommand; +use Symfony\Component\Console\Tester\CommandTester; +use Wallabag\CoreBundle\Command\InstallCommand; +use Wallabag\CoreBundle\Tests\Mock\InstallCommandMock; +use Wallabag\CoreBundle\Tests\WallabagCoreTestCase; -class InstallCommandTest extends WallabagTestCase +class InstallCommandTest extends WallabagCoreTestCase { + public function setUp() + { + parent::setUp(); + + if ($this->getClient()->getContainer()->get('doctrine')->getConnection()->getDriver() instanceof \Doctrine\DBAL\Driver\PDOPgSql\Driver) { + /* + * LOG: statement: CREATE DATABASE "wallabag" + * ERROR: source database "template1" is being accessed by other users + * DETAIL: There is 1 other session using the database. + * STATEMENT: CREATE DATABASE "wallabag" + * FATAL: database "wallabag" does not exist + * + * http://stackoverflow.com/a/14374832/569101 + */ + $this->markTestSkipped('PostgreSQL spotted: can find a good way to drop current database, skipping.'); + } + } + public static function tearDownAfterClass() { $application = new Application(static::$kernel); $application->setAutoExit(false); - $code = $application->run(new ArrayInput(array( + $code = $application->run(new ArrayInput([ 'command' => 'doctrine:fixtures:load', '--no-interaction' => true, '--env' => 'test', - )), new NullOutput()); + ]), new NullOutput()); } public function testRunInstallCommand() { - $this->container = static::$kernel->getContainer(); - - $application = new Application(static::$kernel); - $application->add(new InstallCommand()); + $application = new Application($this->getClient()->getKernel()); + $application->add(new InstallCommandMock()); $command = $application->find('wallabag:install'); - // We mock the DialogHelper - $dialog = $this->getMockBuilder('Symfony\Component\Console\Helper\DialogHelper') + // We mock the QuestionHelper + $question = $this->getMockBuilder('Symfony\Component\Console\Helper\QuestionHelper') ->disableOriginalConstructor() ->getMock(); - $dialog->expects($this->any()) + $question->expects($this->any()) ->method('ask') - ->will($this->returnValue('test')); - $dialog->expects($this->any()) - ->method('askConfirmation') - ->will($this->returnValue(true)); + ->will($this->returnValue('yes_'.uniqid('', true))); // We override the standard helper with our mock - $command->getHelperSet()->set($dialog, 'dialog'); + $command->getHelperSet()->set($question, 'question'); $tester = new CommandTester($command); - $tester->execute(array( + $tester->execute([ 'command' => $command->getName(), - )); + ]); - $this->assertContains('Step 1 of 4. Checking system requirements.', $tester->getDisplay()); - $this->assertContains('Step 2 of 4. Setting up database.', $tester->getDisplay()); - $this->assertContains('Step 3 of 4. Administration setup.', $tester->getDisplay()); - $this->assertContains('Step 4 of 4. Installing assets.', $tester->getDisplay()); + $this->assertContains('Checking system requirements.', $tester->getDisplay()); + $this->assertContains('Setting up database.', $tester->getDisplay()); + $this->assertContains('Administration setup.', $tester->getDisplay()); + $this->assertContains('Config setup.', $tester->getDisplay()); } public function testRunInstallCommandWithReset() { - $this->container = static::$kernel->getContainer(); - - $application = new Application(static::$kernel); - $application->add(new InstallCommand()); + $application = new Application($this->getClient()->getKernel()); + $application->add(new InstallCommandMock()); $command = $application->find('wallabag:install'); - // We mock the DialogHelper - $dialog = $this->getMockBuilder('Symfony\Component\Console\Helper\DialogHelper') + // We mock the QuestionHelper + $question = $this->getMockBuilder('Symfony\Component\Console\Helper\QuestionHelper') ->disableOriginalConstructor() ->getMock(); - $dialog->expects($this->any()) + $question->expects($this->any()) ->method('ask') - ->will($this->returnValue('test')); - $dialog->expects($this->any()) - ->method('askConfirmation') - ->will($this->returnValue(true)); + ->will($this->returnValue('yes_'.uniqid('', true))); // We override the standard helper with our mock - $command->getHelperSet()->set($dialog, 'dialog'); + $command->getHelperSet()->set($question, 'question'); $tester = new CommandTester($command); - $tester->execute(array( + $tester->execute([ 'command' => $command->getName(), '--reset' => true, - )); + ]); - $this->assertContains('Step 1 of 4. Checking system requirements.', $tester->getDisplay()); - $this->assertContains('Step 2 of 4. Setting up database.', $tester->getDisplay()); - $this->assertContains('Step 3 of 4. Administration setup.', $tester->getDisplay()); - $this->assertContains('Step 4 of 4. Installing assets.', $tester->getDisplay()); + $this->assertContains('Checking system requirements.', $tester->getDisplay()); + $this->assertContains('Setting up database.', $tester->getDisplay()); + $this->assertContains('Droping database, creating database and schema, clearing the cache', $tester->getDisplay()); + $this->assertContains('Administration setup.', $tester->getDisplay()); + $this->assertContains('Config setup.', $tester->getDisplay()); // we force to reset everything - $this->assertContains('Droping database, creating database and schema', $tester->getDisplay()); + $this->assertContains('Droping database, creating database and schema, clearing the cache', $tester->getDisplay()); } public function testRunInstallCommandWithDatabaseRemoved() { - $this->container = static::$kernel->getContainer(); - - $application = new Application(static::$kernel); - $application->add(new InstallCommand()); + $application = new Application($this->getClient()->getKernel()); $application->add(new DropDatabaseDoctrineCommand()); // drop database first, so the install command won't ask to reset things - $command = new DropDatabaseDoctrineCommand(); - $command->setApplication($application); - $command->run(new ArrayInput(array( + $command = $application->find('doctrine:database:drop'); + $command->run(new ArrayInput([ 'command' => 'doctrine:database:drop', '--force' => true, - )), new NullOutput()); + ]), new NullOutput()); + + // start a new application to avoid lagging connexion to pgsql + $client = static::createClient(); + $application = new Application($client->getKernel()); + $application->add(new InstallCommand()); $command = $application->find('wallabag:install'); - // We mock the DialogHelper - $dialog = $this->getMockBuilder('Symfony\Component\Console\Helper\DialogHelper') + // We mock the QuestionHelper + $question = $this->getMockBuilder('Symfony\Component\Console\Helper\QuestionHelper') ->disableOriginalConstructor() ->getMock(); - $dialog->expects($this->any()) + $question->expects($this->any()) ->method('ask') - ->will($this->returnValue('test')); - $dialog->expects($this->any()) - ->method('askConfirmation') - ->will($this->returnValue(true)); + ->will($this->returnValue('yes_'.uniqid('', true))); // We override the standard helper with our mock - $command->getHelperSet()->set($dialog, 'dialog'); + $command->getHelperSet()->set($question, 'question'); $tester = new CommandTester($command); - $tester->execute(array( + $tester->execute([ 'command' => $command->getName(), - )); + ]); - $this->assertContains('Step 1 of 4. Checking system requirements.', $tester->getDisplay()); - $this->assertContains('Step 2 of 4. Setting up database.', $tester->getDisplay()); - $this->assertContains('Step 3 of 4. Administration setup.', $tester->getDisplay()); - $this->assertContains('Step 4 of 4. Installing assets.', $tester->getDisplay()); + $this->assertContains('Checking system requirements.', $tester->getDisplay()); + $this->assertContains('Setting up database.', $tester->getDisplay()); + $this->assertContains('Administration setup.', $tester->getDisplay()); + $this->assertContains('Config setup.', $tester->getDisplay()); // the current database doesn't already exist $this->assertContains('Creating database and schema, clearing the cache', $tester->getDisplay()); @@ -145,20 +153,18 @@ class InstallCommandTest extends WallabagTestCase public function testRunInstallCommandChooseResetSchema() { - $this->container = static::$kernel->getContainer(); - - $application = new Application(static::$kernel); - $application->add(new InstallCommand()); + $application = new Application($this->getClient()->getKernel()); + $application->add(new InstallCommandMock()); $command = $application->find('wallabag:install'); - // We mock the DialogHelper - $dialog = $this->getMockBuilder('Symfony\Component\Console\Helper\DialogHelper') + // We mock the QuestionHelper + $question = $this->getMockBuilder('Symfony\Component\Console\Helper\QuestionHelper') ->disableOriginalConstructor() ->getMock(); - $dialog->expects($this->exactly(3)) - ->method('askConfirmation') + $question->expects($this->exactly(3)) + ->method('ask') ->will($this->onConsecutiveCalls( false, // don't want to reset the entire database true, // do want to reset the schema @@ -166,26 +172,24 @@ class InstallCommandTest extends WallabagTestCase )); // We override the standard helper with our mock - $command->getHelperSet()->set($dialog, 'dialog'); + $command->getHelperSet()->set($question, 'question'); $tester = new CommandTester($command); - $tester->execute(array( + $tester->execute([ 'command' => $command->getName(), - )); + ]); - $this->assertContains('Step 1 of 4. Checking system requirements.', $tester->getDisplay()); - $this->assertContains('Step 2 of 4. Setting up database.', $tester->getDisplay()); - $this->assertContains('Step 3 of 4. Administration setup.', $tester->getDisplay()); - $this->assertContains('Step 4 of 4. Installing assets.', $tester->getDisplay()); + $this->assertContains('Checking system requirements.', $tester->getDisplay()); + $this->assertContains('Setting up database.', $tester->getDisplay()); + $this->assertContains('Administration setup.', $tester->getDisplay()); + $this->assertContains('Config setup.', $tester->getDisplay()); $this->assertContains('Droping schema and creating schema', $tester->getDisplay()); } public function testRunInstallCommandChooseNothing() { - $this->container = static::$kernel->getContainer(); - - $application = new Application(static::$kernel); + $application = new Application($this->getClient()->getKernel()); $application->add(new InstallCommand()); $application->add(new DropDatabaseDoctrineCommand()); $application->add(new CreateDatabaseDoctrineCommand()); @@ -193,82 +197,77 @@ class InstallCommandTest extends WallabagTestCase // drop database first, so the install command won't ask to reset things $command = new DropDatabaseDoctrineCommand(); $command->setApplication($application); - $command->run(new ArrayInput(array( + $command->run(new ArrayInput([ 'command' => 'doctrine:database:drop', '--force' => true, - )), new NullOutput()); + ]), new NullOutput()); - $this->container->get('doctrine')->getManager()->getConnection()->close(); + $this->getClient()->getContainer()->get('doctrine')->getConnection()->close(); $command = new CreateDatabaseDoctrineCommand(); $command->setApplication($application); - $command->run(new ArrayInput(array( + $command->run(new ArrayInput([ 'command' => 'doctrine:database:create', '--env' => 'test', - )), new NullOutput()); + ]), new NullOutput()); $command = $application->find('wallabag:install'); - // We mock the DialogHelper - $dialog = $this->getMockBuilder('Symfony\Component\Console\Helper\DialogHelper') + // We mock the QuestionHelper + $question = $this->getMockBuilder('Symfony\Component\Console\Helper\QuestionHelper') ->disableOriginalConstructor() ->getMock(); - $dialog->expects($this->exactly(2)) - ->method('askConfirmation') + $question->expects($this->exactly(2)) + ->method('ask') ->will($this->onConsecutiveCalls( false, // don't want to reset the entire database false // don't want to create a new user )); // We override the standard helper with our mock - $command->getHelperSet()->set($dialog, 'dialog'); + $command->getHelperSet()->set($question, 'question'); $tester = new CommandTester($command); - $tester->execute(array( + $tester->execute([ 'command' => $command->getName(), - )); + ]); - $this->assertContains('Step 1 of 4. Checking system requirements.', $tester->getDisplay()); - $this->assertContains('Step 2 of 4. Setting up database.', $tester->getDisplay()); - $this->assertContains('Step 3 of 4. Administration setup.', $tester->getDisplay()); - $this->assertContains('Step 4 of 4. Installing assets.', $tester->getDisplay()); + $this->assertContains('Checking system requirements.', $tester->getDisplay()); + $this->assertContains('Setting up database.', $tester->getDisplay()); + $this->assertContains('Administration setup.', $tester->getDisplay()); + $this->assertContains('Config setup.', $tester->getDisplay()); $this->assertContains('Creating schema', $tester->getDisplay()); } public function testRunInstallCommandNoInteraction() { - $this->container = static::$kernel->getContainer(); - - $application = new Application(static::$kernel); - $application->add(new InstallCommand()); + $application = new Application($this->getClient()->getKernel()); + $application->add(new InstallCommandMock()); $command = $application->find('wallabag:install'); - // We mock the DialogHelper - $dialog = $this->getMockBuilder('Symfony\Component\Console\Helper\DialogHelper') + // We mock the QuestionHelper + $question = $this->getMockBuilder('Symfony\Component\Console\Helper\QuestionHelper') ->disableOriginalConstructor() ->getMock(); - $dialog->expects($this->any()) + $question->expects($this->any()) ->method('ask') - ->will($this->returnValue('test')); - $dialog->expects($this->any()) - ->method('askConfirmation') - ->will($this->returnValue(true)); + ->will($this->returnValue('yes_'.uniqid('', true))); // We override the standard helper with our mock - $command->getHelperSet()->set($dialog, 'dialog'); + $command->getHelperSet()->set($question, 'question'); $tester = new CommandTester($command); - $tester->execute(array( + $tester->execute([ 'command' => $command->getName(), '--no-interaction' => true, - )); + ]); - $this->assertContains('Step 1 of 4. Checking system requirements.', $tester->getDisplay()); - $this->assertContains('Step 2 of 4. Setting up database.', $tester->getDisplay()); - $this->assertContains('Step 3 of 4. Administration setup.', $tester->getDisplay()); - $this->assertContains('Step 4 of 4. Installing assets.', $tester->getDisplay()); + $this->assertContains('Checking system requirements.', $tester->getDisplay()); + $this->assertContains('Setting up database.', $tester->getDisplay()); + $this->assertContains('Administration setup.', $tester->getDisplay()); + $this->assertContains('Config setup.', $tester->getDisplay()); } }