diff options
Diffstat (limited to 'tests/VoteTest.php')
-rw-r--r-- | tests/VoteTest.php | 536 |
1 files changed, 536 insertions, 0 deletions
diff --git a/tests/VoteTest.php b/tests/VoteTest.php new file mode 100644 index 0000000..0073678 --- /dev/null +++ b/tests/VoteTest.php @@ -0,0 +1,536 @@ +<?php +/** + * SemanticScuttle - your social bookmark manager. + * + * PHP version 5. + * + * @category Bookmarking + * @package SemanticScuttle + * @author Christian Weiske <cweiske@cweiske.de> + * @license GPL http://www.gnu.org/licenses/gpl.html + * @link http://sourceforge.net/projects/semanticscuttle + */ + +/** + * Unit tests for the SemanticScuttle voting system. + * + * @category Bookmarking + * @package SemanticScuttle + * @author Christian Weiske <cweiske@cweiske.de> + * @license GPL http://www.gnu.org/licenses/gpl.html + * @link http://sourceforge.net/projects/semanticscuttle + */ +class VoteTest extends TestBase +{ + /** + * Vote service instance to test. + * + * @var SemanticScuttle_Service_Vote + */ + protected $vs = null; + + /** + * Bookmark service instance. + * + * @var SemanticScuttle_Service_Bookmark + */ + protected $bs = null; + + + + public function setUp() + { + $GLOBALS['enableVoting'] = true; + //FIXME: create true new instance + $this->vs = SemanticScuttle_Service_Factory::get('Vote'); + $this->vs->deleteAll(); + + $this->bs = SemanticScuttle_Service_Factory::get('Bookmark'); + } + + + + /** + * Test getVoting() when no votes have been cast. + * + * @return void + */ + public function testGetVotingZero() + { + $bid = $this->addBookmark(); + $this->assertEquals(0, $this->vs->getVoting($bid)); + + $bm = $this->bs->getBookmark($bid); + $this->assertEquals(0, $bm['bVoting']); + $this->assertEquals(0, $bm['bVotes']); + } + + + + /** + * 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)); + + $bm = $this->bs->getBookmark($bid); + $this->assertEquals(1, $bm['bVoting']); + $this->assertEquals(1, $bm['bVotes']); + } + + + + /** + * 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)); + + $bm = $this->bs->getBookmark($bid); + $this->assertEquals(-1, $bm['bVoting']); + $this->assertEquals(1, $bm['bVotes']); + } + + + + /** + * 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)); + + $bm = $this->bs->getBookmark($bid); + $this->assertEquals(2, $bm['bVoting']); + $this->assertEquals(4, $bm['bVotes']); + } + + + + /** + * Test getVotes() when no vote has been cast. + * + * @return void + */ + public function testGetVotesZero() + { + $bid = $this->addBookmark(); + $this->assertEquals(0, $this->vs->getVotes($bid)); + + $bm = $this->bs->getBookmark($bid); + $this->assertEquals(0, $bm['bVoting']); + $this->assertEquals(0, $bm['bVotes']); + } + + + + /** + * 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)); + + $bm = $this->bs->getBookmark($bid); + $this->assertEquals(1, $bm['bVoting']); + $this->assertEquals(1, $bm['bVotes']); + } + + + + /** + * Test getVotes() 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)); + + $bm = $this->bs->getBookmark($bid); + $this->assertEquals(2, $bm['bVoting']); + $this->assertEquals(4, $bm['bVotes']); + } + + + + /** + * 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. + * Also verify that the bookmark voting did not change for + * the 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)); + + $bm2 = $this->bs->getBookmark($bid2); + $this->assertEquals(0, $bm2['bVoting']); + $this->assertEquals(0, $bm2['bVotes']); + } + + + + /** + * 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() when voting is deactivated + * + * @return void + */ + public function testVoteVotingDeactivated() + { + $GLOBALS['enableVoting'] = false; + + $uid = 1; + $bid = $this->addBookmark(); + $this->assertFalse($this->vs->vote($bid, $uid, 1)); + } + + + + /** + * 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->assertTrue($this->vs->vote($bid, $uid, 1)); + + $bm = $this->bs->getBookmark($bid); + $this->assertEquals(1, $bm['bVoting']); + $this->assertEquals(1, $bm['bVotes']); + + $bid = $this->addBookmark(); + $this->assertTrue($this->vs->vote($bid, $uid, -1)); + $this->assertTrue($this->vs->vote($bid, $uid, 1)); + + $bm = $this->bs->getBookmark($bid); + $this->assertEquals(1, $bm['bVoting']); + $this->assertEquals(1, $bm['bVotes']); + } + + + + /** + * 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)); + + $bm = $this->bs->getBookmark($bid); + $this->assertEquals(1, $bm['bVoting']); + $this->assertEquals(1, $bm['bVotes']); + } + + + + /** + * 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)); + + $bm = $this->bs->getBookmark($bid); + $this->assertEquals(-1, $bm['bVoting']); + $this->assertEquals(1, $bm['bVotes']); + } + + + + /** + * Verify that changing the vote from positive to negative + * works. + * + * @return void + */ + public function testVoteChangePosNeg() + { + $uid = 1; + $bid = $this->addBookmark(); + + $this->assertTrue($this->vs->vote($bid, $uid, 1)); + $this->assertEquals(1, $this->vs->getVote($bid, $uid)); + $this->assertEquals(1, $this->vs->getVotes($bid)); + + $b = $this->bs->getBookmark($bid); + $this->assertEquals(1, $b['bVoting']); + $this->assertEquals(1, $b['bVotes']); + + //change vote + $this->assertTrue($this->vs->vote($bid, $uid, -1)); + $this->assertEquals(-1, $this->vs->getVote($bid, $uid)); + $this->assertEquals(1, $this->vs->getVotes($bid)); + + $b = $this->bs->getBookmark($bid); + $this->assertEquals(-1, $b['bVoting']); + $this->assertEquals(1, $b['bVotes']); + } + + + + /** + * Verify that changing the vote from negative to positive + * works. + * + * @return void + */ + public function testVoteChangeNegPos() + { + $uid = 1; + $bid = $this->addBookmark(); + + $this->assertTrue($this->vs->vote($bid, $uid, -1)); + $this->assertEquals(-1, $this->vs->getVote($bid, $uid)); + $this->assertEquals(1, $this->vs->getVotes($bid)); + + $b = $this->bs->getBookmark($bid); + $this->assertEquals(-1, $b['bVoting']); + $this->assertEquals(1, $b['bVotes']); + + //change vote + $this->assertTrue($this->vs->vote($bid, $uid, 1)); + $this->assertEquals(1, $this->vs->getVote($bid, $uid)); + $this->assertEquals(1, $this->vs->getVotes($bid)); + + $b = $this->bs->getBookmark($bid); + $this->assertEquals(1, $b['bVoting']); + $this->assertEquals(1, $b['bVotes']); + } + + + + /** + * Verify that changing the vote from postitive to positive + * has no strange effects + * + * @return void + */ + public function testVoteChangePosPos() + { + $uid = 1; + $bid = $this->addBookmark(); + + $this->assertTrue($this->vs->vote($bid, $uid, 1)); + $this->assertEquals(1, $this->vs->getVote($bid, $uid)); + $this->assertEquals(1, $this->vs->getVotes($bid)); + + $b = $this->bs->getBookmark($bid); + $this->assertEquals(1, $b['bVoting']); + $this->assertEquals(1, $b['bVotes']); + + //change vote + $this->assertTrue($this->vs->vote($bid, $uid, 1)); + $this->assertEquals(1, $this->vs->getVote($bid, $uid)); + $this->assertEquals(1, $this->vs->getVotes($bid)); + + $b = $this->bs->getBookmark($bid); + $this->assertEquals(1, $b['bVoting']); + $this->assertEquals(1, $b['bVotes']); + } + + + + /** + * Verify that changing the vote from negative to negative + * has no strange effects + * + * @return void + */ + public function testVoteChangeNegNeg() + { + $uid = 1; + $bid = $this->addBookmark(); + + $this->assertTrue($this->vs->vote($bid, $uid, -1)); + $this->assertEquals(-1, $this->vs->getVote($bid, $uid)); + $this->assertEquals(1, $this->vs->getVotes($bid)); + + $b = $this->bs->getBookmark($bid); + $this->assertEquals(-1, $b['bVoting']); + $this->assertEquals(1, $b['bVotes']); + + //change vote to same value + $this->assertTrue($this->vs->vote($bid, $uid, -1)); + $this->assertEquals(-1, $this->vs->getVote($bid, $uid)); + $this->assertEquals(1, $this->vs->getVotes($bid)); + + $b = $this->bs->getBookmark($bid); + $this->assertEquals(-1, $b['bVoting']); + $this->assertEquals(1, $b['bVotes']); + } + + + + /** + * Test that rewriting votings does work + * + * @return void + */ + public function testRewriteVotings() + { + $uid = 1; + $bid = $this->addBookmark(); + $this->assertTrue($this->vs->vote($bid, $uid, 1)); + + $bm = $this->bs->getBookmark($bid); + $this->assertEquals(1, $bm['bVoting']); + $this->assertEquals(1, $bm['bVotes']); + + $this->vs->deleteAll(); + //we assume that $vs->deleteAll() does *not* reset + //voting in bookmarks table + $bm = $this->bs->getBookmark($bid); + $this->assertEquals(1, $bm['bVoting']); + $this->assertEquals(1, $bm['bVotes']); + + $this->vs->rewriteVotings(); + $bm = $this->bs->getBookmark($bid); + //now it should be reset to 0 + $this->assertEquals(0, $bm['bVoting']); + $this->assertEquals(0, $bm['bVotes']); + } + +}//class VoteTest extends TestBase +?>
\ No newline at end of file |