aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/SemanticScuttle/Service/Vote.php9
-rw-r--r--tests/VoteTest.php28
2 files changed, 33 insertions, 4 deletions
diff --git a/src/SemanticScuttle/Service/Vote.php b/src/SemanticScuttle/Service/Vote.php
index 168040d..89088f0 100644
--- a/src/SemanticScuttle/Service/Vote.php
+++ b/src/SemanticScuttle/Service/Vote.php
@@ -261,17 +261,18 @@ class SemanticScuttle_Service_Vote extends SemanticScuttle_DbService
* Re-calculates all votings for all bookmarks
* and updates the voting values in the bookmarks
* table.
+ * This is mainly meant to be an administrative method
+ * to fix a broken database.
*
* @return void
*/
public function rewriteVotings()
{
- throw new Exception('Not implemented yet');
- //FIXME
- $bm = SemanticScuttle_Service_Factory::get('Bookmark');
- $sql = 'UPDATE ' . $bm->getTableName() . ' as B SET bVoting = '
+ $bm = SemanticScuttle_Service_Factory::get('Bookmark');
+ $query = 'UPDATE ' . $bm->getTableName() . ' as B SET bVoting = '
. '(SELECT SUM(vote) FROM ' . $this->getTableName() . ' as V'
. ' WHERE V.bId = B.bId GROUP BY bid)';
+ $this->db->sql_query($query);
}
diff --git a/tests/VoteTest.php b/tests/VoteTest.php
index 2579709..b9a859d 100644
--- a/tests/VoteTest.php
+++ b/tests/VoteTest.php
@@ -329,6 +329,34 @@ class VoteTest extends TestBase
$this->assertEquals(-1, $this->vs->getVote($bid, $uid));
}
+
+
+ /**
+ * 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->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->vs->rewriteVotings();
+ $bm = $this->bs->getBookmark($bid);
+ //now it should be reset to 0
+ $this->assertEquals(0, $bm['bVoting']);
+ }
+
}//class VoteTest extends TestBase