function HelpTopicTest::testHelp

Same name and namespace in other branches
  1. 9 core/modules/help_topics/tests/src/Functional/HelpTopicTest.php \Drupal\Tests\help_topics\Functional\HelpTopicTest::testHelp()
  2. 8.9.x core/modules/help_topics/tests/src/Functional/HelpTopicTest.php \Drupal\Tests\help_topics\Functional\HelpTopicTest::testHelp()
  3. 10 core/modules/help/tests/src/Functional/HelpTopicTest.php \Drupal\Tests\help\Functional\HelpTopicTest::testHelp()

Tests the main help page and individual pages for topics.

File

core/modules/help/tests/src/Functional/HelpTopicTest.php, line 99

Class

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

Namespace

Drupal\Tests\help\Functional

Code

public function testHelp() : void {
    $session = $this->assertSession();
    // Log in the regular user.
    $this->drupalLogin($this->anyUser);
    $this->verifyHelp(403);
    // Log in the admin user.
    $this->drupalLogin($this->adminUser);
    $this->verifyHelp();
    $this->verifyBreadCrumb();
    // Verify that help topics text appears on admin/help, and cache tags.
    $this->drupalGet('admin/help');
    $session->responseContains('<h2>Topics</h2>');
    $session->pageTextContains('Topics can be provided by modules or themes');
    $session->responseHeaderContains('X-Drupal-Cache-Tags', 'core.extension');
    // Verify links for help topics and order.
    $page_text = $this->getTextContent();
    $start = strpos($page_text, 'Topics can be provided');
    $pos = $start;
    foreach ($this->getTopicList() as $info) {
        $name = $info['name'];
        $session->linkExists($name);
        $new_pos = strpos($page_text, $name, $start);
        $this->assertGreaterThan($pos, $new_pos, "Order of {$name} is not correct on page");
        $pos = $new_pos;
    }
    // Ensure the plugin manager alter hook works as expected.
    $session->linkExists('ABC Help Test module');
    \Drupal::state()->set('help_topics_test.test:top_level', FALSE);
    \Drupal::service('plugin.manager.help_topic')->clearCachedDefinitions();
    $this->drupalGet('admin/help');
    $session->linkNotExists('ABC Help Test module');
    \Drupal::state()->set('help_topics_test.test:top_level', TRUE);
    \Drupal::service('plugin.manager.help_topic')->clearCachedDefinitions();
    $this->drupalGet('admin/help');
    // Ensure all the expected links are present before uninstalling.
    $session->linkExists('ABC Help Test module');
    $session->linkExists('ABC Help Test');
    $session->linkExists('XYZ Help Test theme');
    // Uninstall the test module and verify the topics are gone, after
    // reloading page.
    $this->container
        ->get('module_installer')
        ->uninstall([
        'help_topics_test',
    ]);
    $this->drupalGet('admin/help');
    $session->linkNotExists('ABC Help Test module');
    $session->linkNotExists('ABC Help Test');
    $session->linkExists('XYZ Help Test theme');
    // Uninstall the test theme and verify the topic is gone.
    $this->container
        ->get('theme_installer')
        ->uninstall([
        'help_topics_test_theme',
    ]);
    $this->drupalGet('admin/help');
    $session->linkNotExists('XYZ Help Test theme');
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.