summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--db/itemmapper.php16
-rw-r--r--tests/unit/db/ItemMapperTest.php13
2 files changed, 26 insertions, 3 deletions
diff --git a/db/itemmapper.php b/db/itemmapper.php
index bffab6348..326d58a2d 100644
--- a/db/itemmapper.php
+++ b/db/itemmapper.php
@@ -115,16 +115,26 @@ class ItemMapper extends Mapper implements IMapper {
public function readFeed($feedId, $highestItemId, $userId){
+ // its 0 when the feed was not loaded or the loaded feed
+ // does not contain any items
+ if($highestItemId !== 0){
+ $params = array(~StatusFlag::UNREAD, $feedId, $highestItemId, $userId,
+ $feedId);
+ $lowerSql = 'AND `id` <= ? ';
+ } else {
+ $lowerSql = '';
+ $params = array(~StatusFlag::UNREAD, $feedId, $userId, $feedId);
+ }
+
$sql = 'UPDATE `*PREFIX*news_items` ' .
'SET `status` = `status` & ? ' .
'WHERE `feed_id` = ? ' .
- 'AND `id` <= ? ' .
+ $lowerSql .
'AND EXISTS (' .
'SELECT * FROM `*PREFIX*news_feeds` ' .
'WHERE `user_id` = ? ' .
'AND `id` = ? ) ';
- $params = array(~StatusFlag::UNREAD, $feedId, $highestItemId, $userId,
- $feedId);
+
$this->execute($sql, $params);
}
diff --git a/tests/unit/db/ItemMapperTest.php b/tests/unit/db/ItemMapperTest.php
index a7fead8f0..ed47f175c 100644
--- a/tests/unit/db/ItemMapperTest.php
+++ b/tests/unit/db/ItemMapperTest.php
@@ -132,6 +132,19 @@ class ItemMapperTest extends \OCA\AppFramework\Utility\MapperTestUtility {
}
+ public function testReadFeedShouldMarkAllAsReadWhenIdZero(){
+ $sql = 'UPDATE `*PREFIX*news_items` ' .
+ 'SET `status` = `status` & ? ' .
+ 'WHERE `feed_id` = ? ' .
+ 'AND EXISTS (' .
+ 'SELECT * FROM `*PREFIX*news_feeds` ' .
+ 'WHERE `user_id` = ? ' .
+ 'AND `id` = ? ) ';
+ $params = array(~StatusFlag::UNREAD, 3,$this->user, 3);
+ $this->setMapperResult($sql, $params);
+ $this->mapper->readFeed(3, 0, $this->user);
+ }
+
public function testFindAllNew(){
$sql = 'AND `items`.`id` >= ?';
$sql = $this->makeSelectQueryStatus($sql, $this->status);