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 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 com.google.samples.apps.nowinandroid.core.datastore.test.InMemoryDataStore
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.UnconfinedTestDispatcher import kotlinx.coroutines.test.UnconfinedTestDispatcher
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
import kotlin.test.assertEquals
import kotlin.test.assertFalse import kotlin.test.assertFalse
import kotlin.test.assertTrue import kotlin.test.assertTrue
@ -32,11 +37,34 @@ class NiaPreferencesDataSourceTest {
private lateinit var subject: NiaPreferencesDataSource 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 @Before
fun setup() { fun setup() {
subject = NiaPreferencesDataSource(InMemoryDataStore(UserPreferences.getDefaultInstance())) 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 @Test
fun shouldHideOnboardingIsFalseByDefault() = testScope.runTest { fun shouldHideOnboardingIsFalseByDefault() = testScope.runTest {
assertFalse(subject.userData.first().shouldHideOnboarding) assertFalse(subject.userData.first().shouldHideOnboarding)
@ -76,6 +104,19 @@ class NiaPreferencesDataSourceTest {
assertFalse(subject.userData.first().shouldHideOnboarding) 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 @Test
fun shouldUseDynamicColorFalseByDefault() = testScope.runTest { fun shouldUseDynamicColorFalseByDefault() = testScope.runTest {
assertFalse(subject.userData.first().useDynamicColor) assertFalse(subject.userData.first().useDynamicColor)

Loading…
Cancel
Save