PrefixInfoTest.php

Same filename in other branches
  1. 9 core/modules/mysql/tests/src/Kernel/mysql/PrefixInfoTest.php
  2. 10 core/modules/mysql/tests/src/Kernel/mysql/PrefixInfoTest.php
  3. 11.x core/modules/mysql/tests/src/Kernel/mysql/PrefixInfoTest.php

Namespace

Drupal\KernelTests\Core\Database

File

core/tests/Drupal/KernelTests/Core/Database/PrefixInfoTest.php

View source
<?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() {
        // Only run this test for the 'mysql' driver.
        $driver = $this->connection
            ->driver();
        if ($driver !== 'mysql') {
            $this->markTestSkipped("MySql tests can not run for driver '{$driver}'.");
        }
        $connection_info = Database::getConnectionInfo('default');
        // 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 database.
        $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(Database::class);
        $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('foobar', $extra_info['default']['database']);
        $db2_schema = $db2_connection->schema();
        $db2_info = $method->invoke($db2_schema);
        // Each target connection has a different database.
        $this->assertNotSame($db2_info['database'], $db1_info['database']);
        // The new profile has a different database.
        $this->assertSame('foobar', $db2_info['database']);
        Database::removeConnection('extra');
    }

}

Classes

Title Deprecated Summary
PrefixInfoTest Tests that the prefix info for a database schema is correct.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.