From f3c36ee5c983a93ffb99dd1201b9e9831aa0eb11 Mon Sep 17 00:00:00 2001 From: cweiske Date: Sat, 24 Oct 2009 08:07:55 +0000 Subject: Implement voting service and unit tests for it git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@401 b3834d28-1941-0410-a4f8-b48e95affb8f --- tests/VoteTest.php | 353 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 353 insertions(+) create mode 100644 tests/VoteTest.php (limited to 'tests/VoteTest.php') diff --git a/tests/VoteTest.php b/tests/VoteTest.php new file mode 100644 index 0000000..90fae48 --- /dev/null +++ b/tests/VoteTest.php @@ -0,0 +1,353 @@ + + * @license GPL http://www.gnu.org/licenses/gpl.html + * @link http://sourceforge.net/projects/semanticscuttle + */ + +require_once 'prepare.php'; +require_once 'PHPUnit/Framework.php'; + +if (!defined('PHPUnit_MAIN_METHOD')) { + define('PHPUnit_MAIN_METHOD', 'VoteTest::main'); +} + +/** + * Unit tests for the SemanticScuttle voting system. + * + * @category Bookmarking + * @package SemanticScuttle + * @author Christian Weiske + * @license GPL http://www.gnu.org/licenses/gpl.html + * @link http://sourceforge.net/projects/semanticscuttle + */ +class VoteTest extends PHPUnit_Framework_TestCase +{ + /** + * Vote service instance to test. + * + * @var SemanticScuttle_Service_Vote + */ + protected $vs = null; + + + + /** + * Used to run this test class standalone + * + * @return void + */ + public static function main() + { + require_once 'PHPUnit/TextUI/TestRunner.php'; + PHPUnit_TextUI_TestRunner::run( + new PHPUnit_Framework_TestSuite('VoteTest') + ); + } + + + + public function setUp() + { + //FIXME: create true new instance + $this->vs = SemanticScuttle_Service_Factory::get('Vote'); + } + + + + /** + * Create a new bookmark. + * + * @return integer ID of bookmark + */ + protected function addBookmark() + { + $bs = SemanticScuttle_Service_Factory::get('Bookmark'); + $rand = rand(); + $bid = $bs->addBookmark( + 'http://example.org/' . $rand, + 'unittest bookmark #' . $rand, + 'description', + null, + 0, + array('unittest') + ); + return $bid; + } + + + + /** + * Test getVoting() when no votes have been cast. + * + * @return void + */ + public function testGetVotingZero() + { + $bid = $this->addBookmark(); + $this->assertEquals(0, $this->vs->getVoting($bid)); + } + + + + /** + * Test getVoting() when one positive vote has been cast. + * + * @return void + */ + public function testGetVotingOne() + { + $bid = $this->addBookmark(); + $this->vs->vote($bid, 1, 1); + $this->assertEquals(1, $this->vs->getVoting($bid)); + } + + + + /** + * Test getVoting() when one nevative vote has been cast. + * + * @return void + */ + public function testGetVotingMinusOne() + { + $bid = $this->addBookmark(); + $this->vs->vote($bid, 1, -1); + $this->assertEquals(-1, $this->vs->getVoting($bid)); + } + + + + /** + * Test getVoting() when several votes have been cast. + * + * @return void + */ + public function testGetVotingSum() + { + $bid = $this->addBookmark(); + $this->vs->vote($bid, 1, 1); + $this->vs->vote($bid, 2, -1); + $this->vs->vote($bid, 3, 1); + $this->vs->vote($bid, 4, 1); + $this->assertEquals(2, $this->vs->getVoting($bid)); + } + + + + /** + * Test getVotes() when no vote has been cast. + * + * @return void + */ + public function testGetVotesZero() + { + $bid = $this->addBookmark(); + $this->assertEquals(0, $this->vs->getVotes($bid)); + } + + + + /** + * Test getVotes() when one vote has been cast. + * + * @return void + */ + public function testGetVotesOne() + { + $bid = $this->addBookmark(); + $this->vs->vote($bid, 1, 1); + $this->assertEquals(1, $this->vs->getVotes($bid)); + } + + + + /** + * Test getVoting() when several votes have been cast. + * + * @return void + */ + public function testGetVotesMultiple() + { + $bid = $this->addBookmark(); + $this->vs->vote($bid, 1, 1); + $this->vs->vote($bid, 2, -1); + $this->vs->vote($bid, 3, 1); + $this->vs->vote($bid, 4, 1); + $this->assertEquals(4, $this->vs->getVotes($bid)); + } + + + + /** + * Test hasVoted() when a no vote has been cast + * + * @return void + */ + public function testHasVotedFalse() + { + $uid = 1; + $bid = $this->addBookmark(); + $this->assertFalse($this->vs->hasVoted($bid, $uid)); + } + + + + /** + * Test hasVoted() when a vote has been cast + * + * @return void + */ + public function testHasVotedTrue() + { + $uid = 1; + $bid = $this->addBookmark(); + $this->vs->vote($bid, $uid, 1); + $this->assertTrue($this->vs->hasVoted($bid, $uid)); + } + + + + /** + * Test hasVoted() when a vote has been cast for other bookmarks + * + * @return void + */ + public function testHasVotedFalseOthers() + { + $uid = 1; + $bid = $this->addBookmark(); + $bid2 = $this->addBookmark(); + $bid3 = $this->addBookmark(); + + $this->vs->vote($bid, $uid, 1); + $this->vs->vote($bid3, $uid, 1); + + $this->assertFalse($this->vs->hasVoted($bid2, $uid)); + } + + + + /** + * Test getVote() when no vote has been cast. + * + * @return void + */ + public function testGetVoteNone() + { + $uid = 1; + $bid = $this->addBookmark(); + $this->assertNull($this->vs->getVote($bid, $uid)); + } + + + + /** + * Test getVote() when a positive vote has been cast. + * + * @return void + */ + public function testGetVoteOne() + { + $uid = 1; + $bid = $this->addBookmark(); + $this->vs->vote($bid, $uid, 1); + $this->assertEquals(1, $this->vs->getVote($bid, $uid)); + } + + + + /** + * Test getVote() when a negavitve vote has been cast. + * + * @return void + */ + public function testGetVoteMinusOne() + { + $uid = 1; + $bid = $this->addBookmark(); + $this->vs->vote($bid, $uid, -1); + $this->assertEquals(-1, $this->vs->getVote($bid, $uid)); + } + + + + /** + * Test vote() with wrong vote parameter + * + * @return void + */ + public function testVoteWrongVoteParam() + { + $uid = 1; + $bid = $this->addBookmark(); + $this->assertFalse($this->vs->vote($bid, $uid, 2)); + $this->assertFalse($this->vs->vote($bid, $uid, 0)); + $this->assertFalse($this->vs->vote($bid, $uid, 1.5)); + $this->assertFalse($this->vs->vote($bid, $uid, -1.1)); + $this->assertFalse($this->vs->vote($bid, $uid, 'yes')); + $this->assertFalse($this->vs->vote($bid, $uid, 'no')); + } + + + + /** + * Test vote() when the user already has voted + * + * @return void + */ + public function testVoteHasVoted() + { + $uid = 1; + $bid = $this->addBookmark(); + $this->assertTrue($this->vs->vote($bid, $uid, 1)); + $this->assertFalse($this->vs->vote($bid, $uid, 1)); + + $bid = $this->addBookmark(); + $this->assertTrue($this->vs->vote($bid, $uid, -1)); + $this->assertFalse($this->vs->vote($bid, $uid, 1)); + } + + + + /** + * Test vote() with positive vote + * + * @return void + */ + public function testVotePositive() + { + $uid = 1; + $bid = $this->addBookmark(); + $this->assertTrue($this->vs->vote($bid, $uid, 1)); + $this->assertEquals(1, $this->vs->getVote($bid, $uid)); + } + + + + /** + * Test vote() with negative vote + * + * @return void + */ + public function testVoteNegative() + { + $uid = 1; + $bid = $this->addBookmark(); + $this->assertTrue($this->vs->vote($bid, $uid, -1)); + $this->assertEquals(-1, $this->vs->getVote($bid, $uid)); + } + +}//class VoteTest extends PHPUnit_Framework_TestCase + + +if (PHPUnit_MAIN_METHOD == 'VoteTest::main') { + VoteTest::main(); +} +?> \ No newline at end of file -- cgit v1.2.3-54-g00ecf