69 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
declare(strict_types=1);
 | 
						|
 | 
						|
namespace Drupal\KernelTests;
 | 
						|
 | 
						|
use Drupal\Core\Database\Database;
 | 
						|
 | 
						|
/**
 | 
						|
 * @coversDefaultClass \Drupal\KernelTests\KernelTestBase
 | 
						|
 *
 | 
						|
 * @group PHPUnit
 | 
						|
 * @group Test
 | 
						|
 * @group KernelTests
 | 
						|
 */
 | 
						|
class KernelTestBaseDatabaseDriverModuleTest extends KernelTestBase {
 | 
						|
 | 
						|
  /**
 | 
						|
   * {@inheritdoc}
 | 
						|
   */
 | 
						|
  protected function getDatabaseConnectionInfo() {
 | 
						|
    // If the test is run with argument SIMPLETEST_DB then use it.
 | 
						|
    $db_url = getenv('SIMPLETEST_DB');
 | 
						|
    if (empty($db_url)) {
 | 
						|
      throw new \Exception('There is no database connection so no tests can be run. You must provide a SIMPLETEST_DB environment variable to run PHPUnit based functional tests outside of run-tests.sh. See https://www.drupal.org/node/2116263#skipped-tests for more information.');
 | 
						|
    }
 | 
						|
    else {
 | 
						|
      $database = Database::convertDbUrlToConnectionInfo($db_url, $this->root);
 | 
						|
 | 
						|
      if (in_array($database['driver'], ['mysql', 'pgsql'])) {
 | 
						|
        // Change the used database driver to the one provided by the module
 | 
						|
        // "driver_test".
 | 
						|
        $driver = 'DriverTest' . ucfirst($database['driver']);
 | 
						|
        $database['driver'] = $driver;
 | 
						|
        $database['namespace'] = 'Drupal\\driver_test\\Driver\\Database\\' . $driver;
 | 
						|
        $database['autoload'] = "core/modules/system/tests/modules/driver_test/src/Driver/Database/$driver/";
 | 
						|
      }
 | 
						|
 | 
						|
      Database::addConnectionInfo('default', 'default', $database);
 | 
						|
    }
 | 
						|
 | 
						|
    // Clone the current connection and replace the current prefix.
 | 
						|
    $connection_info = Database::getConnectionInfo('default');
 | 
						|
    if (!empty($connection_info)) {
 | 
						|
      Database::renameConnection('default', 'simpletest_original_default');
 | 
						|
      foreach ($connection_info as $target => $value) {
 | 
						|
        // Replace the table prefix definition to ensure that no table of the
 | 
						|
        // test runner leak into the test.
 | 
						|
        $connection_info[$target]['prefix'] = $this->databasePrefix;
 | 
						|
      }
 | 
						|
    }
 | 
						|
    return $connection_info;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * @covers ::bootEnvironment
 | 
						|
   */
 | 
						|
  public function testDatabaseDriverModuleEnabled(): void {
 | 
						|
    $driver = Database::getConnection()->driver();
 | 
						|
    if (!in_array($driver, ['DriverTestMysql', 'DriverTestPgsql'])) {
 | 
						|
      $this->markTestSkipped("This test does not support the {$driver} database driver.");
 | 
						|
    }
 | 
						|
 | 
						|
    // Test that the module that is providing the database driver is enabled.
 | 
						|
    $this->assertSame(1, \Drupal::service('extension.list.module')->get('driver_test')->status);
 | 
						|
  }
 | 
						|
 | 
						|
}
 |