From c641baad0ec52198d77f2018c7bf8acdfe5957ce Mon Sep 17 00:00:00 2001 From: Jeremy Date: Sun, 22 Feb 2015 23:29:48 +0100 Subject: [PATCH] More tests on the install command --- .../Tests/Command/InstallCommandTest.php | 219 +++++++++++++++++- 1 file changed, 216 insertions(+), 3 deletions(-) diff --git a/src/Wallabag/CoreBundle/Tests/Command/InstallCommandTest.php b/src/Wallabag/CoreBundle/Tests/Command/InstallCommandTest.php index a091d66f..64f6c329 100644 --- a/src/Wallabag/CoreBundle/Tests/Command/InstallCommandTest.php +++ b/src/Wallabag/CoreBundle/Tests/Command/InstallCommandTest.php @@ -8,13 +8,13 @@ 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; class InstallCommandTest extends WallabagTestCase { - public function tearDown() + public static function tearDownAfterClass() { - parent::tearDown(); - $application = new Application(static::$kernel); $application->setAutoExit(false); @@ -58,4 +58,217 @@ class InstallCommandTest extends WallabagTestCase $this->assertContains('Step 3 of 4. Administration setup.', $tester->getDisplay()); $this->assertContains('Step 4 of 4. Installing assets.', $tester->getDisplay()); } + + public function testRunInstallCommandWithReset() + { + $this->container = static::$kernel->getContainer(); + + $application = new Application(static::$kernel); + $application->add(new InstallCommand()); + + $command = $application->find('wallabag:install'); + + // We mock the DialogHelper + $dialog = $this->getMockBuilder('Symfony\Component\Console\Helper\DialogHelper') + ->disableOriginalConstructor() + ->getMock(); + $dialog->expects($this->any()) + ->method('ask') + ->will($this->returnValue('test')); + $dialog->expects($this->any()) + ->method('askConfirmation') + ->will($this->returnValue(true)); + + // We override the standard helper with our mock + $command->getHelperSet()->set($dialog, 'dialog'); + + $tester = new CommandTester($command); + $tester->execute(array( + '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()); + + // we force to reset everything + $this->assertContains('Droping database, creating database and schema', $tester->getDisplay()); + } + + public function testRunInstallCommandWithDatabaseRemoved() + { + $this->container = static::$kernel->getContainer(); + + $application = new Application(static::$kernel); + $application->add(new InstallCommand()); + $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' => 'doctrine:database:drop', + '--force' => true, + )), new NullOutput()); + + $command = $application->find('wallabag:install'); + + // We mock the DialogHelper + $dialog = $this->getMockBuilder('Symfony\Component\Console\Helper\DialogHelper') + ->disableOriginalConstructor() + ->getMock(); + $dialog->expects($this->any()) + ->method('ask') + ->will($this->returnValue('test')); + $dialog->expects($this->any()) + ->method('askConfirmation') + ->will($this->returnValue(true)); + + // We override the standard helper with our mock + $command->getHelperSet()->set($dialog, 'dialog'); + + $tester = new CommandTester($command); + $tester->execute(array( + '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()); + + // the current database doesn't already exist + $this->assertContains('Creating database and schema, clearing the cache', $tester->getDisplay()); + } + + public function testRunInstallCommandChooseResetSchema() + { + $this->container = static::$kernel->getContainer(); + + $application = new Application(static::$kernel); + $application->add(new InstallCommand()); + + $command = $application->find('wallabag:install'); + + // We mock the DialogHelper + $dialog = $this->getMockBuilder('Symfony\Component\Console\Helper\DialogHelper') + ->disableOriginalConstructor() + ->getMock(); + + $dialog->expects($this->exactly(3)) + ->method('askConfirmation') + ->will($this->onConsecutiveCalls( + false, // don't want to reset the entire database + true, // do want to reset the schema + false // don't want to create a new user + )); + + // We override the standard helper with our mock + $command->getHelperSet()->set($dialog, 'dialog'); + + $tester = new CommandTester($command); + $tester->execute(array( + '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('Droping schema and creating schema', $tester->getDisplay()); + } + + public function testRunInstallCommandChooseNothing() + { + $this->container = static::$kernel->getContainer(); + + $application = new Application(static::$kernel); + $application->add(new InstallCommand()); + $application->add(new DropDatabaseDoctrineCommand()); + $application->add(new CreateDatabaseDoctrineCommand()); + + // 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' => 'doctrine:database:drop', + '--force' => true, + )), new NullOutput()); + + $this->container->get('doctrine')->getManager()->getConnection()->close(); + + $command = new CreateDatabaseDoctrineCommand(); + $command->setApplication($application); + $command->run(new ArrayInput(array( + 'command' => 'doctrine:database:create', + '--env' => 'test', + )), new NullOutput()); + + $command = $application->find('wallabag:install'); + + // We mock the DialogHelper + $dialog = $this->getMockBuilder('Symfony\Component\Console\Helper\DialogHelper') + ->disableOriginalConstructor() + ->getMock(); + + $dialog->expects($this->exactly(2)) + ->method('askConfirmation') + ->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'); + + $tester = new CommandTester($command); + $tester->execute(array( + '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('Creating schema', $tester->getDisplay()); + } + + public function testRunInstallCommandNoInteraction() + { + $this->container = static::$kernel->getContainer(); + + $application = new Application(static::$kernel); + $application->add(new InstallCommand()); + + $command = $application->find('wallabag:install'); + + // We mock the DialogHelper + $dialog = $this->getMockBuilder('Symfony\Component\Console\Helper\DialogHelper') + ->disableOriginalConstructor() + ->getMock(); + $dialog->expects($this->any()) + ->method('ask') + ->will($this->returnValue('test')); + $dialog->expects($this->any()) + ->method('askConfirmation') + ->will($this->returnValue(true)); + + // We override the standard helper with our mock + $command->getHelperSet()->set($dialog, 'dialog'); + + $tester = new CommandTester($command); + $tester->execute(array( + '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()); + } } -- 2.41.0