You are here

public function HelpTopicTest::testHelpLinks in Drupal 9

Verifies links on various topic pages.

File

core/modules/help_topics/tests/src/Functional/HelpTopicTest.php, line 187

Class

HelpTopicTest
Verifies help topic display and user access to help based on permissions.

Namespace

Drupal\Tests\help_topics\Functional

Code

public function testHelpLinks() {
  $session = $this
    ->assertSession();
  $this
    ->drupalLogin($this->adminUser);

  // Verify links on the test top-level page.
  $page = 'admin/help/topic/help_topics_test.test';

  // Array element is the page text if you click through.
  $links = [
    'Linked topic' => 'This topic is not supposed to be top-level',
    'Additional topic' => 'This topic should get listed automatically',
    'URL test topic' => 'It is used to test URLs',
  ];
  foreach ($links as $link_text => $page_text) {
    $this
      ->drupalGet($page);
    $this
      ->clickLink($link_text);
    $session
      ->pageTextContains($page_text);
  }

  // Verify theme provided help topics work and can be related.
  $this
    ->drupalGet('admin/help/topic/help_topics_test_theme.test');
  $session
    ->pageTextContains('This is a theme provided topic.');
  $this
    ->assertStringContainsString('This is a theme provided topic.', $session
    ->elementExists('css', 'article')
    ->getText());
  $this
    ->clickLink('Additional topic');
  $session
    ->linkExists('XYZ Help Test theme');

  // Verify that the non-top-level topics do not appear on the Help page.
  $this
    ->drupalGet('admin/help');
  $session
    ->linkNotExists('Linked topic');
  $session
    ->linkNotExists('Additional topic');

  // Verify links and non-links on the URL test page.
  $this
    ->drupalGet('admin/help/topic/help_topics_test.test_urls');
  $links = [
    'not a route' => FALSE,
    'missing params' => FALSE,
    'invalid params' => FALSE,
    'valid link' => TRUE,
    'Additional topic' => TRUE,
    'Missing help topic not_a_topic' => FALSE,
  ];
  foreach ($links as $text => $should_be_link) {
    if ($should_be_link) {
      $session
        ->linkExists($text);
    }
    else {

      // Should be text that is not a link.
      $session
        ->pageTextContains($text);
      $session
        ->linkNotExists($text);
    }
  }

  // Verify that the "no test" user, who should not be able to access
  // the 'valid link' URL, sees it as not a link.
  $this
    ->drupalLogin($this->noTestUser);
  $this
    ->drupalGet('admin/help/topic/help_topics_test.test_urls');
  $session
    ->pageTextContains('valid link');
  $session
    ->linkNotExists('valid link');
}