votingapi.test in Voting API 7.3
Same filename and directory in other branches
Test file for VotingAPI module.
File
tests/votingapi.testView source
<?php
/**
* @file
* Test file for VotingAPI module.
*/
class VotingAPITestCase extends DrupalWebTestCase {
public static function getInfo() {
return array(
'name' => 'Voting API',
'description' => 'Voting API',
'group' => 'Voting API Tests',
);
}
function setUp() {
parent::setUp('votingapi');
// Create a new page
$node = new stdClass();
$node->title = '';
$node->teaser = t('Teaser text');
$node->body = t('Here is the body of the page');
$node->uid = 1;
$node->type = 'page';
$node->status = 1;
$node->promote = 0;
node_save($node);
variable_set('votingapi_nid1', $node->nid);
$node->title = t('Node @id', array(
'@id' => $node->nid,
));
node_save($node);
}
function tearDown() {
$nid = variable_get('votingapi_nid1', NULL);
if ($nid) {
node_delete($nid);
variable_del('votingapi_nid1');
}
parent::tearDown();
}
/**
* Ensure that the optional fields are truly optional.
*/
function testMinimalAdd() {
$nid = variable_get('votingapi_nid1', NULL);
$value = '85';
// The minimum required fields according to the documentation are
// entity_id and value.
$vote = new VotingApi_Vote(array(
'entity_id' => $nid,
'value' => $value,
));
try {
$result = VotingApi_Vote::saveMultiple($vote);
// Test that the result has its fields set appropriately.
$this
->validateVote('testMinimalAdd()', $result, $nid, array(
$value,
));
$this
->assertTrue(REQUEST_TIME - $result[0]->timestamp < 2, t('The timestamp should be less than 2 seconds ago.'));
} catch (Exception $e) {
$this
->fail(t('Could not add a vote with only entity_id and value.'));
return;
}
}
/**
* Add a vote and ensure that the vote was stored properly.
*/
function testAddVote() {
global $user;
$value = '7';
$nid = variable_get('votingapi_nid1', NULL);
$vote = new VotingApi_Vote(array(
'entity_id' => $nid,
'value' => $value,
'entity_type' => 'node',
));
try {
$result = VotingApi_Vote::saveMultiple($vote);
// Test that the result has its fields set appropriately.
$this
->validateVote("testAddVote()", $result, $nid, $value, 'node', $user->uid);
$this
->assertTrue(REQUEST_TIME - $result[0]->timestamp < 2, t('The timestamp should be less than 2 seconds ago.'));
} catch (Exception $e) {
$this
->fail('The VotingApi_Vote::saveMultiple threw an error.');
return;
}
// Load the vote back in and verify it matches.
$vote_results = votingapi_recalculate_results('node', $nid);
$this
->validateVoteCounts('testAddVote()', $vote_results, $nid, array(
$value,
));
}
/**
* Add multiple votes and ensure that the vote calculations are working.
*/
function testAddMultipleVotes() {
$users = array();
$users[] = $this
->drupalCreateUser();
$users[] = $this
->drupalCreateUser();
$users[] = $this
->drupalCreateUser();
$nid = variable_get('votingapi_nid1', NULL);
$values = array(
72,
13,
27,
);
$votes = array();
try {
for ($index = 0; $index < count($values); $index++) {
$votes[$index] = new VotingApi_Vote(array(
'entity_type' => 'node',
'entity_id' => $nid,
'uid' => $users[$index]->uid,
'value' => $values[$index],
));
}
$result = VotingApi_Vote::saveMultiple($votes);
// Test that the result has its fields set appropriately.
$this
->validateVote("testAddMultipleVotes()", $result, $nid, $values);
} catch (Exception $e) {
$this
->fail('The VotingApi_Vote::saveMultiple threw an error.');
return;
}
// Load the vote back in and verify it matches.
$vote_results = votingapi_recalculate_results('node', $nid);
$this
->validateVoteCounts('testAddVote()', $vote_results, $nid, $values);
}
function validateVote($prefix, $vote, $entity_id, $value, $entity_type = 'node', $uid = NULL, $value_type = 'percent', $tag = 'vote', $vote_source = NULL) {
global $user;
if ($vote_source == NULL) {
$vote_source = ip_address();
}
$prefix_array = array(
'@prefix' => $prefix,
);
for ($index = 0; $index < count($vote); $index++) {
$this
->assertTrue($vote[$index]->entity_id == $entity_id, t('@prefix: entity_id should match.', $prefix_array));
$this
->assertTrue($vote[$index]->value == $value[$index], t('@prefix: value should match.', $prefix_array));
$this
->assertTrue($vote[$index]->entity_type == $entity_type, t('@prefix: entity_type should match, default = "node".', $prefix_array));
$this
->assertTrue($vote[$index]->value_type == $value_type, t('@prefix: value_type should match, default= "percent".', $prefix_array));
$this
->assertTrue($vote[$index]->tag == $tag, t('@prefix: tag should match, default = "vote".', $prefix_array));
$this
->assertTrue($vote[$index]->vote_source == $vote_source, t('@prefix: vote_source should match, default = ip address.', $prefix_array));
if ($uid != NULL) {
$this
->assertTrue($vote[0]->uid == $uid, t('@prefix: uid should match.', $prefix_array));
}
}
}
function validateVoteCounts($prefix, $votes, $entity_id, $values, $entity_type = 'node', $value_type = 'percent', $tag = 'vote') {
$count_summary = 0;
$average_summary = 1;
$count = 0.0;
$sum = 0.0;
foreach ($values as $value) {
$sum += $value;
$count++;
}
$average = $sum / $count;
$prefix_array = array(
'@prefix' => $prefix,
);
foreach ($votes as $summary) {
if ($summary->function == 'count') {
$summary_desc = 'count summary';
$prefix_array['@summary_desc'] = $summary_desc;
$this
->assertTrue($summary->value == $count, t('@prefix: (@summary_desc) value should match the number of values.', $prefix_array));
}
elseif ($summary->function == 'average') {
$summary_desc = 'average summary';
$prefix_array['@summary_desc'] = $summary_desc;
$this
->assertTrue($summary->value == $average, t('@prefix: (@summary_desc) value should match the average of values', $prefix_array));
}
else {
$prefix_array['@summary'] = $summary->function;
$prefix_array['@summary_desc'] = $summary->function . ' summary';
$this
->assertFalse(TRUE, t('@prefix: Unknown summary type @summary.', $prefix_array));
}
$this
->assertTrue($summary->entity_type == $entity_type, t('@prefix: (@summary_desc) entity_type should match, default = "node"', $prefix_array));
$this
->assertTrue($summary->entity_id == $entity_id, t('@prefix: (@summary_desc) entity_id should match', $prefix_array));
$this
->assertTrue($summary->value_type == $value_type, t('@prefix: (@summary_desc) value_type should match.', $prefix_array));
$this
->assertTrue($summary->tag == $tag, t('@prefix: (@summary_desc) tag should match', $prefix_array));
}
}
}
Classes
Name | Description |
---|---|
VotingAPITestCase | @file Test file for VotingAPI module. |