mirror of https://github.com/readrops/Readrops.git
Fix GetFoldersWithFeeds test
This commit is contained in:
parent
425d20741b
commit
ad13ba99e0
|
@ -10,7 +10,7 @@ import com.readrops.db.entities.Folder
|
||||||
import com.readrops.db.entities.Item
|
import com.readrops.db.entities.Item
|
||||||
import com.readrops.db.entities.account.Account
|
import com.readrops.db.entities.account.Account
|
||||||
import com.readrops.db.entities.account.AccountType
|
import com.readrops.db.entities.account.AccountType
|
||||||
import kotlinx.coroutines.test.StandardTestDispatcher
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.test.runTest
|
import kotlinx.coroutines.test.runTest
|
||||||
import org.joda.time.LocalDateTime
|
import org.joda.time.LocalDateTime
|
||||||
import org.junit.Before
|
import org.junit.Before
|
||||||
|
@ -31,34 +31,48 @@ class GetFoldersWithFeedsTest {
|
||||||
runTest {
|
runTest {
|
||||||
account.id = database.newAccountDao().insert(account).toInt()
|
account.id = database.newAccountDao().insert(account).toInt()
|
||||||
|
|
||||||
|
// inserting 3 folders
|
||||||
repeat(3) { time ->
|
repeat(3) { time ->
|
||||||
database.newFolderDao().insert(Folder(name = "Folder $time", accountId = account.id))
|
database.newFolderDao()
|
||||||
|
.insert(Folder(name = "Folder $time", accountId = account.id))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// inserting 2 feeds, not linked to any folder
|
||||||
repeat(2) { time ->
|
repeat(2) { time ->
|
||||||
database.newFeedDao().insert(Feed(name = "Feed $time", accountId = account.id))
|
database.newFeedDao().insert(Feed(name = "Feed $time", accountId = account.id))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// inserting 2 feeds linked to first folder (Folder 0)
|
||||||
repeat(2) { time ->
|
repeat(2) { time ->
|
||||||
database.newFeedDao().insert(Feed(name = "Feed ${time+2}", folderId = 1, accountId = account.id))
|
database.newFeedDao()
|
||||||
|
.insert(Feed(name = "Feed ${time + 2}", folderId = 1, accountId = account.id))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// inserting 3 items linked to first feed (Feed 0)
|
||||||
repeat(3) { time ->
|
repeat(3) { time ->
|
||||||
database.newItemDao().insert(Item(title = "Item $time", feedId = 1, pubDate = LocalDateTime.now()))
|
database.newItemDao()
|
||||||
|
.insert(Item(title = "Item $time", feedId = 1, pubDate = LocalDateTime.now()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun getFoldersWithFeedsTest() = runTest {
|
fun getFoldersWithFeedsTest() = runTest {
|
||||||
getFoldersWithFeeds = GetFoldersWithFeeds(database, StandardTestDispatcher(testScheduler))
|
getFoldersWithFeeds = GetFoldersWithFeeds(database)
|
||||||
val foldersAndFeeds = getFoldersWithFeeds.get(account.id)
|
val job = launch {
|
||||||
|
getFoldersWithFeeds.get(account.id)
|
||||||
|
.collect { foldersAndFeeds ->
|
||||||
|
|
||||||
assertTrue { foldersAndFeeds.size == 4 }
|
|
||||||
assertTrue { foldersAndFeeds.entries.first().value.size == 2 }
|
|
||||||
assertTrue { foldersAndFeeds.entries.last().key == null }
|
|
||||||
assertTrue { foldersAndFeeds[null]!!.size == 2 }
|
|
||||||
assertTrue { foldersAndFeeds[null]!!.first().unreadCount == 3 }
|
|
||||||
|
|
||||||
|
assertTrue { foldersAndFeeds.size == 4 }
|
||||||
|
assertTrue { foldersAndFeeds.entries.first().value.size == 2 }
|
||||||
|
assertTrue { foldersAndFeeds.entries.last().key == null }
|
||||||
|
assertTrue { foldersAndFeeds[null]!!.size == 2 }
|
||||||
|
assertTrue { foldersAndFeeds[null]!!.first().unreadCount == 3 }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// for an unknown reason, the coroutine must be canceled to stop the test, and I don't really know why
|
||||||
|
job.cancel()
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -21,8 +21,8 @@ abstract class NewFeedDao : NewBaseDao<Feed> {
|
||||||
@Query("Select case When :feedUrl In (Select url from Feed Where account_id = :accountId) Then 1 else 0 end")
|
@Query("Select case When :feedUrl In (Select url from Feed Where account_id = :accountId) Then 1 else 0 end")
|
||||||
abstract suspend fun feedExists(feedUrl: String, accountId: Int): Boolean
|
abstract suspend fun feedExists(feedUrl: String, accountId: Int): Boolean
|
||||||
|
|
||||||
@Query("Select Feed.*, count(*) as unreadCount From Feed Inner Join Item On Feed.id = Item.feed_id " +
|
@Query("Select Feed.*, count(*) as unreadCount From Feed Left Join Item On Feed.id = Item.feed_id " +
|
||||||
"Where Feed.folder_id is Null And Item.read = 0 And Feed.account_id = :accountId Group by Feed.id")
|
"Where Feed.folder_id is Null And (Item.read = 0 OR Item.read is NULL) And Feed.account_id = :accountId Group by Feed.id")
|
||||||
abstract fun selectFeedsWithoutFolder(accountId: Int): Flow<List<FeedWithCount>>
|
abstract fun selectFeedsWithoutFolder(accountId: Int): Flow<List<FeedWithCount>>
|
||||||
|
|
||||||
@Query("Update Feed set name = :feedName, url = :feedUrl, folder_id = :folderId Where id = :feedId")
|
@Query("Update Feed set name = :feedName, url = :feedUrl, folder_id = :folderId Where id = :feedId")
|
||||||
|
|
|
@ -12,7 +12,7 @@ abstract class NewFolderDao : NewBaseDao<Folder> {
|
||||||
@Query("Select Folder.id As folderId, Folder.name as folderName, Feed.id As feedId, Feed.name AS feedName, " +
|
@Query("Select Folder.id As folderId, Folder.name as folderName, Feed.id As feedId, Feed.name AS feedName, " +
|
||||||
"Feed.icon_url As feedIcon, Feed.url as feedUrl, Feed.siteUrl as feedSiteUrl, count(*) As unreadCount, Folder.account_id as accountId " +
|
"Feed.icon_url As feedIcon, Feed.url as feedUrl, Feed.siteUrl as feedSiteUrl, count(*) As unreadCount, Folder.account_id as accountId " +
|
||||||
"From Folder Left Join Feed On Folder.id = Feed.folder_id Left Join Item On Item.feed_id = Feed.id " +
|
"From Folder Left Join Feed On Folder.id = Feed.folder_id Left Join Item On Item.feed_id = Feed.id " +
|
||||||
"Where Feed.folder_id is NULL OR Feed.folder_id is NOT NULL And Item.read = 0 " +
|
"Where Feed.folder_id is NULL OR Feed.folder_id is NOT NULL And (Item.read = 0 OR Item.read is NULL) " +
|
||||||
"And Feed.account_id = :accountId Group By Feed.id, Folder.id Order By Folder.id")
|
"And Feed.account_id = :accountId Group By Feed.id, Folder.id Order By Folder.id")
|
||||||
abstract fun selectFoldersAndFeeds(accountId: Int): Flow<List<FolderWithFeed>>
|
abstract fun selectFoldersAndFeeds(accountId: Int): Flow<List<FolderWithFeed>>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue