|
|
|
@ -16,13 +16,18 @@
|
|
|
|
|
|
|
|
|
|
package com.google.samples.apps.nowinandroid.core.datastore
|
|
|
|
|
|
|
|
|
|
import androidx.datastore.core.DataStore
|
|
|
|
|
import androidx.datastore.core.IOException
|
|
|
|
|
import com.google.samples.apps.nowinandroid.core.datastore.test.InMemoryDataStore
|
|
|
|
|
import kotlinx.coroutines.flow.Flow
|
|
|
|
|
import kotlinx.coroutines.flow.first
|
|
|
|
|
import kotlinx.coroutines.flow.flow
|
|
|
|
|
import kotlinx.coroutines.test.TestScope
|
|
|
|
|
import kotlinx.coroutines.test.UnconfinedTestDispatcher
|
|
|
|
|
import kotlinx.coroutines.test.runTest
|
|
|
|
|
import org.junit.Before
|
|
|
|
|
import org.junit.Test
|
|
|
|
|
import kotlin.test.assertEquals
|
|
|
|
|
import kotlin.test.assertFalse
|
|
|
|
|
import kotlin.test.assertTrue
|
|
|
|
|
|
|
|
|
@ -32,11 +37,34 @@ class NiaPreferencesDataSourceTest {
|
|
|
|
|
|
|
|
|
|
private lateinit var subject: NiaPreferencesDataSource
|
|
|
|
|
|
|
|
|
|
// A DataStore implementation that throws an IOException when accessed
|
|
|
|
|
private val ioExceptionThrowingDataStore = object : DataStore<UserPreferences> {
|
|
|
|
|
override val data: Flow<UserPreferences>
|
|
|
|
|
get() = flow { throw IOException("Failed to read proto") }
|
|
|
|
|
|
|
|
|
|
override suspend fun updateData(transform: suspend (t: UserPreferences) -> UserPreferences): UserPreferences {
|
|
|
|
|
throw Exception("Not needed for this test")
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Before
|
|
|
|
|
fun setup() {
|
|
|
|
|
subject = NiaPreferencesDataSource(InMemoryDataStore(UserPreferences.getDefaultInstance()))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
fun userData_emitDefault_whenDataStoreThrowsIOException() =
|
|
|
|
|
testScope.runTest {
|
|
|
|
|
// Given: NiaPreferencesDataSource with ioException throwing datastore
|
|
|
|
|
val dataSource = NiaPreferencesDataSource(ioExceptionThrowingDataStore)
|
|
|
|
|
|
|
|
|
|
// When: Retrieving user data from the data source
|
|
|
|
|
val actualUserData = dataSource.userData.first()
|
|
|
|
|
|
|
|
|
|
// Then: The default user data is returned
|
|
|
|
|
assertEquals(subject.userData.first(), actualUserData)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
fun shouldHideOnboardingIsFalseByDefault() = testScope.runTest {
|
|
|
|
|
assertFalse(subject.userData.first().shouldHideOnboarding)
|
|
|
|
@ -76,6 +104,19 @@ class NiaPreferencesDataSourceTest {
|
|
|
|
|
assertFalse(subject.userData.first().shouldHideOnboarding)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
fun getChangeListVersions_returnsDefault_whenDataStoreThrowsIOException() =
|
|
|
|
|
testScope.runTest {
|
|
|
|
|
// Given: NiaPreferencesDataSource with ioException throwing datastore
|
|
|
|
|
val dataSource = NiaPreferencesDataSource(ioExceptionThrowingDataStore)
|
|
|
|
|
|
|
|
|
|
// When: Retrieving change list versions from the data source
|
|
|
|
|
val actualResult = dataSource.getChangeListVersions()
|
|
|
|
|
|
|
|
|
|
// Then: The default value is returned
|
|
|
|
|
assertEquals(subject.getChangeListVersions(), actualResult)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
fun shouldUseDynamicColorFalseByDefault() = testScope.runTest {
|
|
|
|
|
assertFalse(subject.userData.first().useDynamicColor)
|
|
|
|
|