diff options
| author | cweiske <cweiske@b3834d28-1941-0410-a4f8-b48e95affb8f> | 2009-11-02 09:35:38 +0000 | 
|---|---|---|
| committer | cweiske <cweiske@b3834d28-1941-0410-a4f8-b48e95affb8f> | 2009-11-02 09:35:38 +0000 | 
| commit | d05aebe54e02ab4a8362088ca09caaff265fa670 (patch) | |
| tree | 03f1a01fcc7470f59b52f335708ba0fd8e10d114 | |
| parent | b569921136030a5030731abe2c9e4b8d0712a249 (diff) | |
| download | semanticscuttle-d05aebe54e02ab4a8362088ca09caaff265fa670.tar.gz semanticscuttle-d05aebe54e02ab4a8362088ca09caaff265fa670.tar.bz2  | |
allow changing of votes
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@493 b3834d28-1941-0410-a4f8-b48e95affb8f
| -rw-r--r-- | src/SemanticScuttle/Service/Vote.php | 41 | ||||
| -rw-r--r-- | tests/VoteTest.php | 127 | 
2 files changed, 163 insertions, 5 deletions
diff --git a/src/SemanticScuttle/Service/Vote.php b/src/SemanticScuttle/Service/Vote.php index 89088f0..c0c4995 100644 --- a/src/SemanticScuttle/Service/Vote.php +++ b/src/SemanticScuttle/Service/Vote.php @@ -225,12 +225,12 @@ class SemanticScuttle_Service_Vote extends SemanticScuttle_DbService              return false;          } -        if ($this->hasVoted($bookmark, $user)) { +        if ($vote != -1 && $vote != 1) {              return false;          } -        if ($vote != -1 && $vote != 1) { -            return false; +        if ($this->hasVoted($bookmark, $user)) { +            $this->removeVote($bookmark, $user);          }          $res = $this->db->sql_query( @@ -258,6 +258,41 @@ class SemanticScuttle_Service_Vote extends SemanticScuttle_DbService      /** +     * Removes a vote from the database +     * +     * @param integer $bookmark Bookmark ID +     * @param integer $user     User ID +     * +     * @return boolean True if all went well, false if not +     */ +    protected function removeVote($bookmark, $user) +    { +        $vote = $this->getVote($bookmark, $user); +        if ($vote === null) { +            return false; +        } + +        //remove from votes table +        $query = 'DELETE FROM ' . $this->getTableName() +            . ' WHERE bId = ' . (int)$bookmark +            . ' AND uId = ' . (int)$user; +        $this->db->sql_query($query); + +        //change voting sum in bookmarks table +        $bm  = SemanticScuttle_Service_Factory::get('Bookmark'); +        $res = $this->db->sql_query( +            $sql='UPDATE ' . $bm->getTableName() +            . ' SET bVoting = bVoting - ' . (int)$vote +            . ' WHERE bId = ' . (int)$bookmark +        ); +        $this->db->sql_freeresult($res); + +        return true; +    } + + + +    /**       * Re-calculates all votings for all bookmarks       * and updates the voting values in the bookmarks       * table. diff --git a/tests/VoteTest.php b/tests/VoteTest.php index 9d6d904..b211dcd 100644 --- a/tests/VoteTest.php +++ b/tests/VoteTest.php @@ -35,6 +35,13 @@ class VoteTest extends TestBase       */      protected $vs = null; +    /** +     * Bookmark service instance. +     * +     * @var SemanticScuttle_Service_Bookmark +     */ +    protected $bs = null; +      /** @@ -293,11 +300,11 @@ class VoteTest extends TestBase          $uid = 1;          $bid = $this->addBookmark();          $this->assertTrue($this->vs->vote($bid, $uid, 1)); -        $this->assertFalse($this->vs->vote($bid, $uid, 1)); +        $this->assertTrue($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)); +        $this->assertTrue($this->vs->vote($bid, $uid, 1));      } @@ -333,6 +340,122 @@ class VoteTest extends TestBase      /** +     * 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']); + +        //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']); +    } + + + +    /** +     * 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']); + +        //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']); +    } + + + +    /** +     * 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']); + +        //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']); +    } + + + +    /** +     * Verify that changing the vote from postitive to positive +     * 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']); + +        //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']); +    } + + + +    /**       * Test that rewriting votings does work       *       * @return void  | 
