function ForumTest::createForumTopic

Same name and namespace in other branches
  1. 8.9.x core/modules/forum/tests/src/Functional/ForumTest.php \Drupal\Tests\forum\Functional\ForumTest::createForumTopic()
  2. 10 core/modules/forum/tests/src/Functional/ForumTest.php \Drupal\Tests\forum\Functional\ForumTest::createForumTopic()
  3. 11.x core/modules/forum/tests/src/Functional/ForumTest.php \Drupal\Tests\forum\Functional\ForumTest::createForumTopic()

Creates a forum topic.

Parameters

array $forum: A forum array.

bool $container: TRUE if $forum is a container; FALSE otherwise.

Return value

object|null The created topic node or NULL if the forum is a container.

4 calls to ForumTest::createForumTopic()
ForumTest::doBasicTests in core/modules/forum/tests/src/Functional/ForumTest.php
Runs basic tests on the indicated user.
ForumTest::generateForumTopics in core/modules/forum/tests/src/Functional/ForumTest.php
Generates forum topics.
ForumTest::testForum in core/modules/forum/tests/src/Functional/ForumTest.php
Tests forum functionality through the admin and user interfaces.
ForumTest::testForumWithNewPost in core/modules/forum/tests/src/Functional/ForumTest.php
Tests a forum with a new post displays properly.

File

core/modules/forum/tests/src/Functional/ForumTest.php, line 568

Class

ForumTest
Tests for <a href="/api/drupal/core%21modules%21forum%21forum.module/9" title="Provides discussion forums." class="local">forum.module</a>.

Namespace

Drupal\Tests\forum\Functional

Code

public function createForumTopic($forum, $container = FALSE) {
    // Generate a random subject/body.
    $title = $this->randomMachineName(20);
    $body = $this->randomMachineName(200);
    $edit = [
        'title[0][value]' => $title,
        'body[0][value]' => $body,
    ];
    $tid = $forum['tid'];
    // Create the forum topic, preselecting the forum ID via a URL parameter.
    $this->drupalGet('node/add/forum', [
        'query' => [
            'forum_id' => $tid,
        ],
    ]);
    $this->submitForm($edit, 'Save');
    if ($container) {
        $this->assertSession()
            ->pageTextNotContains("Forum topic {$title} has been created.");
        $this->assertSession()
            ->pageTextContains("The item {$forum['name']} is a forum container, not a forum.");
        return;
    }
    else {
        $this->assertSession()
            ->pageTextContains("Forum topic {$title} has been created.");
        $this->assertSession()
            ->pageTextNotContains("The item {$forum['name']} is a forum container, not a forum.");
        // Verify that the creation message contains a link to a node.
        $this->assertSession()
            ->elementExists('xpath', '//div[@data-drupal-messages]//a[contains(@href, "node/")]');
    }
    // Retrieve node object, ensure that the topic was created and in the proper forum.
    $node = $this->drupalGetNodeByTitle($title);
    $this->assertNotNull($node, new FormattableMarkup('Node @title was loaded', [
        '@title' => $title,
    ]));
    $this->assertEquals($tid, $node->taxonomy_forums->target_id, 'Saved forum topic was in the expected forum');
    // View forum topic.
    $this->drupalGet('node/' . $node->id());
    $this->assertSession()
        ->pageTextContains($title);
    $this->assertSession()
        ->pageTextContains($body);
    return $node;
}

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