You are here

public function UpdatePathTestBaseTest::testDatabaseLoaded in Zircon Profile 8.0

Same name and namespace in other branches
  1. 8 core/modules/system/src/Tests/Update/UpdatePathTestBaseTest.php \Drupal\system\Tests\Update\UpdatePathTestBaseTest::testDatabaseLoaded()

Tests that the database was properly loaded.

File

core/modules/system/src/Tests/Update/UpdatePathTestBaseTest.php, line 38
Contains \Drupal\system\Tests\Update\UpdatePathTestBaseTest.php.

Class

UpdatePathTestBaseTest
Tests the update path base class.

Namespace

Drupal\system\Tests\Update

Code

public function testDatabaseLoaded() {
  foreach ([
    'user',
    'node',
    'system',
    'update_test_schema',
  ] as $module) {
    $this
      ->assertEqual(drupal_get_installed_schema_version($module), 8000, SafeMarkup::format('Module @module schema is 8000', [
      '@module' => $module,
    ]));
  }

  // Ensure that all {router} entries can be unserialized. If they cannot be
  // unserialized a notice will be thrown by PHP.
  $result = \Drupal::database()
    ->query("SELECT name, route from {router}")
    ->fetchAllKeyed(0, 1);

  // For the purpose of fetching the notices and displaying more helpful error
  // messages, let's override the error handler temporarily.
  set_error_handler(function ($severity, $message, $filename, $lineno) {
    throw new \ErrorException($message, 0, $severity, $filename, $lineno);
  });
  foreach ($result as $route_name => $route) {
    try {
      unserialize($route);
    } catch (\Exception $e) {
      $this
        ->fail(sprintf('Error "%s" while unserializing route %s', $e
        ->getMessage(), Html::escape($route_name)));
    }
  }
  restore_error_handler();

  // Before accessing the site we need to run updates first or the site might
  // be broken.
  $this
    ->runUpdates();
  $this
    ->assertEqual(\Drupal::config('system.site')
    ->get('name'), 'Site-Install');
  $this
    ->drupalGet('<front>');
  $this
    ->assertText('Site-Install');

  // Ensure that the database tasks have been run during set up. Neither MySQL
  // nor SQLite make changes that are testable.
  $database = $this->container
    ->get('database');
  if ($database
    ->driver() == 'pgsql') {
    $this
      ->assertEqual('on', $database
      ->query("SHOW standard_conforming_strings")
      ->fetchField());
    $this
      ->assertEqual('escape', $database
      ->query("SHOW bytea_output")
      ->fetchField());
  }
}