function PollDeleteChoiceTest::testChoiceRemoval in Poll 8
Tests removing a choice from a poll.
File
- tests/
src/ Functional/ PollDeleteChoiceTest.php, line 15
Class
- PollDeleteChoiceTest
- Tests the removal of poll choices.
Namespace
Drupal\Tests\poll\FunctionalCode
function testChoiceRemoval() {
$ids = \Drupal::entityQuery('poll_choice')
->condition('choice', $this->poll->choice[0]->entity
->label())
->execute();
$this
->assertEqual(count($ids), 1, 'Choice 1 exists in the database');
// Record a vote for the second choice.
$edit = array(
'choice' => $this->poll->choice[1]->target_id,
);
$this
->drupalPostForm('poll/' . $this->poll
->id(), $edit, t('Vote'));
// Assert the selected option.
$xml = $this
->xpath('//dt[text()=:choice]/following-sibling::dd[1]/div', [
':choice' => $this->poll->choice[1]->entity
->label(),
]);
$this
->assertEqual(1, $xml[0]
->getAttribute('data-value'));
// Edit the poll, and try to delete first poll choice.
$this
->drupalGet("poll/" . $this->poll
->id() . "/edit");
$edit = [
'choice[0][choice]' => '',
];
$this
->drupalPostForm(NULL, $edit, t('Save'));
// Click on the poll title to go to poll page.
$this
->drupalGet('admin/content/poll');
$this
->clickLink($this->poll
->label());
// Check the first poll choice is deleted, while the others remain.
$this
->assertNoText($this->poll->choice[0]->entity
->label());
$this
->assertText($this->poll->choice[1]->entity
->label());
$this
->assertText($this->poll->choice[2]->entity
->label());
$ids = \Drupal::entityQuery('poll_choice')
->condition('choice', $this->poll->choice[0]->entity
->label())
->execute();
$this
->assertEqual(count($ids), 0, 'Choice 1 has been deleted in the database');
// Ensure that the existing vote still shows.
$this
->drupalGet('poll/' . $this->poll
->id());
$vote = $this->poll->choice[1]->target_id;
$vote_recorded = \Drupal::database()
->query('SELECT chid FROM {poll_vote} WHERE chid = :chid', array(
':chid' => $vote,
))
->fetch();
$this
->assertFalse(empty($vote_recorded), 'Vote in Choice 2 still in the database');
// Assert the selected option.
$xml = $this
->xpath('//dt[text()=:choice]/following-sibling::dd[1]/div', [
':choice' => $this->poll->choice[1]->entity
->label(),
]);
$this
->assertEqual(1, $xml[0]
->getAttribute('data-value'));
// Edit the poll, and try to delete first poll choice.
$this
->drupalGet("poll/" . $this->poll
->id() . "/edit");
$edit = [
'choice[0][choice]' => '',
];
$this
->drupalPostForm(NULL, $edit, t('Save'));
// Click on the poll title to go to poll page.
$this
->drupalGet('admin/content/poll');
$this
->clickLink($this->poll
->label());
// Check the poll choice (which had a vote) is deleted.
$elements = $this
->xpath('//input[@value="Vote"]');
$this
->assertTrue(isset($elements[0]), "vote deleted successfully");
// Assert that the existing vote has been deleted from the database.
$vote_deleted = \Drupal::database()
->query('SELECT chid FROM {poll_vote} WHERE chid = :chid', array(
':chid' => $vote,
))
->fetch();
$this
->assertTrue(empty($vote_deleted), 'Vote in Choice 2 has been deleted from the database');
}