Improve and fix tests.
This commit is contained in:
committed by
Benoit Marty
parent
b6ec06ebc6
commit
09a6ffc081
@@ -21,6 +21,7 @@ import io.element.android.libraries.architecture.AsyncAction
|
||||
import io.element.android.libraries.architecture.AsyncData
|
||||
import io.element.android.libraries.core.meta.BuildMeta
|
||||
import io.element.android.libraries.core.meta.BuildType
|
||||
import io.element.android.libraries.featureflag.api.Feature
|
||||
import io.element.android.libraries.featureflag.api.FeatureFlags
|
||||
import io.element.android.libraries.featureflag.test.FakeFeature
|
||||
import io.element.android.libraries.featureflag.test.FakeFeatureFlagService
|
||||
@@ -41,15 +42,17 @@ class DeveloperSettingsPresenterTest {
|
||||
|
||||
@Test
|
||||
fun `present - ensures initial states are correct`() = runTest {
|
||||
val availableFeatures = listOf(
|
||||
FakeFeature(
|
||||
key = "feature_1",
|
||||
title = "Feature 1",
|
||||
isInLabs = false,
|
||||
val getAvailableFeaturesResult = lambdaRecorder<Boolean, Boolean, List<Feature>> { _, _ ->
|
||||
listOf(
|
||||
FakeFeature(
|
||||
key = "feature_1",
|
||||
title = "Feature 1",
|
||||
isInLabs = false,
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
val presenter = createDeveloperSettingsPresenter(
|
||||
featureFlagService = FakeFeatureFlagService(providedAvailableFeatures = availableFeatures)
|
||||
featureFlagService = FakeFeatureFlagService(getAvailableFeaturesResult = getAvailableFeaturesResult)
|
||||
)
|
||||
presenter.test {
|
||||
awaitItem().also { state ->
|
||||
@@ -73,6 +76,8 @@ class DeveloperSettingsPresenterTest {
|
||||
awaitItem().also { state ->
|
||||
assertThat(state.cacheSize).isInstanceOf(AsyncData.Success::class.java)
|
||||
}
|
||||
getAvailableFeaturesResult.assertions().isCalledOnce()
|
||||
.with(value(false), value(false))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -203,50 +208,17 @@ class DeveloperSettingsPresenterTest {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `present - won't display features in labs or finished`() = runTest {
|
||||
val availableFeatures = listOf(
|
||||
// Only this feature should be displayed
|
||||
FakeFeature(
|
||||
key = "feature_1",
|
||||
title = "Feature 1",
|
||||
isInLabs = false,
|
||||
),
|
||||
FakeFeature(
|
||||
key = "feature_2",
|
||||
title = "Feature 2",
|
||||
isInLabs = true,
|
||||
),
|
||||
FakeFeature(
|
||||
key = "feature_3",
|
||||
title = "Feature 3",
|
||||
isInLabs = false,
|
||||
isFinished = true,
|
||||
)
|
||||
)
|
||||
|
||||
val presenter = createDeveloperSettingsPresenter(
|
||||
featureFlagService = FakeFeatureFlagService(
|
||||
providedAvailableFeatures = availableFeatures,
|
||||
)
|
||||
)
|
||||
presenter.test {
|
||||
skipItems(2)
|
||||
awaitItem().also { state ->
|
||||
assertThat(state.features).hasSize(1)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun createDeveloperSettingsPresenter(
|
||||
featureFlagService: FakeFeatureFlagService = FakeFeatureFlagService(
|
||||
providedAvailableFeatures = listOf(
|
||||
FakeFeature(
|
||||
key = "feature_1",
|
||||
title = "Feature 1",
|
||||
isInLabs = false,
|
||||
getAvailableFeaturesResult = { _, _ ->
|
||||
listOf(
|
||||
FakeFeature(
|
||||
key = "feature_1",
|
||||
title = "Feature 1",
|
||||
isInLabs = false,
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
),
|
||||
cacheSizeUseCase: FakeComputeCacheSizeUseCase = FakeComputeCacheSizeUseCase(),
|
||||
clearCacheUseCase: FakeClearCacheUseCase = FakeClearCacheUseCase(),
|
||||
|
||||
@@ -15,6 +15,8 @@ import io.element.android.libraries.featureflag.api.FeatureFlags
|
||||
import io.element.android.libraries.featureflag.test.FakeFeature
|
||||
import io.element.android.libraries.featureflag.test.FakeFeatureFlagService
|
||||
import io.element.android.services.toolbox.test.strings.FakeStringProvider
|
||||
import io.element.android.tests.testutils.lambda.lambdaRecorder
|
||||
import io.element.android.tests.testutils.lambda.value
|
||||
import io.element.android.tests.testutils.test
|
||||
import kotlinx.coroutines.test.runTest
|
||||
import org.junit.Test
|
||||
@@ -34,14 +36,19 @@ class LabsPresenterTest {
|
||||
isInLabs = true,
|
||||
)
|
||||
)
|
||||
val getAvailableFeaturesResult = lambdaRecorder<Boolean, Boolean, List<Feature>> { _, _ ->
|
||||
availableFeatures
|
||||
}
|
||||
createLabsPresenter(
|
||||
availableFeatures = availableFeatures,
|
||||
getAvailableFeaturesResult = getAvailableFeaturesResult,
|
||||
).test {
|
||||
skipItems(1)
|
||||
val receivedFeatures = awaitItem().features
|
||||
assertThat(receivedFeatures).hasSize(2)
|
||||
assertThat(receivedFeatures[0].key).isEqualTo(availableFeatures[0].key)
|
||||
assertThat(receivedFeatures[1].key).isEqualTo(availableFeatures[1].key)
|
||||
getAvailableFeaturesResult.assertions().isCalledOnce()
|
||||
.with(value(false), value(true))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,7 +62,7 @@ class LabsPresenterTest {
|
||||
),
|
||||
)
|
||||
createLabsPresenter(
|
||||
availableFeatures = availableFeatures,
|
||||
getAvailableFeaturesResult = { _, _ -> availableFeatures },
|
||||
).test {
|
||||
skipItems(1)
|
||||
val initialItem = awaitItem()
|
||||
@@ -82,7 +89,7 @@ class LabsPresenterTest {
|
||||
|
||||
val clearCacheUseCase = FakeClearCacheUseCase()
|
||||
createLabsPresenter(
|
||||
availableFeatures = availableFeatures,
|
||||
getAvailableFeaturesResult = { _, _ -> availableFeatures },
|
||||
clearCacheUseCase = clearCacheUseCase,
|
||||
).test {
|
||||
skipItems(1)
|
||||
@@ -100,12 +107,12 @@ class LabsPresenterTest {
|
||||
}
|
||||
|
||||
private fun createLabsPresenter(
|
||||
availableFeatures: List<Feature> = emptyList(),
|
||||
getAvailableFeaturesResult: (Boolean, Boolean) -> List<Feature> = { _, _ -> emptyList() },
|
||||
clearCacheUseCase: ClearCacheUseCase = FakeClearCacheUseCase(),
|
||||
): LabsPresenter {
|
||||
return LabsPresenter(
|
||||
stringProvider = FakeStringProvider(),
|
||||
featureFlagService = FakeFeatureFlagService(providedAvailableFeatures = availableFeatures),
|
||||
featureFlagService = FakeFeatureFlagService(getAvailableFeaturesResult = getAvailableFeaturesResult),
|
||||
clearCacheUseCase = clearCacheUseCase,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -189,14 +189,16 @@ class PreferencesRootPresenterTest {
|
||||
fun `present - labs can be shown if any feature flag is in labs and not finished`() = runTest {
|
||||
createPresenter(
|
||||
featureFlagService = FakeFeatureFlagService(
|
||||
providedAvailableFeatures = listOf(
|
||||
FakeFeature(
|
||||
key = "feature_1",
|
||||
title = "Feature 1",
|
||||
isInLabs = true,
|
||||
isFinished = false,
|
||||
getAvailableFeaturesResult = { _, _ ->
|
||||
listOf(
|
||||
FakeFeature(
|
||||
key = "feature_1",
|
||||
title = "Feature 1",
|
||||
isInLabs = true,
|
||||
isFinished = false,
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
),
|
||||
matrixClient = FakeMatrixClient(
|
||||
canDeactivateAccountResult = { true },
|
||||
@@ -212,14 +214,16 @@ class PreferencesRootPresenterTest {
|
||||
fun `present - labs can't be shown if all feature flags in labs are finished`() = runTest {
|
||||
createPresenter(
|
||||
featureFlagService = FakeFeatureFlagService(
|
||||
providedAvailableFeatures = listOf(
|
||||
FakeFeature(
|
||||
key = "feature_1",
|
||||
title = "Feature 1",
|
||||
isInLabs = true,
|
||||
isFinished = true,
|
||||
getAvailableFeaturesResult = { _, _ ->
|
||||
listOf(
|
||||
FakeFeature(
|
||||
key = "feature_1",
|
||||
title = "Feature 1",
|
||||
isInLabs = true,
|
||||
isFinished = true,
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
),
|
||||
matrixClient = FakeMatrixClient(
|
||||
canDeactivateAccountResult = { true },
|
||||
|
||||
@@ -17,7 +17,7 @@ import kotlinx.coroutines.flow.MutableStateFlow
|
||||
class FakeFeatureFlagService(
|
||||
initialState: Map<String, Boolean> = emptyMap(),
|
||||
private val buildMeta: BuildMeta = aBuildMeta(),
|
||||
var providedAvailableFeatures: List<Feature> = emptyList(),
|
||||
private val getAvailableFeaturesResult: (Boolean, Boolean) -> List<Feature> = { _, _ -> emptyList() },
|
||||
) : FeatureFlagService {
|
||||
private val enabledFeatures = initialState
|
||||
.mapValues { MutableStateFlow(it.value) }
|
||||
@@ -37,6 +37,6 @@ class FakeFeatureFlagService(
|
||||
includeFinishFeatures: Boolean,
|
||||
isInLabs: Boolean,
|
||||
): List<Feature> {
|
||||
return providedAvailableFeatures
|
||||
return getAvailableFeaturesResult(includeFinishFeatures, isInLabs)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user