function UpdatePathTestBaseTest::testDatabaseLoaded

Same name in other branches
  1. 9 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__));
}

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