You are here

public function UpdatePathTestBaseTest::testDatabaseLoaded in Drupal 9

Same name and namespace in other branches
  1. 8 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 33

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');

  /** @var \Drupal\Core\Update\UpdateHookRegistry $update_registry */
  $update_registry = \Drupal::service('update.update_hook_registry');
  foreach ([
    'user' => 8100,
    'node' => 8700,
    'system' => 8901,
    'update_test_schema' => 8000,
  ] as $module => $schema) {
    $this
      ->assertEquals($schema, $update_registry
      ->getInstalledVersion($module), 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()
    ->select('router', 'r')
    ->fields('r', [
    'name',
    'route',
  ])
    ->execute()
    ->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
    ->assertEquals('Site-Install', \Drupal::config('system.site')
    ->get('name'));
  $this
    ->drupalGet('<front>');
  $this
    ->assertSession()
    ->pageTextContains('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
      ->assertEquals('on', $database
      ->query("SHOW standard_conforming_strings")
      ->fetchField());
    $this
      ->assertEquals('escape', $database
      ->query("SHOW bytea_output")
      ->fetchField());
  }

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