Version 1
[yaffs-website] / web / core / modules / system / tests / src / Kernel / Scripts / DbCommandBaseTest.php
diff --git a/web/core/modules/system/tests/src/Kernel/Scripts/DbCommandBaseTest.php b/web/core/modules/system/tests/src/Kernel/Scripts/DbCommandBaseTest.php
new file mode 100644 (file)
index 0000000..cb7f5eb
--- /dev/null
@@ -0,0 +1,137 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Tests\system\Kernel\Scripts\DbCommandBaseTest.
+ */
+
+namespace Drupal\Tests\system\Kernel\Scripts;
+
+use Drupal\Core\Command\DbCommandBase;
+use Drupal\Core\Database\ConnectionNotDefinedException;
+use Drupal\Core\Database\Database;
+use Drupal\KernelTests\KernelTestBase;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Tester\CommandTester;
+
+/**
+ * Test that the DbToolsApplication works correctly.
+ *
+ * The way console application's run it is impossible to test. For now we only
+ * test that we are registering the correct commands.
+ *
+ * @group console
+ */
+class DbCommandBaseTest extends KernelTestBase {
+
+  /**
+   * Test specifying a database key.
+   */
+  public function testSpecifyDatabaseKey() {
+    $command = new DbCommandBaseTester();
+    $command_tester = new CommandTester($command);
+
+    Database::addConnectionInfo('magic_db', 'default', Database::getConnectionInfo('default')['default']);
+
+    $command_tester->execute([
+      '--database' => 'magic_db'
+    ]);
+    $this->assertEquals('magic_db', $command->getDatabaseConnection($command_tester->getInput())->getKey(),
+       'Special db key is returned');
+  }
+
+  /**
+   * Invalid database names will throw a useful exception.
+   */
+  public function testSpecifyDatabaseDoesNotExist() {
+    $command = new DbCommandBaseTester();
+    $command_tester = new CommandTester($command);
+    $command_tester->execute([
+      '--database' => 'dne'
+    ]);
+    $this->setExpectedException(ConnectionNotDefinedException::class);
+    $command->getDatabaseConnection($command_tester->getInput());
+  }
+
+  /**
+   * Test supplying database connection as a url.
+   */
+  public function testSpecifyDbUrl() {
+    $connection_info = Database::getConnectionInfo('default')['default'];
+
+    $command = new DbCommandBaseTester();
+    $command_tester = new CommandTester($command);
+    $command_tester->execute([
+      '-db-url' => $connection_info['driver'] . '://' . $connection_info['username'] . ':' . $connection_info['password'] . '@' . $connection_info['host'] . '/' . $connection_info['database']
+    ]);
+    $this->assertEquals('db-tools', $command->getDatabaseConnection($command_tester->getInput())->getKey());
+
+    Database::removeConnection('db-tools');
+    $command_tester->execute([
+      '--database-url' => $connection_info['driver'] . '://' . $connection_info['username'] . ':' . $connection_info['password'] . '@' . $connection_info['host'] . '/' . $connection_info['database']
+    ]);
+    $this->assertEquals('db-tools', $command->getDatabaseConnection($command_tester->getInput())->getKey());
+  }
+
+  /**
+   * Test specifying a prefix for different connections.
+   */
+  public function testPrefix() {
+    if (Database::getConnection()->driver() == 'sqlite') {
+      $this->markTestSkipped('SQLITE modifies the prefixes so we cannot effectively test it');
+    }
+
+    Database::addConnectionInfo('magic_db', 'default', Database::getConnectionInfo('default')['default']);
+    $command = new DbCommandBaseTester();
+    $command_tester = new CommandTester($command);
+    $command_tester->execute([
+      '--database' => 'magic_db',
+      '--prefix' => 'extra',
+    ]);
+    $this->assertEquals('extra', $command->getDatabaseConnection($command_tester->getInput())->tablePrefix());
+
+    $connection_info = Database::getConnectionInfo('default')['default'];
+    $command_tester->execute([
+      '-db-url' => $connection_info['driver'] . '://' . $connection_info['username'] . ':' . $connection_info['password'] . '@' . $connection_info['host'] . '/' . $connection_info['database'],
+      '--prefix' => 'extra2',
+    ]);
+    $this->assertEquals('extra2', $command->getDatabaseConnection($command_tester->getInput())->tablePrefix());
+
+    // This breaks simpletest cleanup.
+    //    $command_tester->execute([
+    //      '--prefix' => 'notsimpletest',
+    //    ]);
+    //    $this->assertEquals('notsimpletest', $command->getDatabaseConnection($command_tester->getInput())->tablePrefix());
+  }
+
+}
+
+/**
+ * Concrete command implementation for testing base features.
+ */
+class DbCommandBaseTester extends DbCommandBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function configure() {
+    parent::configure();
+    $this->setName('test');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDatabaseConnection(InputInterface $input) {
+    return parent::getDatabaseConnection($input);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function execute(InputInterface $input, OutputInterface $output) {
+    // Empty implementation for testing.
+  }
+
+}