DevReleaseTest.php
Same filename in other branches
Namespace
Drupal\Tests\update\KernelFile
-
core/
modules/ update/ tests/ src/ Kernel/ DevReleaseTest.php
View source
<?php
declare (strict_types=1);
namespace Drupal\Tests\update\Kernel;
use Drupal\KernelTests\KernelTestBase;
use Drupal\update\UpdateFetcherInterface;
use Drupal\update\UpdateManagerInterface;
use GuzzleHttp\Client;
use GuzzleHttp\Handler\MockHandler;
use GuzzleHttp\HandlerStack;
use GuzzleHttp\Psr7\Response;
use GuzzleHttp\Psr7\Utils;
/**
* Tests the project data when the installed version is a dev version.
*
* @group update
*/
class DevReleaseTest extends KernelTestBase {
/**
* {@inheritdoc}
*/
protected static $modules = [
'system',
'update',
'update_test',
];
/**
* The http client.
*/
protected Client $client;
/**
* {@inheritdoc}
*/
protected function setUp() : void {
parent::setUp();
// The Update module's default configuration must be installed for our
// fake release metadata to be fetched.
$this->installConfig('update');
$this->installConfig('update_test');
$this->setCoreVersion('8.1.0-dev');
$this->setReleaseMetadata(__DIR__ . '/../../fixtures/release-history/drupal.sec.8.1.0-dev.xml');
}
/**
* Sets the current (running) version of core, as known to the Update module.
*
* @param string $version
* The current version of core.
*/
protected function setCoreVersion(string $version) : void {
$this->config('update_test.settings')
->set('system_info.#all.version', $version)
->save();
}
/**
* Sets the release metadata file to use when fetching available updates.
*
* @param string $file
* The path of the XML metadata file to use.
*/
protected function setReleaseMetadata(string $file) : void {
$metadata = Utils::tryFopen($file, 'r');
$response = new Response(200, [], Utils::streamFor($metadata));
$handler = new MockHandler([
$response,
]);
$this->client = new Client([
'handler' => HandlerStack::create($handler),
]);
$this->container
->set('http_client', $this->client);
}
/**
* Tests security updates when the installed version is a dev version.
*
* The xml fixture used here has two security releases 8.1.2 and 8.1.1.
*
* Here the timestamp for the installed dev version is set to 1280424641.
* 8.1.2 will be shown as security update as the date of this security release
* i.e. 1280424741 is greater than the timestamp of the installed version +
* 100 seconds. 8.1.1 will not be shown as security update because it's date
* i.e. 1280424740 is less than timestamp of the installed version + 100
* seconds.
*/
public function testSecurityUpdates() : void {
$system_info = [
'#all' => [
'version' => '8.1.0-dev',
'datestamp' => '1280424641',
],
];
$project_data = $this->getProjectData($system_info);
$this->assertCount(1, $project_data['drupal']['security updates']);
$this->assertSame('8.1.2', $project_data['drupal']['security updates'][0]['version']);
$this->assertSame(UpdateManagerInterface::NOT_CURRENT, $project_data['drupal']['status']);
}
/**
* Tests security updates are empty with a dev version and an empty timestamp.
*
* Here the timestamp for the installed dev version is set to 0(empty
* timestamp) and according to the current logic for dev installed version,
* no updates will be shown as security update.
*/
public function testSecurityUpdateEmptyProjectTimestamp() : void {
$system_info = [
'#all' => [
'version' => '8.1.0-dev',
'datestamp' => '0',
],
];
$project_data = $this->getProjectData($system_info);
$this->assertArrayNotHasKey('security updates', $project_data['drupal']);
$this->assertSame(UpdateFetcherInterface::NOT_CHECKED, $project_data['drupal']['status']);
$this->assertSame('Unknown release date', (string) $project_data['drupal']['reason']);
}
/**
* Gets project data from update_calculate_project_data().
*
* @param array $system_info
* System test information as used by update_test_system_info_alter().
*
* @return array[]
* The project data as returned by update_calculate_project_data().
*
* @see update_test_system_info_alter()
*/
private function getProjectData(array $system_info) : array {
$this->config('update_test.settings')
->set('system_info', $system_info)
->save();
update_storage_clear();
$available = update_get_available(TRUE);
return update_calculate_project_data($available);
}
}
Classes
Title | Deprecated | Summary |
---|---|---|
DevReleaseTest | Tests the project data when the installed version is a dev version. |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.