Tests forum functionality through the admin and user interfaces.
function testForum() {
//Check that the basic forum install creates a default forum topic
$this
->drupalGet("/forum");
// Look for the "General discussion" default forum
$this
->assertText(t("General discussion"), "Found the default forum at the /forum listing");
// Do the admin tests.
$this
->doAdminTests($this->admin_user);
$this
->generateForumTopics($this->forum);
// Login an unprivileged user to view the forum topics and generate an
// active forum topics list.
$this
->drupalLogin($this->web_user);
// Verify that this user is shown a message that they may not post content.
$this
->drupalGet('forum/' . $this->forum['tid']);
$this
->assertText(t('You are not allowed to post new content in the forum'), "Authenticated user without permission to post forum content is shown message in local tasks to that effect.");
// Log in, and do basic tests for a user with permission to edit any forum
// content.
$this
->doBasicTests($this->edit_any_topics_user, TRUE);
// Create a forum node authored by this user.
$any_topics_user_node = $this
->createForumTopic($this->forum, FALSE);
// Log in, and do basic tests for a user with permission to edit only its
// own forum content.
$this
->doBasicTests($this->edit_own_topics_user, FALSE);
// Create a forum node authored by this user.
$own_topics_user_node = $this
->createForumTopic($this->forum, FALSE);
// Verify that this user cannot edit forum content authored by another user.
$this
->verifyForums($this->edit_any_topics_user, $any_topics_user_node, FALSE, 403);
// Verify that this user is shown a local task to add new forum content.
$this
->drupalGet('forum');
$this
->assertLink(t('Add new Forum topic'));
$this
->drupalGet('forum/' . $this->forum['tid']);
$this
->assertLink(t('Add new Forum topic'));
// Login a user with permission to edit any forum content.
$this
->drupalLogin($this->edit_any_topics_user);
// Verify that this user can edit forum content authored by another user.
$this
->verifyForums($this->edit_own_topics_user, $own_topics_user_node, TRUE);
// Verify the topic and post counts on the forum page.
$this
->drupalGet('forum');
// Verify row for testing forum.
$forum_arg = array(
':forum' => 'forum-list-' . $this->forum['tid'],
);
// Topics cell contains number of topics and number of unread topics.
$xpath = $this
->buildXPathQuery('//tr[@id=:forum]//td[@class="topics"]', $forum_arg);
$topics = $this
->xpath($xpath);
$topics = trim($topics[0]);
$this
->assertEqual($topics, '6', 'Number of topics found.');
// Verify the number of unread topics.
$unread_topics = _forum_topics_unread($this->forum['tid'], $this->edit_any_topics_user->uid);
$unread_topics = format_plural($unread_topics, '1 new post', '@count new posts');
$xpath = $this
->buildXPathQuery('//tr[@id=:forum]//td[@class="topics"]//a', $forum_arg);
$this
->assertFieldByXPath($xpath, $unread_topics, 'Number of unread topics found.');
// Verify that the forum name is in the unread topics text.
$xpath = $this
->buildXPathQuery('//tr[@id=:forum]//em[@class="placeholder"]', $forum_arg);
$this
->assertFieldByXpath($xpath, $this->forum['name'], 'Forum name found in unread topics text.');
// Verify total number of posts in forum.
$xpath = $this
->buildXPathQuery('//tr[@id=:forum]//td[@class="posts"]', $forum_arg);
$this
->assertFieldByXPath($xpath, '6', 'Number of posts found.');
// Test loading multiple forum nodes on the front page.
$this
->drupalLogin($this
->drupalCreateUser(array(
'administer content types',
'create forum content',
'post comments',
)));
$this
->drupalPost('admin/structure/types/manage/forum', array(
'node_options[promote]' => 'promote',
), t('Save content type'));
$this
->createForumTopic($this->forum, FALSE);
$this
->createForumTopic($this->forum, FALSE);
$this
->drupalGet('node');
// Test adding a comment to a forum topic.
$node = $this
->createForumTopic($this->forum, FALSE);
$edit = array();
$edit['comment_body[' . LANGUAGE_NOT_SPECIFIED . '][0][value]'] = $this
->randomName();
$this
->drupalPost("node/{$node->nid}", $edit, t('Save'));
$this
->assertResponse(200);
// Test editing a forum topic that has a comment.
$this
->drupalLogin($this->edit_any_topics_user);
$this
->drupalGet('forum/' . $this->forum['tid']);
$this
->drupalPost("node/{$node->nid}/edit", array(), t('Save'));
$this
->assertResponse(200);
}