You are here

function VoteUpDownTestCase::testBasicOperation in Vote Up/Down 6

Ensure that the optional fields are truly optional.

File

tests/vote_up_down.test, line 79
Test file for Vote Up/Down.

Class

VoteUpDownTestCase

Code

function testBasicOperation() {

  // Enable Vote Up/Down for Story node types. Everything else should be
  // default settings.
  $this
    ->drupalLogin($this->admin_user);
  $edit = array(
    'vote_up_down_node_types[story]' => TRUE,
  );
  $this
    ->drupalPost('admin/settings/voteupdown', $edit, 'Save configuration');
  $this
    ->assertText('The configuration options have been saved.');
  $this
    ->assertText('Vote Up/Down');

  // Check the Advanced configuration page.
  $this
    ->drupalGet('admin/settings/voteupdown/advanced');
  $this
    ->assertText('Vote Up/Down');
  $this
    ->assertText('Advanced settings');

  // TODO: check for correct settings
  // Enable the "Who voted on this?" block, and check it's NOT shown on /
  $edit = array();
  $edit['vote_up_down_0[region]'] = 'left';
  $this
    ->drupalPost('admin/build/block', $edit, t('Save blocks'));
  $this
    ->assertText('The block settings have been updated.');
  $this
    ->drupalGet('/');
  $this
    ->assertNoText('Who voted on this?', 'Vote Up/Down block should not appear on non-node pages');

  // Create a STORY node using the node/add page.
  $this
    ->drupalLogin($this->web_user);
  $node = array(
    'title' => $this
      ->randomName(20, 'NODE_'),
    'body' => $this
      ->randomName(20, 'BODY_'),
  );
  $this
    ->drupalPost('node/add/story', $node, 'Save');
  $this
    ->assertText("Story {$node['title']} has been created.");
  $this
    ->assertText('0 points');
  $this
    ->assertRaw('<div class="vote-up-down-widget">');
  $node_url = $this
    ->getUrl();
  $this
    ->assertText('Who voted on this?', 'Vote Up/Down block is on node pages');
  $this
    ->assertText('Voting details', 'Voting details tab is on node pages');

  // Use the url to find the NID, and then check for the <span> tag that the
  // JavaScript uses to update the points.
  preg_match('#node/([0-9]*)$#', $node_url, $matches);
  $nid = $matches[1];
  $this
    ->assertRaw('<span id="vote_points_' . $nid . '" class="vote-points">', 'Labeled SPAN tag found');

  // Create a PAGE node using the node/add page.
  // Check that the Vote Up/Down information does NOT show for this node type.
  $page_node = array(
    'title' => $this
      ->randomName(20, 'NODE_'),
    'body' => $this
      ->randomName(20, 'BODY_'),
  );
  $this
    ->drupalPost('node/add/page', $page_node, 'Save');
  $this
    ->assertText("Page {$page_node['title']} has been created.");
  $this
    ->assertNoText('0 points');
  $this
    ->assertNoRaw('<div class="vote-up-down-widget">');
  $this
    ->assertNoText('Who voted on this?', 'Block should not be shown when content-type is not enabled for Vote Up/Down');
  $this
    ->assertNoText('Voting details', 'Voting Details should not be shown when content-type is not enabled for Vote Up/Down');

  // Back to the Story node: Check empty Voting details about this node.
  $this
    ->drupalGet($node_url);
  $this
    ->clickLink('Voting details');

  // Bug #360139
  $this
    ->assertNoRaw('<td>', 'Voting Details Records found on new Story node');

  // Check empty Voting statistics.
  $this
    ->clickLink('Voting statistics');
  $this
    ->clickLink('Users by votes');
  $this
    ->assertNoRaw('<td>', 'Non-heading rows found in users-by-votes table');

  // Check empty user account votes
  $this
    ->clickLink('My account');
  $this
    ->clickLink('Your votes');
  $this
    ->assertNoRaw('<td>', 'Non-heading rows found in your-votes table');

  // Cast a vote, and make sure the score was updated.
  $this
    ->drupalGet($node_url);
  $this
    ->castVote(TRUE);
  $this
    ->assertText('1 point');
  $this
    ->clickLink('Voting details');
  $this
    ->assertText($this->web_user->name);
  $this
    ->assertRaw('<td>1</td>');

  // Change our vote to -1
  $this
    ->clickLink('View');
  $this
    ->castVote(FALSE);
  $this
    ->assertText('-1 points');
  $this
    ->clickLink('Voting details');
  $this
    ->assertText($this->web_user->name);
  $this
    ->assertRaw('<td>-1</td>');

  // Check NON-empty Voting details about this node.
  $this
    ->clickLink('Voting details');

  // Bug #360139
  $this
    ->assertRaw('<td>', 'Voting Details records found');

  // Check NON-empty Voting statistics.
  $this
    ->clickLink('Voting statistics');
  $this
    ->clickLink('Users by votes');
  $this
    ->assertRaw('<td>', 'Non-heading rows found in users-by-votes table');

  // Check NON-empty user account votes
  $this
    ->clickLink('My account');
  $this
    ->clickLink('Your votes');
  $this
    ->assertRaw('<td>', 'Non-heading rows found in your-votes table');

  // Add another user, and use them to cast another -1 vote.
  $another_user = $this
    ->drupalCreateUser(array(
    'access vote up/down statistics',
    'use vote up',
    'use vote down',
    'view up/down votes',
  ));
  $this
    ->drupalLogin($another_user);
  $this
    ->drupalGet($node_url);
  $this
    ->castVote(FALSE);
  $this
    ->assertText('-2 points');
  $this
    ->clickLink('Voting details');
  $this
    ->assertText($this->web_user->name);
  $this
    ->assertText($another_user->name);
  $this
    ->assertRaw('<td>-1</td>');

  // twice
  // Now, change the Voting API Tag to something else...
  $this
    ->drupalLogin($this->admin_user);
  $edit = array(
    'vote_up_down_tag' => $this
      ->randomName(),
  );
  $this
    ->drupalPost('admin/settings/voteupdown/advanced', $edit, 'Save configuration');
  $this
    ->assertText('The configuration options have been saved.');

  // ...and check that the score on the node is 0 (not -2)
  $this
    ->drupalLogin($this->web_user);
  $this
    ->drupalGet($node_url);
  $this
    ->assertText('0 points');

  // Check empty Voting details about this node.
  $this
    ->clickLink('Voting details');

  // Bug #360139
  $this
    ->assertNoRaw('<td>', 'Non-heading rows found in voting-details table');

  // $this->writeFile('voting-details.html');
  // Check empty Voting statistics.
  $this
    ->clickLink('Voting statistics');
  $this
    ->clickLink('Users by votes');
  $this
    ->assertNoRaw('<td>', 'Non-heading rows found in users-by-votes table');

  // $this->writeFile('users-by-votes.html');
  // Check user account
  $this
    ->clickLink('My account');
  $this
    ->clickLink('Your votes');
  $this
    ->assertNoRaw('<td>', 'Non-heading rows found in your-votes table');

  // $this->writeFile('your-votes.html');
  // Vote and check.
  $this
    ->drupalGet($node_url);
  $this
    ->castVote(FALSE);

  // if this fails, it may be because this users has already voted
  $this
    ->assertText('-1 points');

  // $this->writeFile('alt-tag-vote.html');
  // TODO: Check anonymous user permissions
}