NewsBlur-viq/clients/android/NewsBlur/test/com/newsblur/SessionDataSourceTest.kt
sictiru 48dad79bab
New preference to load next feed on mark read (#15)
New preference to load next feed on mark read. When the option is enabled, a session data source is created to calculate the next feed or folder to load.
2022-10-25 21:09:45 -07:00

165 lines
No EOL
5.4 KiB
Kotlin

package com.newsblur
import com.newsblur.domain.Feed
import com.newsblur.util.FeedSet
import com.newsblur.util.Session
import com.newsblur.util.SessionDataSource
import org.junit.Assert
import org.junit.Test
class SessionDataSourceTest {
private val folders = listOf(
"F1",
"F2",
"F3",
"F4",
"F5",
)
private val folderChildren = listOf(
emptyList(),
listOf(
createFeed("20"),
createFeed("21"),
createFeed("22"),
),
listOf(
createFeed("30"),
),
emptyList(),
listOf(
createFeed("50"),
createFeed("51"),
)
)
@Test
fun `session constructor test`() {
val feedSet = FeedSet.singleFeed("1")
val session = Session(feedSet)
Assert.assertEquals(feedSet, session.feedSet)
Assert.assertNull(session.feed)
Assert.assertNull(session.folderName)
}
@Test
fun `session full constructor test`() {
val feedSet = FeedSet.singleFeed("10")
val feed = createFeed("10")
val session = Session(feedSet, "folderName", feed)
Assert.assertEquals(feedSet, session.feedSet)
Assert.assertEquals("folderName", session.folderName)
Assert.assertEquals(feed, session.feed)
}
@Test
fun `next session for unknown feedId`() {
val session = Session(FeedSet.singleFeed("123"))
val sessionDs = SessionDataSource(session, folders, folderChildren)
Assert.assertNull(sessionDs.getNextSession())
}
@Test
fun `next session for empty folder`() {
val feedSet = FeedSet.singleFeed("123")
val feed = createFeed("123")
val session = Session(feedSet, "F1", feed)
val sessionDs = SessionDataSource(session, folders, folderChildren)
Assert.assertNull(sessionDs.getNextSession())
}
/**
* Expected to return the next [Session] containing feed id 11
* as the second feed in folder F2 after feed id 10
*/
@Test
fun `next session for F2 feedSet`() {
val feedSet = FeedSet.singleFeed("20")
val feed = createFeed("20")
val session = Session(feedSet, "F2", feed)
val sessionDs = SessionDataSource(session, folders, folderChildren)
sessionDs.getNextSession()?.let {
Assert.assertEquals("F2", it.folderName)
Assert.assertEquals("21", it.feed?.feedId)
with(it.feedSet) {
Assert.assertNotNull(this)
Assert.assertTrue(it.feedSet.flatFeedIds.size == 1)
Assert.assertEquals("21", it.feedSet.flatFeedIds.first())
}
} ?: Assert.fail("Next session was null")
}
/**
* Expected to return a null [Session] because feed id 12
* is the last feed id in folder F2
*/
@Test
fun `next session for end of F2 feedSet`() {
val feedSet = FeedSet.singleFeed("22")
val feed = createFeed("22")
val session = Session(feedSet, "F2", feed)
val sessionDs = SessionDataSource(session, folders, folderChildren)
Assert.assertNull(sessionDs.getNextSession())
}
@Test
fun `next session for F2 feedSetFolder`() {
val feedSet = FeedSet.folder("F2", setOf("21"))
val feed = createFeed("21")
val session = Session(feedSet, "F2", feed)
val sessionDs = SessionDataSource(session, folders, folderChildren)
sessionDs.getNextSession()?.let {
Assert.assertNull(it.feed)
Assert.assertEquals("F3", it.folderName)
Assert.assertEquals("F3", it.feedSet.folderName)
Assert.assertEquals("30", it.feedSet.flatFeedIds.firstOrNull())
} ?: Assert.fail("Next session is null for F2 feedSetFolder")
}
/**
* Expected to return folder "F5" because folder "F3"
* doesn't have any feeds
*/
@Test
fun `next session for F3 feedSetFolder`() {
val feedSet = FeedSet.folder("F3", setOf("30"))
val feed = createFeed("30")
val session = Session(feedSet, "F3", feed)
val sessionDs = SessionDataSource(session, folders, folderChildren)
sessionDs.getNextSession()?.let {
Assert.assertNull(it.feed)
Assert.assertEquals("F5", it.folderName)
Assert.assertEquals("F5", it.feedSet.folderName)
Assert.assertEquals("50", it.feedSet.flatFeedIds.firstOrNull())
} ?: Assert.fail("Next session is null for F5 feedSetFolder")
}
/**
* Expected to return session for F1 feedSetFolder
*/
@Test
fun `next session for F5 feedSetFolder`() {
val feedSet = FeedSet.folder("F5", setOf("50"))
val feed = createFeed("50")
val session = Session(feedSet, "F5", feed)
val sessionDs = SessionDataSource(session, folders, folderChildren)
sessionDs.getNextSession()?.let {
Assert.assertNull(it.feed)
Assert.assertEquals("F2", it.folderName)
Assert.assertEquals("F2", it.feedSet.folderName)
Assert.assertEquals(setOf("20", "21", "22"), it.feedSet.flatFeedIds)
} ?: Assert.fail("Next session is null for F5 feedSetFolder")
}
private fun createFeed(id: String) = Feed().apply {
feedId = id
title = "Feed #$id"
}
}