From 87b85409fc44a9ab474b7dd75e9cba2d5cee9f55 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 10 Dec 2025 10:49:16 +0100 Subject: [PATCH] Test cleanup --- .../impl/DefaultPermissionsPresenterTest.kt | 203 +++++++----------- 1 file changed, 83 insertions(+), 120 deletions(-) diff --git a/libraries/permissions/impl/src/test/kotlin/io/element/android/libraries/permissions/impl/DefaultPermissionsPresenterTest.kt b/libraries/permissions/impl/src/test/kotlin/io/element/android/libraries/permissions/impl/DefaultPermissionsPresenterTest.kt index 6036652748..e15a8a5a77 100644 --- a/libraries/permissions/impl/src/test/kotlin/io/element/android/libraries/permissions/impl/DefaultPermissionsPresenterTest.kt +++ b/libraries/permissions/impl/src/test/kotlin/io/element/android/libraries/permissions/impl/DefaultPermissionsPresenterTest.kt @@ -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 { } 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, +) +