diff options
author | Bernhard Posselt <bernhard@posselt.at> | 2015-11-28 14:19:51 +0100 |
---|---|---|
committer | Bernhard Posselt <bernhard@posselt.at> | 2015-11-28 14:19:51 +0100 |
commit | 30e66657b8709e95240da4f252a3fce6797acfda (patch) | |
tree | 5fad4b3ed44675e72d26be22d4b914bf99f961b2 | |
parent | 911af7d64402f86383b13eac832c8bd9a6a0556e (diff) |
also read duplicate feed items read
-rw-r--r-- | db/itemmapper.php | 24 | ||||
-rw-r--r-- | tests/integration/bootstrap.php | 1 | ||||
-rw-r--r-- | tests/integration/db/ItemMapperTest.php | 4 | ||||
-rw-r--r-- | tests/integration/fixtures/items.json | 14 | ||||
-rw-r--r-- | tests/unit/db/ItemMapperTest.php | 20 |
5 files changed, 32 insertions, 31 deletions
diff --git a/db/itemmapper.php b/db/itemmapper.php index 16d717963..6033832a0 100644 --- a/db/itemmapper.php +++ b/db/itemmapper.php @@ -129,15 +129,21 @@ class ItemMapper extends NewsMapper { public function readFeed($feedId, $highestItemId, $time, $userId){ - $sql = 'UPDATE `*PREFIX*news_items` ' . - 'SET `status` = `status` & ? ' . - ', `last_modified` = ? ' . - 'WHERE `feed_id` = ? ' . - 'AND `id` <= ? ' . - 'AND EXISTS (' . - 'SELECT * FROM `*PREFIX*news_feeds` ' . - 'WHERE `user_id` = ? ' . - 'AND `id` = ? ) '; + $sql = 'UPDATE `*PREFIX*news_items` + SET `status` = `status` & ?, + `last_modified` = ? + WHERE `id` IN ( + SELECT `b`.`id` FROM `*PREFIX*news_items` `a`, + `*PREFIX*news_items` `b` + WHERE `a`.`feed_id` = ? + AND `a`.`id` <= ? + AND `a`.`fingerprint` = `b`.`fingerprint` + AND EXISTS ( + SELECT `id` FROM `*PREFIX*news_feeds` + WHERE `user_id` = ? + AND `id` = ? + ) + )'; $params = [~StatusFlag::UNREAD, $time, $feedId, $highestItemId, $userId, $feedId]; diff --git a/tests/integration/bootstrap.php b/tests/integration/bootstrap.php index 19a169a7e..7cd298beb 100644 --- a/tests/integration/bootstrap.php +++ b/tests/integration/bootstrap.php @@ -162,6 +162,7 @@ class NewsIntegrationTest extends PHPUnit_Framework_TestCase { $newItem->setLastModified($item['lastModified']); $newItem->setEnclosureMime($item['enclosureMime']); $newItem->setEnclosureLink($item['enclosureLink']); + $newItem->generateSearchIndex(); return $this->itemMapper->insert($newItem); } diff --git a/tests/integration/db/ItemMapperTest.php b/tests/integration/db/ItemMapperTest.php index dcd101a9f..89fe98ebf 100644 --- a/tests/integration/db/ItemMapperTest.php +++ b/tests/integration/db/ItemMapperTest.php @@ -133,7 +133,7 @@ class ItemMapperTest extends NewsIntegrationTest { 30, 0, $status, false, $this->userId ); - $this->assertEquals(1, count($items)); + $this->assertEquals(2, count($items)); $item = $this->items['a title1']; $item = $this->itemMapper->find($item->getId(), $this->userId); @@ -210,7 +210,7 @@ class ItemMapperTest extends NewsIntegrationTest { public function testFindAllUnreadOrStarred () { $items = $this->itemMapper->findAllUnreadOrStarred($this->userId); - $this->assertEquals(4, count($items)); + $this->assertEquals(5, count($items)); } diff --git a/tests/integration/fixtures/items.json b/tests/integration/fixtures/items.json index 5396fde9b..c9f744a56 100644 --- a/tests/integration/fixtures/items.json +++ b/tests/integration/fixtures/items.json @@ -101,6 +101,18 @@ ], "fourth feed": [ { + "status": 2, + "body": "this is a body", + "title": "a title9", + "author": "my author", + "guid": "a title9", + "url": "http://google.de", + "pubDate": 1234, + "lastModified": 1234, + "enclosureMime": "video/mpeg", + "enclosureLink": "http://google.de/web.webm" + }, + { "status": 0, "body": "this is a body", "title": "no folder", @@ -141,4 +153,4 @@ "enclosureLink": "http://google.de/web.webm" } ] -}
\ No newline at end of file +} diff --git a/tests/unit/db/ItemMapperTest.php b/tests/unit/db/ItemMapperTest.php index 8b42aebb8..12597fb46 100644 --- a/tests/unit/db/ItemMapperTest.php +++ b/tests/unit/db/ItemMapperTest.php @@ -166,24 +166,6 @@ class ItemMapperTest extends \OCA\News\Tests\Unit\Db\MapperTestUtility { } - public function testReadFeed(){ - $sql = 'UPDATE `*PREFIX*news_items` ' . - 'SET `status` = `status` & ? ' . - ', `last_modified` = ? ' . - 'WHERE `feed_id` = ? ' . - 'AND `id` <= ? ' . - 'AND EXISTS (' . - 'SELECT * FROM `*PREFIX*news_feeds` ' . - 'WHERE `user_id` = ? ' . - 'AND `id` = ? ) '; - $params = [ - ~StatusFlag::UNREAD, $this->updatedSince, 3, 6, $this->user, 3 - ]; - $this->setMapperResult($sql, $params); - $this->mapper->readFeed(3, 6, $this->updatedSince, $this->user); - } - - public function testFindAllNew(){ $sql = 'AND `items`.`last_modified` >= ? '; $sql = $this->makeSelectQueryStatus($sql, $this->status); @@ -545,4 +527,4 @@ class ItemMapperTest extends \OCA\News\Tests\Unit\Db\MapperTestUtility { } -}
\ No newline at end of file +} |