You are here

public function UpdatePathTestBaseTest::testDatabaseLoaded in Drupal 8

Same name and namespace in other branches
  1. 9 core/tests/Drupal/FunctionalTests/Update/UpdatePathTestBaseTest.php \Drupal\FunctionalTests\Update\UpdatePathTestBaseTest::testDatabaseLoaded()
  2. 10 core/tests/Drupal/FunctionalTests/Update/UpdatePathTestBaseTest.php \Drupal\FunctionalTests\Update\UpdatePathTestBaseTest::testDatabaseLoaded()

Tests that the database was properly loaded.

File

core/tests/Drupal/FunctionalTests/Update/UpdatePathTestBaseTest.php, line 34

Class

UpdatePathTestBaseTest
Tests the update path base class.

Namespace

Drupal\FunctionalTests\Update

Code

public function testDatabaseLoaded() {

  // Set a value in the cache to prove caches are cleared.
  \Drupal::service('cache.default')
    ->set(__CLASS__, 'Test');
  foreach ([
    'user' => 8100,
    'node' => 8700,
    'system' => 8805,
    'update_test_schema' => 8000,
  ] as $module => $schema) {
    $this
      ->assertEqual(drupal_get_installed_schema_version($module), $schema, new FormattableMarkup('Module @module schema is @schema', [
      '@module' => $module,
      '@schema' => $schema,
    ]));
  }

  // 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
    ->assertEquals('standard', \Drupal::config('core.extension')
    ->get('profile'));
  $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());
  }

  // Ensure the test runners cache has been cleared.
  $this
    ->assertFalse(\Drupal::service('cache.default')
    ->get(__CLASS__));
}