Add some unit tests.

pull/1710/head
Shuvo 9 months ago
parent fe929ac879
commit 46d8cb9eb7

@ -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)

Loading…
Cancel
Save