Test cleanup

This commit is contained in:
Benoit Marty
2025-12-10 10:49:16 +01:00
parent 0309b9d4cb
commit 87b85409fc

View File

@@ -10,23 +10,23 @@
package io.element.android.libraries.permissions.impl
import app.cash.molecule.RecompositionMode
import app.cash.molecule.moleculeFlow
import app.cash.turbine.test
import com.google.accompanist.permissions.ExperimentalPermissionsApi
import com.google.accompanist.permissions.PermissionStatus
import com.google.common.truth.Truth.assertThat
import io.element.android.libraries.permissions.api.PermissionsEvents
import io.element.android.libraries.permissions.api.PermissionsStore
import io.element.android.libraries.permissions.impl.action.FakePermissionActions
import io.element.android.libraries.permissions.impl.action.PermissionActions
import io.element.android.libraries.permissions.test.InMemoryPermissionsStore
import io.element.android.tests.testutils.WarmUpRule
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.Rule
import org.junit.Test
const val A_PERMISSION = "A_PERMISSION"
private const val A_PERMISSION = "A_PERMISSION"
class DefaultPermissionsPresenterTest {
@get:Rule
@@ -34,24 +34,8 @@ class DefaultPermissionsPresenterTest {
@Test
fun `present - initial state`() = runTest {
val permissionsStore = InMemoryPermissionsStore()
val permissionState = FakePermissionState(
A_PERMISSION,
PermissionStatus.Granted
)
val permissionStateProvider =
FakeComposablePermissionStateProvider(
permissionState
)
val presenter = DefaultPermissionsPresenter(
A_PERMISSION,
permissionsStore,
permissionStateProvider,
FakePermissionActions(),
)
moleculeFlow(RecompositionMode.Immediate) {
presenter.present()
}.test {
val presenter = createPresenter()
presenter.test {
val initialState = awaitItem()
assertThat(initialState.permission).isEqualTo(A_PERMISSION)
assertThat(initialState.permissionGranted).isTrue()
@@ -68,23 +52,16 @@ class DefaultPermissionsPresenterTest {
permissionDenied = true,
permissionAsked = true
)
val permissionState = FakePermissionState(
A_PERMISSION,
PermissionStatus.Denied(shouldShowRationale = false)
val permissionStateProvider = FakeComposablePermissionStateProvider(
permissionState = aFakePermissionState(
initialStatus = PermissionStatus.Denied(shouldShowRationale = false)
),
)
val permissionStateProvider =
FakeComposablePermissionStateProvider(
permissionState
)
val presenter = DefaultPermissionsPresenter(
A_PERMISSION,
permissionsStore,
permissionStateProvider,
FakePermissionActions(),
val presenter = createPresenter(
permissionsStore = permissionsStore,
permissionStateProvider = permissionStateProvider,
)
moleculeFlow(RecompositionMode.Immediate) {
presenter.present()
}.test {
presenter.test {
skipItems(1)
val initialState = awaitItem()
initialState.eventSink.invoke(PermissionsEvents.RequestPermissions)
@@ -101,27 +78,21 @@ class DefaultPermissionsPresenterTest {
permissionDenied = true,
permissionAsked = true
)
val permissionState = FakePermissionState(
A_PERMISSION,
PermissionStatus.Denied(shouldShowRationale = false)
val permissionStateProvider = FakeComposablePermissionStateProvider(
permissionState = aFakePermissionState(
initialStatus = PermissionStatus.Denied(shouldShowRationale = false),
),
)
val permissionStateProvider =
FakeComposablePermissionStateProvider(
permissionState
)
val openSettingsAction = lambdaRecorder<String, Unit> { }
val permissionActions = FakePermissionActions(
openSettingsAction = openSettingsAction,
)
val presenter = DefaultPermissionsPresenter(
A_PERMISSION,
permissionsStore,
permissionStateProvider,
permissionActions,
val presenter = createPresenter(
permissionsStore = permissionsStore,
permissionStateProvider = permissionStateProvider,
permissionActions = permissionActions,
)
moleculeFlow(RecompositionMode.Immediate) {
presenter.present()
}.test {
presenter.test {
skipItems(1)
val initialState = awaitItem()
initialState.eventSink.invoke(PermissionsEvents.RequestPermissions)
@@ -136,24 +107,16 @@ class DefaultPermissionsPresenterTest {
@Test
fun `present - user does not grant permission`() = runTest {
val permissionsStore = InMemoryPermissionsStore()
val permissionState = FakePermissionState(
A_PERMISSION,
PermissionStatus.Denied(shouldShowRationale = false)
val permissionState = aFakePermissionState(
initialStatus = PermissionStatus.Denied(shouldShowRationale = false)
)
val permissionStateProvider =
FakeComposablePermissionStateProvider(
permissionState
)
val presenter = DefaultPermissionsPresenter(
A_PERMISSION,
permissionsStore,
permissionStateProvider,
FakePermissionActions(),
val permissionStateProvider = FakeComposablePermissionStateProvider(
permissionState = permissionState,
)
moleculeFlow(RecompositionMode.Immediate) {
presenter.present()
}.test {
val presenter = createPresenter(
permissionStateProvider = permissionStateProvider,
)
presenter.test {
val initialState = awaitItem()
assertThat(initialState.showDialog).isFalse()
initialState.eventSink.invoke(PermissionsEvents.RequestPermissions)
@@ -171,24 +134,16 @@ class DefaultPermissionsPresenterTest {
@Test
fun `present - user does not grant permission second time`() = runTest {
val permissionsStore = InMemoryPermissionsStore()
val permissionState = FakePermissionState(
A_PERMISSION,
PermissionStatus.Denied(shouldShowRationale = true)
val permissionState = aFakePermissionState(
initialStatus = PermissionStatus.Denied(shouldShowRationale = true)
)
val permissionStateProvider =
FakeComposablePermissionStateProvider(
permissionState
)
val presenter = DefaultPermissionsPresenter(
A_PERMISSION,
permissionsStore,
permissionStateProvider,
FakePermissionActions(),
val permissionStateProvider = FakeComposablePermissionStateProvider(
permissionState = permissionState,
)
moleculeFlow(RecompositionMode.Immediate) {
presenter.present()
}.test {
val presenter = createPresenter(
permissionStateProvider = permissionStateProvider,
)
presenter.test {
val initialState = awaitItem()
assertThat(initialState.showDialog).isFalse()
initialState.eventSink.invoke(PermissionsEvents.RequestPermissions)
@@ -206,28 +161,21 @@ class DefaultPermissionsPresenterTest {
@Test
fun `present - user does not grant permission third time`() = runTest {
val permissionsStore =
InMemoryPermissionsStore(
permissionDenied = true,
permissionAsked = true
)
val permissionState = FakePermissionState(
A_PERMISSION,
PermissionStatus.Denied(shouldShowRationale = false)
val permissionsStore = InMemoryPermissionsStore(
permissionDenied = true,
permissionAsked = true,
)
val permissionStateProvider =
FakeComposablePermissionStateProvider(
permissionState
)
val presenter = DefaultPermissionsPresenter(
A_PERMISSION,
permissionsStore,
permissionStateProvider,
FakePermissionActions(),
val permissionState = aFakePermissionState(
initialStatus = PermissionStatus.Denied(shouldShowRationale = false),
)
moleculeFlow(RecompositionMode.Immediate) {
presenter.present()
}.test {
val permissionStateProvider = FakeComposablePermissionStateProvider(
permissionState = permissionState,
)
val presenter = createPresenter(
permissionsStore = permissionsStore,
permissionStateProvider = permissionStateProvider,
)
presenter.test {
skipItems(1)
val initialState = awaitItem()
initialState.eventSink.invoke(PermissionsEvents.RequestPermissions)
@@ -241,24 +189,16 @@ class DefaultPermissionsPresenterTest {
@Test
fun `present - user grants permission`() = runTest {
val permissionsStore = InMemoryPermissionsStore()
val permissionState = FakePermissionState(
A_PERMISSION,
PermissionStatus.Denied(shouldShowRationale = false)
val permissionState = aFakePermissionState(
initialStatus = PermissionStatus.Denied(shouldShowRationale = false)
)
val permissionStateProvider =
FakeComposablePermissionStateProvider(
permissionState
)
val presenter = DefaultPermissionsPresenter(
A_PERMISSION,
permissionsStore,
permissionStateProvider,
FakePermissionActions(),
val permissionStateProvider = FakeComposablePermissionStateProvider(
permissionState = permissionState,
)
moleculeFlow(RecompositionMode.Immediate) {
presenter.present()
}.test {
val presenter = createPresenter(
permissionStateProvider = permissionStateProvider,
)
presenter.test {
val initialState = awaitItem()
assertThat(initialState.showDialog).isFalse()
initialState.eventSink.invoke(PermissionsEvents.RequestPermissions)
@@ -274,3 +214,26 @@ class DefaultPermissionsPresenterTest {
}
}
}
private fun createPresenter(
permission: String = A_PERMISSION,
permissionsStore: PermissionsStore = InMemoryPermissionsStore(),
permissionStateProvider: ComposablePermissionStateProvider = FakeComposablePermissionStateProvider(
permissionState = aFakePermissionState(),
),
permissionActions: PermissionActions = FakePermissionActions(),
) = DefaultPermissionsPresenter(
permission = permission,
permissionsStore = permissionsStore,
composablePermissionStateProvider = permissionStateProvider,
permissionActions = permissionActions,
)
private fun aFakePermissionState(
permission: String = A_PERMISSION,
initialStatus: PermissionStatus = PermissionStatus.Granted,
) = FakePermissionState(
permission = permission,
initialStatus = initialStatus,
)