Version 1
[yaffs-website] / web / core / tests / Drupal / KernelTests / Core / Database / PrefixInfoTest.php
diff --git a/web/core/tests/Drupal/KernelTests/Core/Database/PrefixInfoTest.php b/web/core/tests/Drupal/KernelTests/Core/Database/PrefixInfoTest.php
new file mode 100644 (file)
index 0000000..16fd053
--- /dev/null
@@ -0,0 +1,66 @@
+<?php
+
+namespace Drupal\KernelTests\Core\Database;
+
+use Drupal\Core\Database\Database;
+
+/**
+ * Tests that the prefix info for a database schema is correct.
+ *
+ * @group Database
+ */
+class PrefixInfoTest extends DatabaseTestBase {
+
+  /**
+   * Tests that DatabaseSchema::getPrefixInfo() returns the right database.
+   *
+   * We are testing if the return array of the method
+   * \Drupal\Core\Database\Driver\mysql\Schema::getPrefixInfo(). This return
+   * array is a keyed array with info about amongst other things the database.
+   * The other two by Drupal core supported databases do not have this variable
+   * set in the return array.
+   */
+  public function testGetPrefixInfo() {
+    $connection_info = Database::getConnectionInfo('default');
+    if ($connection_info['default']['driver'] == 'mysql') {
+      // Copy the default connection info to the 'extra' key.
+      Database::addConnectionInfo('extra', 'default', $connection_info['default']);
+
+      $db1_connection = Database::getConnection('default', 'default');
+      $db1_schema = $db1_connection->schema();
+      $db2_connection = Database::getConnection('default', 'extra');
+
+      // Get the prefix info for the first databse.
+      $method = new \ReflectionMethod($db1_schema, 'getPrefixInfo');
+      $method->setAccessible(TRUE);
+      $db1_info = $method->invoke($db1_schema);
+
+      // We change the database after opening the connection, so as to prevent
+      // connecting to a non-existent database.
+      $reflection = new \ReflectionObject($db2_connection);
+      $property = $reflection->getProperty('connectionOptions');
+      $property->setAccessible(TRUE);
+      $connection_info['default']['database'] = 'foobar';
+      $property->setValue($db2_connection, $connection_info['default']);
+
+      // For testing purposes, we also change the database info.
+      $reflection_class = new \ReflectionClass('Drupal\Core\Database\Database');
+      $property = $reflection_class->getProperty('databaseInfo');
+      $property->setAccessible(TRUE);
+      $info = $property->getValue();
+      $info['extra']['default']['database'] = 'foobar';
+      $property->setValue(NULL, $info);
+
+      $extra_info = Database::getConnectionInfo('extra');
+      $this->assertSame($extra_info['default']['database'], 'foobar');
+      $db2_schema = $db2_connection->schema();
+      $db2_info = $method->invoke($db2_schema);
+
+      $this->assertNotSame($db2_info['database'], $db1_info['database'], 'Each target connection has a different database.');
+      $this->assertSame($db2_info['database'], 'foobar', 'The new profile has a different database.');
+
+      Database::removeConnection('extra');
+    }
+  }
+
+}