summaryrefslogtreecommitdiffstats
path: root/tests/Unit/Db/ItemMapperTest.php
diff options
context:
space:
mode:
authorMarco Nassabain <marco.nassabain@hotmail.com>2021-02-27 22:17:33 +0100
committerSean Molenaar <SMillerDev@users.noreply.github.com>2021-04-08 22:31:21 +0200
commitcbe1ca6b4ddf78e6806f9262ddf6f9e6ea5849fe (patch)
treea7eee0dfcf859c24ad838349d27019038ef68277 /tests/Unit/Db/ItemMapperTest.php
parent5c359a8d42020d58c57f55980bb547b38216c379 (diff)
✅ ItemMapperTest: test findAllSharedWithUser func
- testFindAllSharedWithUser - testFindAllSharedWithUserHideRead - testFindAllSharedWithUserSearch Signed-off-by: Marco Nassabain <marco.nassabain@hotmail.com>
Diffstat (limited to 'tests/Unit/Db/ItemMapperTest.php')
-rw-r--r--tests/Unit/Db/ItemMapperTest.php1501
1 files changed, 1501 insertions, 0 deletions
diff --git a/tests/Unit/Db/ItemMapperTest.php b/tests/Unit/Db/ItemMapperTest.php
index 5cb42c3fa..2fa737a85 100644
--- a/tests/Unit/Db/ItemMapperTest.php
+++ b/tests/Unit/Db/ItemMapperTest.php
@@ -472,6 +472,1507 @@ class ItemMapperTest extends MapperTestUtility
$this->assertEquals(Item::fromRow(['id' => 4]), $result);
}
+ public function testFindAllInFeedAfter()
+ {
+ $this->db->expects($this->once())
+ ->method('getQueryBuilder')
+ ->willReturn($this->builder);
+
+ $this->builder->expects($this->once())
+ ->method('select')
+ ->with('items.*')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('from')
+ ->with('news_items', 'items')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('innerJoin')
+ ->with('items', 'news_feeds', 'feeds', 'items.feed_id = feeds.id')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->exactly(3))
+ ->method('andWhere')
+ ->withConsecutive(
+ ['items.last_modified >= :updatedSince'],
+ ['feeds.user_id = :userId'],
+ ['feeds.id = :feedId']
+ )
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->exactly(1))
+ ->method('setParameters')
+ ->with([
+ 'updatedSince' => 1610903351,
+ 'feedId' => 4,
+ 'userId' => 'jack',
+ ])
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('orderBy')
+ ->with('items.last_modified', 'DESC')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('addOrderBy')
+ ->with('items.id', 'DESC')
+ ->willReturnSelf();
+
+ $this->builder->expects($this->once())
+ ->method('execute')
+ ->will($this->returnValue($this->cursor));
+
+ $this->cursor->expects($this->exactly(2))
+ ->method('fetch')
+ ->willReturnOnConsecutiveCalls(
+ ['id' => 4],
+ false
+ );
+
+ $result = $this->class->findAllInFeedAfter('jack', 4, 1610903351, false);
+ $this->assertEquals([Item::fromRow(['id' => 4])], $result);
+ }
+
+ public function testFindAllInFeedAfterHideRead()
+ {
+ $this->db->expects($this->once())
+ ->method('getQueryBuilder')
+ ->willReturn($this->builder);
+
+ $this->builder->expects($this->once())
+ ->method('select')
+ ->with('items.*')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('from')
+ ->with('news_items', 'items')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('innerJoin')
+ ->with('items', 'news_feeds', 'feeds', 'items.feed_id = feeds.id')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->exactly(4))
+ ->method('andWhere')
+ ->withConsecutive(
+ ['items.last_modified >= :updatedSince'],
+ ['feeds.user_id = :userId'],
+ ['feeds.id = :feedId'],
+ ['items.unread = 1']
+ )
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->exactly(1))
+ ->method('setParameters')
+ ->with([
+ 'updatedSince' => 1610903351,
+ 'feedId' => 4,
+ 'userId' => 'jack',
+ ])
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('orderBy')
+ ->with('items.last_modified', 'DESC')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('addOrderBy')
+ ->with('items.id', 'DESC')
+ ->willReturnSelf();
+
+ $this->builder->expects($this->once())
+ ->method('execute')
+ ->will($this->returnValue($this->cursor));
+
+ $this->cursor->expects($this->exactly(2))
+ ->method('fetch')
+ ->willReturnOnConsecutiveCalls(
+ ['id' => 4],
+ false
+ );
+
+ $result = $this->class->findAllInFeedAfter('jack', 4, 1610903351, true);
+ $this->assertEquals([Item::fromRow(['id' => 4])], $result);
+ }
+
+ public function testFindAllInFolderAfter()
+ {
+ $this->db->expects($this->once())
+ ->method('getQueryBuilder')
+ ->willReturn($this->builder);
+
+ $this->builder->expects($this->once())
+ ->method('select')
+ ->with('items.*')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('from')
+ ->with('news_items', 'items')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->exactly(2))
+ ->method('innerJoin')
+ ->withConsecutive(
+ ['items', 'news_feeds', 'feeds', 'items.feed_id = feeds.id'],
+ ['feeds', 'news_folders', 'folders', 'feeds.folder_id = folders.id']
+ )
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->exactly(3))
+ ->method('andWhere')
+ ->withConsecutive(
+ ['items.last_modified >= :updatedSince'],
+ ['feeds.user_id = :userId'],
+ ['folders.id = :folderId']
+ )
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->exactly(1))
+ ->method('setParameters')
+ ->with([
+ 'updatedSince' => 1610903351,
+ 'folderId' => 4,
+ 'userId' => 'jack',
+ ])
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('orderBy')
+ ->with('items.last_modified', 'DESC')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('addOrderBy')
+ ->with('items.id', 'DESC')
+ ->willReturnSelf();
+
+ $this->builder->expects($this->once())
+ ->method('execute')
+ ->will($this->returnValue($this->cursor));
+
+ $this->cursor->expects($this->exactly(2))
+ ->method('fetch')
+ ->willReturnOnConsecutiveCalls(
+ ['id' => 4],
+ false
+ );
+
+ $result = $this->class->findAllInFolderAfter('jack', 4, 1610903351, false);
+ $this->assertEquals([Item::fromRow(['id' => 4])], $result);
+ }
+
+ public function testFindAllInFolderAfterHideRead()
+ {
+ $this->db->expects($this->once())
+ ->method('getQueryBuilder')
+ ->willReturn($this->builder);
+
+ $this->builder->expects($this->once())
+ ->method('select')
+ ->with('items.*')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('from')
+ ->with('news_items', 'items')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->exactly(2))
+ ->method('innerJoin')
+ ->withConsecutive(
+ ['items', 'news_feeds', 'feeds', 'items.feed_id = feeds.id'],
+ ['feeds', 'news_folders', 'folders', 'feeds.folder_id = folders.id']
+ )
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->exactly(4))
+ ->method('andWhere')
+ ->withConsecutive(
+ ['items.last_modified >= :updatedSince'],
+ ['feeds.user_id = :userId'],
+ ['folders.id = :folderId'],
+ ['items.unread = 1']
+ )
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->exactly(1))
+ ->method('setParameters')
+ ->with([
+ 'updatedSince' => 1610903351,
+ 'folderId' => 4,
+ 'userId' => 'jack',
+ ])
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('orderBy')
+ ->with('items.last_modified', 'DESC')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('addOrderBy')
+ ->with('items.id', 'DESC')
+ ->willReturnSelf();
+
+ $this->builder->expects($this->once())
+ ->method('execute')
+ ->will($this->returnValue($this->cursor));
+
+ $this->cursor->expects($this->exactly(2))
+ ->method('fetch')
+ ->willReturnOnConsecutiveCalls(
+ ['id' => 4],
+ false
+ );
+
+ $result = $this->class->findAllInFolderAfter('jack', 4, 1610903351, true);
+ $this->assertEquals([Item::fromRow(['id' => 4])], $result);
+ }
+
+ public function testFindAllAfterUnread()
+ {
+ $this->db->expects($this->once())
+ ->method('getQueryBuilder')
+ ->willReturn($this->builder);
+
+ $this->builder->expects($this->once())
+ ->method('select')
+ ->with('items.*')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('from')
+ ->with('news_items', 'items')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->exactly(1))
+ ->method('innerJoin')
+ ->withConsecutive(['items', 'news_feeds', 'feeds', 'items.feed_id = feeds.id'])
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->exactly(3))
+ ->method('andWhere')
+ ->withConsecutive(
+ ['items.last_modified >= :updatedSince'],
+ ['feeds.user_id = :userId'],
+ ['items.unread = 1']
+ )
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->exactly(1))
+ ->method('setParameters')
+ ->with([
+ 'updatedSince' => 1610903351,
+ 'userId' => 'jack',
+ ])
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('orderBy')
+ ->with('items.last_modified', 'DESC')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('addOrderBy')
+ ->with('items.id', 'DESC')
+ ->willReturnSelf();
+
+ $this->builder->expects($this->once())
+ ->method('execute')
+ ->will($this->returnValue($this->cursor));
+
+ $this->cursor->expects($this->exactly(2))
+ ->method('fetch')
+ ->willReturnOnConsecutiveCalls(
+ ['id' => 4],
+ false
+ );
+
+ $result = $this->class->findAllAfter('jack', 6, 1610903351);
+ $this->assertEquals([Item::fromRow(['id' => 4])], $result);
+ }
+
+ public function testFindAllAfterStarred()
+ {
+ $this->db->expects($this->once())
+ ->method('getQueryBuilder')
+ ->willReturn($this->builder);
+
+ $this->builder->expects($this->once())
+ ->method('select')
+ ->with('items.*')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('from')
+ ->with('news_items', 'items')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->exactly(1))
+ ->method('innerJoin')
+ ->withConsecutive(['items', 'news_feeds', 'feeds', 'items.feed_id = feeds.id'])
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->exactly(3))
+ ->method('andWhere')
+ ->withConsecutive(
+ ['items.last_modified >= :updatedSince'],
+ ['feeds.user_id = :userId'],
+ ['items.starred = 1']
+ )
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->exactly(1))
+ ->method('setParameters')
+ ->with([
+ 'updatedSince' => 1610903351,
+ 'userId' => 'jack',
+ ])
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('orderBy')
+ ->with('items.last_modified', 'DESC')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('addOrderBy')
+ ->with('items.id', 'DESC')
+ ->willReturnSelf();
+
+ $this->builder->expects($this->once())
+ ->method('execute')
+ ->will($this->returnValue($this->cursor));
+
+ $this->cursor->expects($this->exactly(2))
+ ->method('fetch')
+ ->willReturnOnConsecutiveCalls(
+ ['id' => 4],
+ false
+ );
+
+ $result = $this->class->findAllAfter('jack', 2, 1610903351);
+ $this->assertEquals([Item::fromRow(['id' => 4])], $result);
+ }
+
+ public function testFindAllAfterInvalid()
+ {
+ $this->expectException(ServiceValidationException::class);
+ $this->expectExceptionMessage('Unexpected Feed type in call');
+
+ $this->db->expects($this->once())
+ ->method('getQueryBuilder')
+ ->willReturn($this->builder);
+
+ $this->builder->expects($this->once())
+ ->method('select')
+ ->with('items.*')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('from')
+ ->with('news_items', 'items')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->exactly(1))
+ ->method('innerJoin')
+ ->withConsecutive(['items', 'news_feeds', 'feeds', 'items.feed_id = feeds.id'])
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->exactly(2))
+ ->method('andWhere')
+ ->withConsecutive(
+ ['items.last_modified >= :updatedSince'],
+ ['feeds.user_id = :userId']
+ )
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->exactly(1))
+ ->method('setParameters')
+ ->with([
+ 'updatedSince' => 1610903351,
+ 'userId' => 'jack',
+ ])
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('orderBy')
+ ->with('items.last_modified', 'DESC')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('addOrderBy')
+ ->with('items.id', 'DESC')
+ ->willReturnSelf();
+
+ $this->builder->expects($this->never())
+ ->method('execute')
+ ->will($this->returnValue($this->cursor));
+
+ $this->cursor->expects($this->never())
+ ->method('fetch')
+ ->willReturnOnConsecutiveCalls(
+ ['id' => 4],
+ false
+ );
+
+ $result = $this->class->findAllAfter('jack', 232, 1610903351);
+ $this->assertEquals([Item::fromRow(['id' => 4])], $result);
+ }
+
+ public function testFindAllItemsInvalid()
+ {
+ $this->expectException(ServiceValidationException::class);
+ $this->expectExceptionMessage('Unexpected Feed type in call');
+
+ $this->db->expects($this->once())
+ ->method('getQueryBuilder')
+ ->willReturn($this->builder);
+
+ $this->builder->expects($this->once())
+ ->method('select')
+ ->with('items.*')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('from')
+ ->with('news_items', 'items')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->exactly(1))
+ ->method('innerJoin')
+ ->withConsecutive(['items', 'news_feeds', 'feeds', 'items.feed_id = feeds.id'])
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->exactly(1))
+ ->method('andWhere')
+ ->withConsecutive(
+ ['feeds.user_id = :userId']
+ )
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->exactly(1))
+ ->method('setParameter')
+ ->with('userId', 'jack')
+ ->will($this->returnSelf());
+
+
+ $this->builder->expects($this->exactly(1))
+ ->method('setMaxResults')
+ ->with(10)
+ ->will($this->returnSelf());
+
+
+ $this->builder->expects($this->exactly(1))
+ ->method('setFirstResult')
+ ->with(10)
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('orderBy')
+ ->with('items.last_modified', 'DESC')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('addOrderBy')
+ ->with('items.id', 'DESC')
+ ->willReturnSelf();
+
+ $this->builder->expects($this->never())
+ ->method('execute')
+ ->will($this->returnValue($this->cursor));
+
+ $this->cursor->expects($this->never())
+ ->method('fetch')
+ ->willReturnOnConsecutiveCalls(
+ ['id' => 4],
+ false
+ );
+
+ $this->class->findAllItems('jack', 232, 10, 10, false, []);
+ }
+
+ public function testFindAllItemsUnread()
+ {
+ $this->db->expects($this->once())
+ ->method('getQueryBuilder')
+ ->willReturn($this->builder);
+
+ $this->builder->expects($this->once())
+ ->method('select')
+ ->with('items.*')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('from')
+ ->with('news_items', 'items')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->exactly(1))
+ ->method('innerJoin')
+ ->withConsecutive(['items', 'news_feeds', 'feeds', 'items.feed_id = feeds.id'])
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->exactly(2))
+ ->method('andWhere')
+ ->withConsecutive(
+ ['feeds.user_id = :userId'],
+ ['items.unread = 1']
+ )
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->exactly(1))
+ ->method('setParameter')
+ ->with('userId', 'jack')
+ ->will($this->returnSelf());
+
+
+ $this->builder->expects($this->exactly(1))
+ ->method('setMaxResults')
+ ->with(10)
+ ->will($this->returnSelf());
+
+
+ $this->builder->expects($this->exactly(1))
+ ->method('setFirstResult')
+ ->with(10)
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('orderBy')
+ ->with('items.last_modified', 'DESC')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('addOrderBy')
+ ->with('items.id', 'DESC')
+ ->willReturnSelf();
+
+ $this->builder->expects($this->exactly(1))
+ ->method('execute')
+ ->will($this->returnValue($this->cursor));
+
+ $this->cursor->expects($this->exactly(2))
+ ->method('fetch')
+ ->willReturnOnConsecutiveCalls(
+ ['id' => 4],
+ false
+ );
+
+ $result = $this->class->findAllItems('jack', 6, 10, 10, false, []);
+ $this->assertEquals([Item::fromRow(['id' => 4])], $result);
+ }
+
+ public function testFindAllItemsStarred()
+ {
+ $this->db->expects($this->once())
+ ->method('getQueryBuilder')
+ ->willReturn($this->builder);
+
+ $this->builder->expects($this->once())
+ ->method('select')
+ ->with('items.*')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('from')
+ ->with('news_items', 'items')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->exactly(1))
+ ->method('innerJoin')
+ ->withConsecutive(['items', 'news_feeds', 'feeds', 'items.feed_id = feeds.id'])
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->exactly(2))
+ ->method('andWhere')
+ ->withConsecutive(
+ ['feeds.user_id = :userId'],
+ ['items.starred = 1']
+ )
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->exactly(1))
+ ->method('setParameter')
+ ->with('userId', 'jack')
+ ->will($this->returnSelf());
+
+
+ $this->builder->expects($this->exactly(1))
+ ->method('setMaxResults')
+ ->with(10)
+ ->will($this->returnSelf());
+
+
+ $this->builder->expects($this->exactly(1))
+ ->method('setFirstResult')
+ ->with(10)
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('orderBy')
+ ->with('items.last_modified', 'DESC')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('addOrderBy')
+ ->with('items.id', 'DESC')
+ ->willReturnSelf();
+
+ $this->builder->expects($this->exactly(1))
+ ->method('execute')
+ ->will($this->returnValue($this->cursor));
+
+ $this->cursor->expects($this->exactly(2))
+ ->method('fetch')
+ ->willReturnOnConsecutiveCalls(
+ ['id' => 4],
+ false
+ );
+
+ $result = $this->class->findAllItems('jack', 2, 10, 10, false, []);
+ $this->assertEquals([Item::fromRow(['id' => 4])], $result);
+ }
+
+ public function testFindAllItemsStarredSearch()
+ {
+ $this->db->expects($this->once())
+ ->method('getQueryBuilder')
+ ->willReturn($this->builder);
+ $this->db->expects($this->exactly(2))
+ ->method('escapeLikeParameter')
+ ->will($this->returnArgument(0));
+
+ $this->builder->expects($this->once())
+ ->method('select')
+ ->with('items.*')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('from')
+ ->with('news_items', 'items')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->exactly(1))
+ ->method('innerJoin')
+ ->withConsecutive(['items', 'news_feeds', 'feeds', 'items.feed_id = feeds.id'])
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->exactly(4))
+ ->method('andWhere')
+ ->withConsecutive(
+ ['feeds.user_id = :userId'],
+ ['items.search_index LIKE :term0'],
+ ['items.search_index LIKE :term1'],
+ ['items.starred = 1']
+ )
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->exactly(3))
+ ->method('setParameter')
+ ->withConsecutive(['userId', 'jack'], ['term0', '%key%'], ['term1', '%word%'])
+ ->will($this->returnSelf());
+
+
+ $this->builder->expects($this->exactly(1))
+ ->method('setMaxResults')
+ ->with(10)
+ ->will($this->returnSelf());
+
+
+ $this->builder->expects($this->exactly(1))
+ ->method('setFirstResult')
+ ->with(10)
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('orderBy')
+ ->with('items.last_modified', 'DESC')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('addOrderBy')
+ ->with('items.id', 'DESC')
+ ->willReturnSelf();
+
+ $this->builder->expects($this->exactly(1))
+ ->method('execute')
+ ->will($this->returnValue($this->cursor));
+
+ $this->cursor->expects($this->exactly(2))
+ ->method('fetch')
+ ->willReturnOnConsecutiveCalls(
+ ['id' => 4],
+ false
+ );
+
+ $result = $this->class->findAllItems('jack', 2, 10, 10, false, ['key', 'word']);
+ $this->assertEquals([Item::fromRow(['id' => 4])], $result);
+ }
+
+ public function testFindAllFeed()
+ {
+ $this->db->expects($this->once())
+ ->method('getQueryBuilder')
+ ->willReturn($this->builder);
+
+ $this->builder->expects($this->once())
+ ->method('select')
+ ->with('items.*')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('from')
+ ->with('news_items', 'items')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->exactly(1))
+ ->method('innerJoin')
+ ->withConsecutive(['items', 'news_feeds', 'feeds', 'items.feed_id = feeds.id'])
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->exactly(2))
+ ->method('andWhere')
+ ->withConsecutive(
+ ['feeds.user_id = :userId'],
+ ['items.feed_id = :feedId']
+ )
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->exactly(2))
+ ->method('setParameter')
+ ->withConsecutive(['userId', 'jack'], ['feedId', 2])
+ ->will($this->returnSelf());
+
+
+ $this->builder->expects($this->exactly(1))
+ ->method('setMaxResults')
+ ->with(10)
+ ->will($this->returnSelf());
+
+
+ $this->builder->expects($this->exactly(1))
+ ->method('setFirstResult')
+ ->with(10)
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('orderBy')
+ ->with('items.last_modified', 'DESC')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('addOrderBy')
+ ->with('items.id', 'DESC')
+ ->willReturnSelf();
+
+ $this->builder->expects($this->exactly(1))
+ ->method('execute')
+ ->will($this->returnValue($this->cursor));
+
+ $this->cursor->expects($this->exactly(2))
+ ->method('fetch')
+ ->willReturnOnConsecutiveCalls(
+ ['id' => 4],
+ false
+ );
+
+ $result = $this->class->findAllFeed('jack', 2, 10, 10, false, false, []);
+ $this->assertEquals([Item::fromRow(['id' => 4])], $result);
+ }
+
+ public function testFindAllFeedHideRead()
+ {
+ $this->db->expects($this->once())
+ ->method('getQueryBuilder')
+ ->willReturn($this->builder);
+
+ $this->builder->expects($this->once())
+ ->method('select')
+ ->with('items.*')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('from')
+ ->with('news_items', 'items')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->exactly(1))
+ ->method('innerJoin')
+ ->withConsecutive(['items', 'news_feeds', 'feeds', 'items.feed_id = feeds.id'])
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->exactly(3))
+ ->method('andWhere')
+ ->withConsecutive(
+ ['feeds.user_id = :userId'],
+ ['items.feed_id = :feedId'],
+ ['items.unread = 1']
+ )
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->exactly(2))
+ ->method('setParameter')
+ ->withConsecutive(['userId', 'jack'], ['feedId', 2])
+ ->will($this->returnSelf());
+
+
+ $this->builder->expects($this->exactly(1))
+ ->method('setMaxResults')
+ ->with(10)
+ ->will($this->returnSelf());
+
+
+ $this->builder->expects($this->exactly(1))
+ ->method('setFirstResult')
+ ->with(10)
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('orderBy')
+ ->with('items.last_modified', 'DESC')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('addOrderBy')
+ ->with('items.id', 'DESC')
+ ->willReturnSelf();
+
+ $this->builder->expects($this->exactly(1))
+ ->method('execute')
+ ->will($this->returnValue($this->cursor));
+
+ $this->cursor->expects($this->exactly(2))
+ ->method('fetch')
+ ->willReturnOnConsecutiveCalls(
+ ['id' => 4],
+ false
+ );
+
+ $result = $this->class->findAllFeed('jack', 2, 10, 10, true, false, []);
+ $this->assertEquals([Item::fromRow(['id' => 4])], $result);
+ }
+
+ public function testFindAllFeedSearch()
+ {
+ $this->db->expects($this->once())
+ ->method('getQueryBuilder')
+ ->willReturn($this->builder);
+ $this->db->expects($this->exactly(2))
+ ->method('escapeLikeParameter')
+ ->will($this->returnArgument(0));
+
+ $this->builder->expects($this->once())
+ ->method('select')
+ ->with('items.*')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->once())
+ ->method('from')
+ ->with('news_items', 'items')
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->exactly(1))
+ ->method('innerJoin')
+ ->withConsecutive(['items', 'news_feeds', 'feeds', 'items.feed_id = feeds.id'])
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->exactly(4))
+ ->method('andWhere')
+ ->withConsecutive(
+ ['feeds.user_id = :userId'],
+ ['items.feed_id = :feedId'],
+ ['items.search_index LIKE :term0'],
+ ['items.search_index LIKE :term1']
+ )
+ ->will($this->returnSelf());
+
+ $this->builder->expects($this->exactly(4))
+ ->method('setParameter')
+ ->withConsecutive(['userId', 'jack'], ['feedId', 2], ['term0', '%key%'], ['term1', '%word%'])
+ ->will($this->returnSelf());
+