aboutsummaryrefslogtreecommitdiff
path: root/tests/VoteTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'tests/VoteTest.php')
-rw-r--r--tests/VoteTest.php536
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