You are here

public function ForumTest::createForum in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/forum/tests/src/Functional/ForumTest.php \Drupal\Tests\forum\Functional\ForumTest::createForum()

Creates a forum container or a forum.

Parameters

string $type: The forum type (forum container or forum).

int $parent: The forum parent. This defaults to 0, indicating a root forum.

Return value

\Drupal\Core\Database\StatementInterface The created taxonomy term data.

3 calls to ForumTest::createForum()
ForumTest::doAdminTests in core/modules/forum/tests/src/Functional/ForumTest.php
Runs admin tests on the admin user.
ForumTest::testForumTopicButton in core/modules/forum/tests/src/Functional/ForumTest.php
Evaluate whether "Add new Forum topic" button is present or not.
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 436

Class

ForumTest
Tests for forum.module.

Namespace

Drupal\Tests\forum\Functional

Code

public function createForum($type, $parent = 0) {

  // Generate a random name/description.
  $name = $this
    ->randomMachineName(10);
  $description = $this
    ->randomMachineName(100);
  $edit = [
    'name[0][value]' => $name,
    'description[0][value]' => $description,
    'parent[0]' => $parent,
    'weight' => '0',
  ];

  // Create forum.
  $this
    ->drupalGet('admin/structure/forum/add/' . $type);
  $this
    ->submitForm($edit, 'Save');
  $this
    ->assertSession()
    ->statusCodeEquals(200);
  $type = $type == 'container' ? 'forum container' : 'forum';
  $this
    ->assertSession()
    ->pageTextContains('Created new ' . $type . ' ' . $name . '.');

  // Verify that the creation message contains a link to a term.
  $this
    ->assertSession()
    ->elementExists('xpath', '//div[@data-drupal-messages]//a[contains(@href, "term/")]');

  /** @var \Drupal\taxonomy\TermStorageInterface $taxonomy_term_storage */
  $taxonomy_term_storage = $this->container
    ->get('entity_type.manager')
    ->getStorage('taxonomy_term');

  // Verify forum.
  $term = $taxonomy_term_storage
    ->loadByProperties([
    'vid' => $this
      ->config('forum.settings')
      ->get('vocabulary'),
    'name' => $name,
    'description__value' => $description,
  ]);
  $term = array_shift($term);
  $this
    ->assertTrue(!empty($term), 'The ' . $type . ' exists in the database');

  // Verify forum hierarchy.
  $tid = $term
    ->id();
  $parent_tid = $taxonomy_term_storage
    ->loadParents($tid);
  $parent_tid = empty($parent_tid) ? 0 : array_shift($parent_tid)
    ->id();
  $this
    ->assertSame($parent, $parent_tid, 'The ' . $type . ' is linked to its container');
  $forum = $taxonomy_term_storage
    ->load($tid);
  $this
    ->assertEquals($type == 'forum container', (bool) $forum->forum_container->value);
  return [
    'tid' => $tid,
    'name' => $term
      ->getName(),
    'vid' => $term
      ->bundle(),
  ];
}