function UpdateSemverCoreTest::testBrokenThenFixedUpdates

Same name in other branches
  1. 10 core/modules/update/tests/src/Functional/UpdateSemverCoreTest.php \Drupal\Tests\update\Functional\UpdateSemverCoreTest::testBrokenThenFixedUpdates()
  2. 11.x core/modules/update/tests/src/Functional/UpdateSemverCoreTest.php \Drupal\Tests\update\Functional\UpdateSemverCoreTest::testBrokenThenFixedUpdates()

Checks that Drupal recovers after problems connecting to update server.

File

core/modules/update/tests/src/Functional/UpdateSemverCoreTest.php, line 515

Class

UpdateSemverCoreTest
Tests the semantic version handling in the Update Manager.

Namespace

Drupal\Tests\update\Functional

Code

public function testBrokenThenFixedUpdates() {
    $this->drupalLogin($this->drupalCreateUser([
        'administer site configuration',
        'view update notifications',
        'access administration pages',
    ]));
    $this->setProjectInstalledVersion('8.0.0');
    // Instead of using refreshUpdateStatus(), set these manually.
    $this->config('update.settings')
        ->set('fetch.url', Url::fromRoute('update_test.update_test')->setAbsolute()
        ->toString())
        ->save();
    // Use update XML that has no information to simulate a broken response from
    // the update server.
    $this->config('update_test.settings')
        ->set('xml_map', [
        'drupal' => 'broken',
    ])
        ->save();
    // This will retrieve broken updates.
    $this->cronRun();
    $this->drupalGet('admin/reports/status');
    $this->assertSession()
        ->statusCodeEquals(200);
    $this->assertSession()
        ->pageTextContains('There was a problem checking available updates for Drupal.');
    $this->config('update_test.settings')
        ->set('xml_map', [
        'drupal' => 'sec.0.2',
    ])
        ->save();
    // Simulate the update_available_releases state expiring before cron is run
    // and the state is used by \Drupal\update\UpdateManager::getProjects().
    \Drupal::keyValueExpirable('update_available_releases')->deleteAll();
    // This cron run should retrieve fixed updates.
    $this->cronRun();
    $this->drupalGet('admin/structure');
    $this->assertSession()
        ->statusCodeEquals(200);
    $this->assertSession()
        ->pageTextContains('There is a security update available for your version of Drupal.');
}

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