mirror of
https://github.com/viq/NewsBlur.git
synced 2025-08-31 22:20:12 +00:00

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.
165 lines
No EOL
5.4 KiB
Kotlin
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"
|
|
}
|
|
} |