You are here

trait RequirementsPageTrait in Drupal 9

Same name and namespace in other branches
  1. 8 core/tests/Drupal/Tests/RequirementsPageTrait.php \Drupal\Tests\RequirementsPageTrait

Provides helper methods for the requirements page.

Hierarchy

10 files declare their use of RequirementsPageTrait
InstallerTestBase.php in core/tests/Drupal/FunctionalTests/Installer/InstallerTestBase.php
InvalidUpdateHookTest.php in core/modules/system/tests/src/Functional/UpdateSystem/InvalidUpdateHookTest.php
LocaleTranslatedSchemaDefinitionTest.php in core/modules/locale/tests/src/Functional/LocaleTranslatedSchemaDefinitionTest.php
MinimalTest.php in core/profiles/minimal/tests/src/Functional/MinimalTest.php
NoPreExistingSchemaUpdateTest.php in core/modules/system/tests/src/Functional/UpdateSystem/NoPreExistingSchemaUpdateTest.php

... See full list

File

core/tests/Drupal/Tests/RequirementsPageTrait.php, line 8

Namespace

Drupal\Tests
View source
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',
    ]);
    if ($links && version_compare(phpversion(), \Drupal::MINIMUM_SUPPORTED_PHP) < 0) {
      $this
        ->assertSession()
        ->pageTextNotContains('Errors found');
      $this
        ->assertWarningSummaries([
        'PHP',
      ]);
      $this
        ->clickLink('try again');
      $this
        ->checkForMetaRefresh();
    }
  }

  /**
   * Continues installation when the expected warnings are found.
   *
   * This function is no longer called by any core test, but it is retained for
   * use by contrib/custom tests. It is not deprecated, because it remains the
   * recommended function to call for its purpose.
   *
   * @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();
  }

  /**
   * Assert 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[] $warning_summaries
   *   A list of warning summaries to expect on the requirements screen (e.g.
   *   'PHP', 'PHP OPcode caching', etc.).
   */
  protected function assertWarningSummaries(array $warning_summaries) {

    // Allow only details elements that are directly after the warning 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.
    // We add one more selector than expected warnings to confirm that there
    // isn't any other warning before clicking the link.
    // @todo Make this more reliable in
    //   https://www.drupal.org/project/drupal/issues/2927345.
    $selectors = [];
    for ($i = 0; $i <= count($warning_summaries); $i++) {
      $selectors[] = 'h3#warning' . implode('', array_fill(0, $i + 1, '+details')) . ' summary';
    }
    $warning_elements = $this
      ->cssSelect(implode(', ', $selectors));

    // Confirm that there are only the expected warnings.
    $warnings = [];
    foreach ($warning_elements as $warning) {
      $warnings[] = trim($warning
        ->getText());
    }
    $this
      ->assertEquals($warning_summaries, $warnings);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
RequirementsPageTrait::assertWarningSummaries protected function Assert the given warning summaries are present on the page.
RequirementsPageTrait::continueOnExpectedWarnings protected function Continues installation when the expected warnings are found.
RequirementsPageTrait::updateRequirementsProblem protected function Handles the update requirements page.