You are here

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\Functional

Code

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.');
}