
| Current Path : /var/www/html/rocksensor1/web/core/modules/update/tests/src/Kernel/ |
Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 |
| Current File : /var/www/html/rocksensor1/web/core/modules/update/tests/src/Kernel/UpdateReportTest.php |
<?php
declare(strict_types=1);
namespace Drupal\Tests\update\Kernel;
use Drupal\Core\Link;
use Drupal\Core\Url;
use Drupal\KernelTests\KernelTestBase;
use Drupal\Tests\user\Traits\UserCreationTrait;
/**
* Tests update report functionality.
*
* @covers template_preprocess_update_report
* @group update
*/
class UpdateReportTest extends KernelTestBase {
use UserCreationTrait;
/**
* {@inheritdoc}
*/
protected static $modules = [
'system',
'update',
];
/**
* @dataProvider providerTemplatePreprocessUpdateReport
*/
public function testTemplatePreprocessUpdateReport($variables): void {
\Drupal::moduleHandler()->loadInclude('update', 'inc', 'update.report');
// The function should run without an exception being thrown when the value
// of $variables['data'] is not set or is not an array.
template_preprocess_update_report($variables);
// Test that the key "no_updates_message" has been set.
$this->assertArrayHasKey('no_updates_message', $variables);
}
/**
* Provides data for testTemplatePreprocessUpdateReport().
*
* @return array
* Array of $variables for template_preprocess_update_report().
*/
public static function providerTemplatePreprocessUpdateReport() {
return [
'$variables with data not set' => [
[],
],
'$variables with data as an integer' => [
['data' => 4],
],
'$variables with data as a string' => [
['data' => 'I am a string'],
],
];
}
/**
* Tests the error message when failing to fetch data without dblog installed.
*
* @see template_preprocess_update_fetch_error_message()
*/
public function testTemplatePreprocessUpdateFetchErrorMessageNoDblog(): void {
$build = [
'#theme' => 'update_fetch_error_message',
];
$this->render($build);
$this->assertRaw('Failed to fetch available update data:<ul><li>See <a href="https://www.drupal.org/node/3170647">PHP OpenSSL requirements</a> in the Drupal.org handbook for possible reasons this could happen and what you can do to resolve them.</li><li>Check your local system logs for additional error messages.</li></ul>');
\Drupal::moduleHandler()->loadInclude('update', 'inc', 'update.report');
$variables = [];
template_preprocess_update_fetch_error_message($variables);
$this->assertArrayHasKey('error_message', $variables);
$this->assertEquals('Failed to fetch available update data:', $variables['error_message']['message']['#markup']);
$this->assertArrayHasKey('documentation_link', $variables['error_message']['items']['#items']);
$this->assertArrayHasKey('logs', $variables['error_message']['items']['#items']);
$this->assertArrayNotHasKey('dblog', $variables['error_message']['items']['#items']);
}
/**
* Tests the error message when failing to fetch data with dblog installed.
*
* @see template_preprocess_update_fetch_error_message()
*/
public function testTemplatePreprocessUpdateFetchErrorMessageWithDblog(): void {
\Drupal::moduleHandler()->loadInclude('update', 'inc', 'update.report');
$this->enableModules(['dblog', 'user']);
$this->installEntitySchema('user');
// First, try as a normal user that can't access dblog.
$this->setUpCurrentUser();
$build = [
'#theme' => 'update_fetch_error_message',
];
$this->render($build);
$this->assertRaw('Failed to fetch available update data:<ul><li>See <a href="https://www.drupal.org/node/3170647">PHP OpenSSL requirements</a> in the Drupal.org handbook for possible reasons this could happen and what you can do to resolve them.</li><li>Check your local system logs for additional error messages.</li></ul>');
$variables = [];
template_preprocess_update_fetch_error_message($variables);
$this->assertArrayHasKey('error_message', $variables);
$this->assertEquals('Failed to fetch available update data:', $variables['error_message']['message']['#markup']);
$this->assertArrayHasKey('documentation_link', $variables['error_message']['items']['#items']);
$this->assertArrayHasKey('logs', $variables['error_message']['items']['#items']);
$this->assertArrayNotHasKey('dblog', $variables['error_message']['items']['#items']);
// Now, try as an admin that can access dblog.
$this->setUpCurrentUser([], ['access content', 'access site reports']);
$this->render($build);
$this->assertRaw('Failed to fetch available update data:<ul><li>See <a href="https://www.drupal.org/node/3170647">PHP OpenSSL requirements</a> in the Drupal.org handbook for possible reasons this could happen and what you can do to resolve them.</li><li>Check');
$dblog_url = Url::fromRoute('dblog.overview', [], ['query' => ['type' => ['update']]]);
$this->assertRaw((string) Link::fromTextAndUrl('your local system logs', $dblog_url)->toString());
$this->assertRaw(' for additional error messages.</li></ul>');
$variables = [];
template_preprocess_update_fetch_error_message($variables);
$this->assertArrayHasKey('error_message', $variables);
$this->assertEquals('Failed to fetch available update data:', $variables['error_message']['message']['#markup']);
$this->assertArrayHasKey('documentation_link', $variables['error_message']['items']['#items']);
$this->assertArrayNotHasKey('logs', $variables['error_message']['items']['#items']);
$this->assertArrayHasKey('dblog', $variables['error_message']['items']['#items']);
}
}