public function VoteTest::testVoteResults in Voting API 8.3
Test vote results.
File
- tests/
src/ Functional/ VoteTest.php, line 86
Class
- VoteTest
- Tests the Voting API basics.
Namespace
Drupal\Tests\votingapi\FunctionalCode
public function testVoteResults() {
$vote_storage = $this->container
->get('entity_type.manager')
->getStorage('vote');
$node = $this
->drupalCreateNode();
$user = $this
->drupalCreateUser();
$manager = $this->container
->get('plugin.manager.votingapi.resultfunction');
// Save a few votes so that we have data.
$values = [
10,
20,
60,
];
foreach ($values as $value) {
$vote_storage
->create([
'type' => 'vote',
'entity_id' => $node
->id(),
'entity_type' => 'node',
'user_id' => $user
->id(),
'value' => $value,
])
->save();
}
$results = $manager
->getResults('node', $node
->id());
// Standard results are available and correct.
$this
->assertNotEmpty($results['vote'], 'Results for test vote type are available.');
$this
->assertArrayHasKey('vote_sum', $results['vote'], 'Sum was calculated.');
$this
->assertEquals(90, $results['vote']['vote_sum'], 'Sum is correct.');
$this
->assertArrayHasKey('vote_average', $results['vote'], 'Average was calculated.');
$this
->assertEquals(30, $results['vote']['vote_average'], 'Average is correct.');
// Check the result of hook_vote_result_alter.
$this
->assertArrayHasKey('ultimate_question', $results['vote'], 'hook_vote_result_alter triggered.');
$this
->assertEquals(42, $results['vote']['ultimate_question'], 'The answer to the ultimate question is 42.');
// When you remove a result type via the hook, it is no longer available.
// @todo Replace this with a better assert and fix this so we are actually
// testing the hook as described. Right now this doesn't do anything.
$this
->assertArrayNotHasKey('test', $results, 'Result removed via alter hook was not calculated.');
// Contrib modules can add new result types.
$this
->assertArrayHasKey('zebra', $results['vote'], 'New result was calculated.');
$this
->assertEquals(10101, $results['vote']['zebra'], 'New result is correct.');
// Deleting entity removes results.
$storage_handler = \Drupal::entityTypeManager()
->getStorage('node');
$entities = $storage_handler
->loadMultiple([
$node
->id(),
]);
$storage_handler
->delete($entities);
$results = $manager
->getResults('node', $node
->id());
$this
->assertEmpty($results, 'When an entity is deleted, the voting results are also deleted.');
}