forked from a64f7bb4-7358-4778-9fbe-3b882c34cc1d/v1
125 lines
4.7 KiB
PHP
125 lines
4.7 KiB
PHP
<?php
|
|
|
|
namespace Drupal\Tests;
|
|
|
|
use Drupal\Core\Utility\PhpRequirements;
|
|
|
|
/**
|
|
* Provides helper methods for the requirements page.
|
|
*/
|
|
trait RequirementsPageTrait {
|
|
|
|
/**
|
|
* Handles the update requirements page.
|
|
*/
|
|
protected function updateRequirementsProblem() {
|
|
// Assert a warning is shown on older test environments.
|
|
$links = $this->getSession()->getPage()->findAll('named', ['link', 'try again']);
|
|
|
|
// Get the default Drupal core PHP requirements.
|
|
if ($links && version_compare(phpversion(), PhpRequirements::getMinimumSupportedPhp()) < 0) {
|
|
$this->assertSession()->pageTextNotContains('Errors found');
|
|
$this->assertWarningSummaries(['PHP']);
|
|
$this->clickLink('try again');
|
|
$this->checkForMetaRefresh();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Continues installation when the expected warnings are found.
|
|
*
|
|
* @param string[] $expected_warnings
|
|
* A list of warning summaries to expect on the requirements screen (e.g.
|
|
* 'PHP', 'PHP OPcode caching', etc.). If only the expected warnings
|
|
* are found, the test will click the "continue anyway" link to go to the
|
|
* next screen of the installer. If an expected warning is not found, or if
|
|
* a warning not in the list is present, a fail is raised.
|
|
*/
|
|
protected function continueOnExpectedWarnings($expected_warnings = []) {
|
|
$this->assertSession()->pageTextNotContains('Errors found');
|
|
$this->assertWarningSummaries($expected_warnings);
|
|
$this->clickLink('continue anyway');
|
|
$this->checkForMetaRefresh();
|
|
}
|
|
|
|
/**
|
|
* Asserts the given warning summaries are present on the page.
|
|
*
|
|
* If an expected warning is not found, or if a warning not in the list is
|
|
* present, a fail is raised.
|
|
*
|
|
* @param string[] $summaries
|
|
* A list of warning summaries to expect on the requirements screen (e.g.
|
|
* 'PHP', 'PHP OPcode caching', etc.).
|
|
*/
|
|
protected function assertWarningSummaries(array $summaries) {
|
|
$this->assertRequirementSummaries($summaries, 'warning');
|
|
}
|
|
|
|
/**
|
|
* Asserts the given error summaries are present on the page.
|
|
*
|
|
* If an expected error is not found, or if an error not in the list is
|
|
* present, a fail is raised.
|
|
*
|
|
* @param string[] $summaries
|
|
* A list of error summaries to expect on the requirements screen (e.g.
|
|
* 'PHP', 'PHP OPcode caching', etc.).
|
|
*/
|
|
protected function assertErrorSummaries(array $summaries) {
|
|
$this->assertRequirementSummaries($summaries, 'error');
|
|
}
|
|
|
|
/**
|
|
* Asserts the given requirements section summaries are present on the page.
|
|
*
|
|
* If an expected requirements message is not found, or if a message not in
|
|
* the list is present, a fail is raised.
|
|
*
|
|
* @param string[] $summaries
|
|
* A list of warning summaries to expect on the requirements screen (e.g.
|
|
* 'PHP', 'PHP OPcode caching', etc.).
|
|
* @param string $type
|
|
* The type of requirement, either 'warning' or 'error'.
|
|
*/
|
|
protected function assertRequirementSummaries(array $summaries, string $type) {
|
|
// The selectors are different for Claro.
|
|
$is_claro = stripos($this->getSession()->getPage()->getContent(), 'claro/css/theme/maintenance-page.css') !== FALSE;
|
|
|
|
$selectors = [];
|
|
if ($is_claro) {
|
|
// In Claro each requirement heading is present in a div with the class
|
|
// system-status-report__status-title. There is one summary element per
|
|
// requirement type and it is adjacent to a div with the class
|
|
// claro-details__wrapper.
|
|
$selectors[] = 'summary#' . $type . '+.claro-details__wrapper .system-status-report__status-title';
|
|
}
|
|
else {
|
|
// Allow only details elements that are directly after the warning/error
|
|
// header or each other. There is no guaranteed wrapper we can rely on
|
|
// across distributions. When there are multiple warnings, the selectors
|
|
// will be:
|
|
// - h3#warning+details summary
|
|
// - h3#warning+details+details summary
|
|
// - etc.
|
|
// For errors, the selectors are the same except that they are h3#error.
|
|
// We add one more selector than expected requirements to confirm that
|
|
// there isn't any other requirement message before clicking the link.
|
|
// @todo Make this more reliable in
|
|
// https://www.drupal.org/project/drupal/issues/2927345.
|
|
for ($i = 0; $i <= count($summaries); $i++) {
|
|
$selectors[] = 'h3#' . $type . implode('', array_fill(0, $i + 1, '+details')) . ' summary';
|
|
}
|
|
}
|
|
$elements = $this->cssSelect(implode(', ', $selectors));
|
|
|
|
// Confirm that there are only the expected requirements.
|
|
$requirements = [];
|
|
foreach ($elements as $requirement) {
|
|
$requirements[] = trim($requirement->getText());
|
|
}
|
|
$this->assertEquals($summaries, $requirements);
|
|
}
|
|
|
|
}
|