Fix sources tests
This commit is contained in:
parent
219cae5d74
commit
d311c2cdeb
@ -171,15 +171,17 @@ class Repository(private val api: SelfossApi, private val appSettingsService: Ap
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
suspend fun getSources(): ArrayList<SelfossModel.Source>? {
|
suspend fun getSources(): ArrayList<SelfossModel.Source> {
|
||||||
return if (isNetworkAvailable()) {
|
return if (isNetworkAvailable()) {
|
||||||
val apiSources = api.sources()
|
val apiSources = api.sources()
|
||||||
if (apiSources.success && apiSources.data != null && (appSettingsService.isItemCachingEnabled() || !appSettingsService.isUpdateSourcesEnabled())) {
|
if (apiSources.success && apiSources.data != null && (appSettingsService.isItemCachingEnabled() || appSettingsService.isUpdateSourcesEnabled())) {
|
||||||
resetDBSourcesWithData(apiSources.data)
|
resetDBSourcesWithData(apiSources.data)
|
||||||
}
|
}
|
||||||
apiSources.data
|
apiSources.data ?: ArrayList()
|
||||||
} else {
|
} else if (appSettingsService.isItemCachingEnabled() || appSettingsService.isUpdateSourcesEnabled()) {
|
||||||
ArrayList(getDBSources().map { it.toView() })
|
ArrayList(getDBSources().map { it.toView() })
|
||||||
|
} else {
|
||||||
|
ArrayList()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ import kotlin.test.*
|
|||||||
|
|
||||||
class RepositoryTest() {
|
class RepositoryTest() {
|
||||||
private val connectivityStatus = mockk<ConnectivityStatus>()
|
private val connectivityStatus = mockk<ConnectivityStatus>()
|
||||||
private val db = mockk<ReaderForSelfossDB>()
|
private val db = mockk<ReaderForSelfossDB>(relaxed = true)
|
||||||
private val appSettingsService = mockk<AppSettingsService>()
|
private val appSettingsService = mockk<AppSettingsService>()
|
||||||
private val api = mockk<SelfossApi>()
|
private val api = mockk<SelfossApi>()
|
||||||
|
|
||||||
@ -466,8 +466,11 @@ class RepositoryTest() {
|
|||||||
fun `get sources`() {
|
fun `get sources`() {
|
||||||
val sources = arrayListOf(SelfossModel.Source(1, "First source", listOf("Test", "second"),"spouts\\rss\\fulltextrss", "", "d8c92cdb1ef119ea85c4b9205c879ca7.png"),
|
val sources = arrayListOf(SelfossModel.Source(1, "First source", listOf("Test", "second"),"spouts\\rss\\fulltextrss", "", "d8c92cdb1ef119ea85c4b9205c879ca7.png"),
|
||||||
SelfossModel.Source(2, "Second source", listOf("second"),"spouts\\rss\\fulltextrss", "", "b3aa8a664d08eb15d6ff1db2fa83e0d9.png"))
|
SelfossModel.Source(2, "Second source", listOf("second"),"spouts\\rss\\fulltextrss", "", "b3aa8a664d08eb15d6ff1db2fa83e0d9.png"))
|
||||||
|
val sourcesDB = listOf<SOURCE>(SOURCE("1", "First DB source", "Test,second","spouts\\rss\\fulltextrss", "", "d8c92cdb1ef119ea85c4b9205c879ca7.png"),
|
||||||
|
SOURCE("2", "Second source", "second","spouts\\rss\\fulltextrss", "", "b3aa8a664d08eb15d6ff1db2fa83e0d9.png"))
|
||||||
|
|
||||||
coEvery { api.sources() } returns SelfossModel.StatusAndData(success = true, data = sources)
|
coEvery { api.sources() } returns SelfossModel.StatusAndData(success = true, data = sources)
|
||||||
|
every { db.sourcesQueries.sources().executeAsList() } returns sourcesDB
|
||||||
val repository = Repository(api, appSettingsService, connectivityStatus, db)
|
val repository = Repository(api, appSettingsService, connectivityStatus, db)
|
||||||
var testSources: List<SelfossModel.Source>? = null
|
var testSources: List<SelfossModel.Source>? = null
|
||||||
runBlocking {
|
runBlocking {
|
||||||
@ -475,57 +478,14 @@ class RepositoryTest() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
assertSame(sources, testSources)
|
assertSame(sources, testSources)
|
||||||
|
assertNotEquals(sourcesDB.map { it.toView() }, testSources)
|
||||||
coVerify(exactly = 1) { api.sources() }
|
coVerify(exactly = 1) { api.sources() }
|
||||||
verify(exactly = 0) { db.sourcesQueries.sources().executeAsList() }
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
fun `get sources without connection`() {
|
|
||||||
val sources = arrayListOf(SelfossModel.Source(1, "First source", listOf("Test", "second"),"spouts\\rss\\fulltextrss", "", "d8c92cdb1ef119ea85c4b9205c879ca7.png"),
|
|
||||||
SelfossModel.Source(2, "Second source", listOf("second"),"spouts\\rss\\fulltextrss", "", "b3aa8a664d08eb15d6ff1db2fa83e0d9.png"))
|
|
||||||
val sourcesDB = listOf<SOURCE>(SOURCE("1", "First source", "Test,second","spouts\\rss\\fulltextrss", "", "d8c92cdb1ef119ea85c4b9205c879ca7.png"),
|
|
||||||
SOURCE("2", "Second source", "second","spouts\\rss\\fulltextrss", "", "b3aa8a664d08eb15d6ff1db2fa83e0d9.png"))
|
|
||||||
|
|
||||||
every { connectivityStatus.isNetworkConnected } returns MutableStateFlow(false)
|
|
||||||
coEvery { api.sources() } returns SelfossModel.StatusAndData(success = true, data = sources)
|
|
||||||
every { db.sourcesQueries.sources().executeAsList() } returns sourcesDB
|
|
||||||
val repository = Repository(api, appSettingsService, connectivityStatus, db)
|
|
||||||
var testSources: List<SelfossModel.Source>? = null
|
|
||||||
runBlocking {
|
|
||||||
testSources = repository.getSources()
|
|
||||||
}
|
|
||||||
|
|
||||||
assertContentEquals(sources, testSources)
|
|
||||||
coVerify(exactly = 0) { api.sources() }
|
|
||||||
verify(atLeast = 1) { db.sourcesQueries.sources().executeAsList() }
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
fun `get sources without connection and items caching disabled`() {
|
|
||||||
val sources = arrayListOf(SelfossModel.Source(1, "First source", listOf("Test", "second"),"spouts\\rss\\fulltextrss", "", "d8c92cdb1ef119ea85c4b9205c879ca7.png"),
|
|
||||||
SelfossModel.Source(2, "Second source", listOf("second"),"spouts\\rss\\fulltextrss", "", "b3aa8a664d08eb15d6ff1db2fa83e0d9.png"))
|
|
||||||
val sourcesDB = listOf<SOURCE>(SOURCE("1", "First source", "Test,second","spouts\\rss\\fulltextrss", "", "d8c92cdb1ef119ea85c4b9205c879ca7.png"),
|
|
||||||
SOURCE("2", "Second source", "second","spouts\\rss\\fulltextrss", "", "b3aa8a664d08eb15d6ff1db2fa83e0d9.png"))
|
|
||||||
|
|
||||||
every { connectivityStatus.isNetworkConnected } returns MutableStateFlow(false)
|
|
||||||
every { appSettingsService.isItemCachingEnabled() } returns false
|
|
||||||
coEvery { api.sources() } returns SelfossModel.StatusAndData(success = true, data = sources)
|
|
||||||
every { db.sourcesQueries.sources().executeAsList() } returns sourcesDB
|
|
||||||
val repository = Repository(api, appSettingsService, connectivityStatus, db)
|
|
||||||
var testSources: List<SelfossModel.Source>? = null
|
|
||||||
runBlocking {
|
|
||||||
testSources = repository.getSources()
|
|
||||||
}
|
|
||||||
|
|
||||||
assertSame(null, testSources)
|
|
||||||
coVerify(exactly = 0) { api.sources() }
|
|
||||||
verify(exactly = 0) { db.sourcesQueries.sources().executeAsList() }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `get sources with sources update disabled`() {
|
fun `get sources with sources update disabled`() {
|
||||||
val sources = arrayListOf(SelfossModel.Source(1, "First source", listOf("Test", "second"),"spouts\\rss\\fulltextrss", "", "d8c92cdb1ef119ea85c4b9205c879ca7.png"),
|
val sources = arrayListOf(SelfossModel.Source(1, "First source", listOf("Test", "second"),"spouts\\rss\\fulltextrss", "", "d8c92cdb1ef119ea85c4b9205c879ca7.png"),
|
||||||
SelfossModel.Source(2, "Second source", listOf("second"),"spouts\\rss\\fulltextrss", "", "b3aa8a664d08eb15d6ff1db2fa83e0d9.png"))
|
SelfossModel.Source(2, "Second DB source", listOf("second"),"spouts\\rss\\fulltextrss", "", "b3aa8a664d08eb15d6ff1db2fa83e0d9.png"))
|
||||||
val sourcesDB = listOf<SOURCE>(SOURCE("1", "First source", "Test,second","spouts\\rss\\fulltextrss", "", "d8c92cdb1ef119ea85c4b9205c879ca7.png"),
|
val sourcesDB = listOf<SOURCE>(SOURCE("1", "First source", "Test,second","spouts\\rss\\fulltextrss", "", "d8c92cdb1ef119ea85c4b9205c879ca7.png"),
|
||||||
SOURCE("2", "Second source", "second","spouts\\rss\\fulltextrss", "", "b3aa8a664d08eb15d6ff1db2fa83e0d9.png"))
|
SOURCE("2", "Second source", "second","spouts\\rss\\fulltextrss", "", "b3aa8a664d08eb15d6ff1db2fa83e0d9.png"))
|
||||||
|
|
||||||
@ -536,10 +496,13 @@ class RepositoryTest() {
|
|||||||
var testSources: List<SelfossModel.Source>? = null
|
var testSources: List<SelfossModel.Source>? = null
|
||||||
runBlocking {
|
runBlocking {
|
||||||
testSources = repository.getSources()
|
testSources = repository.getSources()
|
||||||
|
// Sources will be fetched from the database on the second call, thus testSources != sources
|
||||||
|
testSources = repository.getSources()
|
||||||
}
|
}
|
||||||
|
|
||||||
assertContentEquals(sources, testSources)
|
assertNotSame(sources, testSources)
|
||||||
coVerify(exactly = 0) { api.sources() }
|
assertContentEquals(sourcesDB.map { it.toView() }, testSources)
|
||||||
|
coVerify(exactly = 1) { api.sources() }
|
||||||
verify(atLeast = 1) { db.sourcesQueries.sources().executeAsList() }
|
verify(atLeast = 1) { db.sourcesQueries.sources().executeAsList() }
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -560,7 +523,97 @@ class RepositoryTest() {
|
|||||||
testSources = repository.getSources()
|
testSources = repository.getSources()
|
||||||
}
|
}
|
||||||
|
|
||||||
assertSame(null, testSources)
|
assertSame(sources, testSources)
|
||||||
|
coVerify(exactly = 1) { api.sources() }
|
||||||
|
verify(exactly = 0) { db.sourcesQueries.sources().executeAsList() }
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `get sources without connection`() {
|
||||||
|
val sources = arrayListOf(SelfossModel.Source(1, "First source", listOf("Test", "second"),"spouts\\rss\\fulltextrss", "", "d8c92cdb1ef119ea85c4b9205c879ca7.png"),
|
||||||
|
SelfossModel.Source(2, "Second source", listOf("second"),"spouts\\rss\\fulltextrss", "", "b3aa8a664d08eb15d6ff1db2fa83e0d9.png"))
|
||||||
|
val sourcesDB = listOf<SOURCE>(SOURCE("1", "First DB source", "Test,second","spouts\\rss\\fulltextrss", "", "d8c92cdb1ef119ea85c4b9205c879ca7.png"),
|
||||||
|
SOURCE("2", "Second source", "second","spouts\\rss\\fulltextrss", "", "b3aa8a664d08eb15d6ff1db2fa83e0d9.png"))
|
||||||
|
|
||||||
|
every { connectivityStatus.isNetworkConnected } returns MutableStateFlow(false)
|
||||||
|
coEvery { api.sources() } returns SelfossModel.StatusAndData(success = true, data = sources)
|
||||||
|
every { db.sourcesQueries.sources().executeAsList() } returns sourcesDB
|
||||||
|
val repository = Repository(api, appSettingsService, connectivityStatus, db)
|
||||||
|
var testSources: List<SelfossModel.Source>? = null
|
||||||
|
runBlocking {
|
||||||
|
testSources = repository.getSources()
|
||||||
|
}
|
||||||
|
|
||||||
|
assertContentEquals(sourcesDB.map { it.toView() }, testSources)
|
||||||
|
coVerify(exactly = 0) { api.sources() }
|
||||||
|
verify(atLeast = 1) { db.sourcesQueries.sources().executeAsList() }
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `get sources without connection and items caching disabled`() {
|
||||||
|
val sources = arrayListOf(SelfossModel.Source(1, "First source", listOf("Test", "second"),"spouts\\rss\\fulltextrss", "", "d8c92cdb1ef119ea85c4b9205c879ca7.png"),
|
||||||
|
SelfossModel.Source(2, "Second source", listOf("second"),"spouts\\rss\\fulltextrss", "", "b3aa8a664d08eb15d6ff1db2fa83e0d9.png"))
|
||||||
|
val sourcesDB = listOf<SOURCE>(SOURCE("1", "First DB source", "Test,second","spouts\\rss\\fulltextrss", "", "d8c92cdb1ef119ea85c4b9205c879ca7.png"),
|
||||||
|
SOURCE("2", "Second source", "second","spouts\\rss\\fulltextrss", "", "b3aa8a664d08eb15d6ff1db2fa83e0d9.png"))
|
||||||
|
|
||||||
|
every { connectivityStatus.isNetworkConnected } returns MutableStateFlow(false)
|
||||||
|
every { appSettingsService.isItemCachingEnabled() } returns false
|
||||||
|
every { appSettingsService.isUpdateSourcesEnabled() } returns true
|
||||||
|
coEvery { api.sources() } returns SelfossModel.StatusAndData(success = true, data = sources)
|
||||||
|
every { db.sourcesQueries.sources().executeAsList() } returns sourcesDB
|
||||||
|
val repository = Repository(api, appSettingsService, connectivityStatus, db)
|
||||||
|
var testSources: List<SelfossModel.Source>? = null
|
||||||
|
runBlocking {
|
||||||
|
testSources = repository.getSources()
|
||||||
|
}
|
||||||
|
|
||||||
|
assertContentEquals(sourcesDB.map { it.toView() }, testSources)
|
||||||
|
coVerify(exactly = 0) { api.sources() }
|
||||||
|
verify(atLeast = 1) { db.sourcesQueries.sources().executeAsList() }
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `get sources without connection and sources update disabled`() {
|
||||||
|
val sources = arrayListOf(SelfossModel.Source(1, "First source", listOf("Test", "second"),"spouts\\rss\\fulltextrss", "", "d8c92cdb1ef119ea85c4b9205c879ca7.png"),
|
||||||
|
SelfossModel.Source(2, "Second source", listOf("second"),"spouts\\rss\\fulltextrss", "", "b3aa8a664d08eb15d6ff1db2fa83e0d9.png"))
|
||||||
|
val sourcesDB = listOf<SOURCE>(SOURCE("1", "First DB source", "Test,second","spouts\\rss\\fulltextrss", "", "d8c92cdb1ef119ea85c4b9205c879ca7.png"),
|
||||||
|
SOURCE("2", "Second source", "second","spouts\\rss\\fulltextrss", "", "b3aa8a664d08eb15d6ff1db2fa83e0d9.png"))
|
||||||
|
|
||||||
|
every { connectivityStatus.isNetworkConnected } returns MutableStateFlow(false)
|
||||||
|
every { appSettingsService.isItemCachingEnabled() } returns true
|
||||||
|
every { appSettingsService.isUpdateSourcesEnabled() } returns false
|
||||||
|
coEvery { api.sources() } returns SelfossModel.StatusAndData(success = true, data = sources)
|
||||||
|
every { db.sourcesQueries.sources().executeAsList() } returns sourcesDB
|
||||||
|
val repository = Repository(api, appSettingsService, connectivityStatus, db)
|
||||||
|
var testSources: List<SelfossModel.Source>? = null
|
||||||
|
runBlocking {
|
||||||
|
testSources = repository.getSources()
|
||||||
|
}
|
||||||
|
|
||||||
|
assertContentEquals(sourcesDB.map { it.toView() }, testSources)
|
||||||
|
coVerify(exactly = 0) { api.sources() }
|
||||||
|
verify(atLeast = 1) { db.sourcesQueries.sources().executeAsList() }
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `get sources without connection and items caching and sources update disabled`() {
|
||||||
|
val sources = arrayListOf(SelfossModel.Source(1, "First source", listOf("Test", "second"),"spouts\\rss\\fulltextrss", "", "d8c92cdb1ef119ea85c4b9205c879ca7.png"),
|
||||||
|
SelfossModel.Source(2, "Second source", listOf("second"),"spouts\\rss\\fulltextrss", "", "b3aa8a664d08eb15d6ff1db2fa83e0d9.png"))
|
||||||
|
val sourcesDB = listOf<SOURCE>(SOURCE("1", "First DB source", "Test,second","spouts\\rss\\fulltextrss", "", "d8c92cdb1ef119ea85c4b9205c879ca7.png"),
|
||||||
|
SOURCE("2", "Second source", "second","spouts\\rss\\fulltextrss", "", "b3aa8a664d08eb15d6ff1db2fa83e0d9.png"))
|
||||||
|
|
||||||
|
every { connectivityStatus.isNetworkConnected } returns MutableStateFlow(false)
|
||||||
|
every { appSettingsService.isItemCachingEnabled() } returns false
|
||||||
|
every { appSettingsService.isUpdateSourcesEnabled() } returns false
|
||||||
|
coEvery { api.sources() } returns SelfossModel.StatusAndData(success = true, data = sources)
|
||||||
|
every { db.sourcesQueries.sources().executeAsList() } returns sourcesDB
|
||||||
|
val repository = Repository(api, appSettingsService, connectivityStatus, db)
|
||||||
|
var testSources: List<SelfossModel.Source>? = null
|
||||||
|
runBlocking {
|
||||||
|
testSources = repository.getSources()
|
||||||
|
}
|
||||||
|
|
||||||
|
assertContentEquals(ArrayList(), testSources)
|
||||||
coVerify(exactly = 0) { api.sources() }
|
coVerify(exactly = 0) { api.sources() }
|
||||||
verify(exactly = 0) { db.sourcesQueries.sources().executeAsList() }
|
verify(exactly = 0) { db.sourcesQueries.sources().executeAsList() }
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user