Test cleanup
This commit is contained in:
parent
0309b9d4cb
commit
87b85409fc
1 changed files with 83 additions and 120 deletions
|
|
@ -10,23 +10,23 @@
|
||||||
|
|
||||||
package io.element.android.libraries.permissions.impl
|
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.ExperimentalPermissionsApi
|
||||||
import com.google.accompanist.permissions.PermissionStatus
|
import com.google.accompanist.permissions.PermissionStatus
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
import io.element.android.libraries.permissions.api.PermissionsEvents
|
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.FakePermissionActions
|
||||||
|
import io.element.android.libraries.permissions.impl.action.PermissionActions
|
||||||
import io.element.android.libraries.permissions.test.InMemoryPermissionsStore
|
import io.element.android.libraries.permissions.test.InMemoryPermissionsStore
|
||||||
import io.element.android.tests.testutils.WarmUpRule
|
import io.element.android.tests.testutils.WarmUpRule
|
||||||
import io.element.android.tests.testutils.lambda.lambdaRecorder
|
import io.element.android.tests.testutils.lambda.lambdaRecorder
|
||||||
import io.element.android.tests.testutils.lambda.value
|
import io.element.android.tests.testutils.lambda.value
|
||||||
|
import io.element.android.tests.testutils.test
|
||||||
import kotlinx.coroutines.test.runTest
|
import kotlinx.coroutines.test.runTest
|
||||||
import org.junit.Rule
|
import org.junit.Rule
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
|
||||||
const val A_PERMISSION = "A_PERMISSION"
|
private const val A_PERMISSION = "A_PERMISSION"
|
||||||
|
|
||||||
class DefaultPermissionsPresenterTest {
|
class DefaultPermissionsPresenterTest {
|
||||||
@get:Rule
|
@get:Rule
|
||||||
|
|
@ -34,24 +34,8 @@ class DefaultPermissionsPresenterTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `present - initial state`() = runTest {
|
fun `present - initial state`() = runTest {
|
||||||
val permissionsStore = InMemoryPermissionsStore()
|
val presenter = createPresenter()
|
||||||
val permissionState = FakePermissionState(
|
presenter.test {
|
||||||
A_PERMISSION,
|
|
||||||
PermissionStatus.Granted
|
|
||||||
)
|
|
||||||
val permissionStateProvider =
|
|
||||||
FakeComposablePermissionStateProvider(
|
|
||||||
permissionState
|
|
||||||
)
|
|
||||||
val presenter = DefaultPermissionsPresenter(
|
|
||||||
A_PERMISSION,
|
|
||||||
permissionsStore,
|
|
||||||
permissionStateProvider,
|
|
||||||
FakePermissionActions(),
|
|
||||||
)
|
|
||||||
moleculeFlow(RecompositionMode.Immediate) {
|
|
||||||
presenter.present()
|
|
||||||
}.test {
|
|
||||||
val initialState = awaitItem()
|
val initialState = awaitItem()
|
||||||
assertThat(initialState.permission).isEqualTo(A_PERMISSION)
|
assertThat(initialState.permission).isEqualTo(A_PERMISSION)
|
||||||
assertThat(initialState.permissionGranted).isTrue()
|
assertThat(initialState.permissionGranted).isTrue()
|
||||||
|
|
@ -68,23 +52,16 @@ class DefaultPermissionsPresenterTest {
|
||||||
permissionDenied = true,
|
permissionDenied = true,
|
||||||
permissionAsked = true
|
permissionAsked = true
|
||||||
)
|
)
|
||||||
val permissionState = FakePermissionState(
|
val permissionStateProvider = FakeComposablePermissionStateProvider(
|
||||||
A_PERMISSION,
|
permissionState = aFakePermissionState(
|
||||||
PermissionStatus.Denied(shouldShowRationale = false)
|
initialStatus = PermissionStatus.Denied(shouldShowRationale = false)
|
||||||
|
),
|
||||||
)
|
)
|
||||||
val permissionStateProvider =
|
val presenter = createPresenter(
|
||||||
FakeComposablePermissionStateProvider(
|
permissionsStore = permissionsStore,
|
||||||
permissionState
|
permissionStateProvider = permissionStateProvider,
|
||||||
)
|
|
||||||
val presenter = DefaultPermissionsPresenter(
|
|
||||||
A_PERMISSION,
|
|
||||||
permissionsStore,
|
|
||||||
permissionStateProvider,
|
|
||||||
FakePermissionActions(),
|
|
||||||
)
|
)
|
||||||
moleculeFlow(RecompositionMode.Immediate) {
|
presenter.test {
|
||||||
presenter.present()
|
|
||||||
}.test {
|
|
||||||
skipItems(1)
|
skipItems(1)
|
||||||
val initialState = awaitItem()
|
val initialState = awaitItem()
|
||||||
initialState.eventSink.invoke(PermissionsEvents.RequestPermissions)
|
initialState.eventSink.invoke(PermissionsEvents.RequestPermissions)
|
||||||
|
|
@ -101,27 +78,21 @@ class DefaultPermissionsPresenterTest {
|
||||||
permissionDenied = true,
|
permissionDenied = true,
|
||||||
permissionAsked = true
|
permissionAsked = true
|
||||||
)
|
)
|
||||||
val permissionState = FakePermissionState(
|
val permissionStateProvider = FakeComposablePermissionStateProvider(
|
||||||
A_PERMISSION,
|
permissionState = aFakePermissionState(
|
||||||
PermissionStatus.Denied(shouldShowRationale = false)
|
initialStatus = PermissionStatus.Denied(shouldShowRationale = false),
|
||||||
|
),
|
||||||
)
|
)
|
||||||
val permissionStateProvider =
|
|
||||||
FakeComposablePermissionStateProvider(
|
|
||||||
permissionState
|
|
||||||
)
|
|
||||||
val openSettingsAction = lambdaRecorder<String, Unit> { }
|
val openSettingsAction = lambdaRecorder<String, Unit> { }
|
||||||
val permissionActions = FakePermissionActions(
|
val permissionActions = FakePermissionActions(
|
||||||
openSettingsAction = openSettingsAction,
|
openSettingsAction = openSettingsAction,
|
||||||
)
|
)
|
||||||
val presenter = DefaultPermissionsPresenter(
|
val presenter = createPresenter(
|
||||||
A_PERMISSION,
|
permissionsStore = permissionsStore,
|
||||||
permissionsStore,
|
permissionStateProvider = permissionStateProvider,
|
||||||
permissionStateProvider,
|
permissionActions = permissionActions,
|
||||||
permissionActions,
|
|
||||||
)
|
)
|
||||||
moleculeFlow(RecompositionMode.Immediate) {
|
presenter.test {
|
||||||
presenter.present()
|
|
||||||
}.test {
|
|
||||||
skipItems(1)
|
skipItems(1)
|
||||||
val initialState = awaitItem()
|
val initialState = awaitItem()
|
||||||
initialState.eventSink.invoke(PermissionsEvents.RequestPermissions)
|
initialState.eventSink.invoke(PermissionsEvents.RequestPermissions)
|
||||||
|
|
@ -136,24 +107,16 @@ class DefaultPermissionsPresenterTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `present - user does not grant permission`() = runTest {
|
fun `present - user does not grant permission`() = runTest {
|
||||||
val permissionsStore = InMemoryPermissionsStore()
|
val permissionState = aFakePermissionState(
|
||||||
val permissionState = FakePermissionState(
|
initialStatus = PermissionStatus.Denied(shouldShowRationale = false)
|
||||||
A_PERMISSION,
|
|
||||||
PermissionStatus.Denied(shouldShowRationale = false)
|
|
||||||
)
|
)
|
||||||
val permissionStateProvider =
|
val permissionStateProvider = FakeComposablePermissionStateProvider(
|
||||||
FakeComposablePermissionStateProvider(
|
permissionState = permissionState,
|
||||||
permissionState
|
|
||||||
)
|
|
||||||
val presenter = DefaultPermissionsPresenter(
|
|
||||||
A_PERMISSION,
|
|
||||||
permissionsStore,
|
|
||||||
permissionStateProvider,
|
|
||||||
FakePermissionActions(),
|
|
||||||
)
|
)
|
||||||
moleculeFlow(RecompositionMode.Immediate) {
|
val presenter = createPresenter(
|
||||||
presenter.present()
|
permissionStateProvider = permissionStateProvider,
|
||||||
}.test {
|
)
|
||||||
|
presenter.test {
|
||||||
val initialState = awaitItem()
|
val initialState = awaitItem()
|
||||||
assertThat(initialState.showDialog).isFalse()
|
assertThat(initialState.showDialog).isFalse()
|
||||||
initialState.eventSink.invoke(PermissionsEvents.RequestPermissions)
|
initialState.eventSink.invoke(PermissionsEvents.RequestPermissions)
|
||||||
|
|
@ -171,24 +134,16 @@ class DefaultPermissionsPresenterTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `present - user does not grant permission second time`() = runTest {
|
fun `present - user does not grant permission second time`() = runTest {
|
||||||
val permissionsStore = InMemoryPermissionsStore()
|
val permissionState = aFakePermissionState(
|
||||||
val permissionState = FakePermissionState(
|
initialStatus = PermissionStatus.Denied(shouldShowRationale = true)
|
||||||
A_PERMISSION,
|
|
||||||
PermissionStatus.Denied(shouldShowRationale = true)
|
|
||||||
)
|
)
|
||||||
val permissionStateProvider =
|
val permissionStateProvider = FakeComposablePermissionStateProvider(
|
||||||
FakeComposablePermissionStateProvider(
|
permissionState = permissionState,
|
||||||
permissionState
|
|
||||||
)
|
|
||||||
val presenter = DefaultPermissionsPresenter(
|
|
||||||
A_PERMISSION,
|
|
||||||
permissionsStore,
|
|
||||||
permissionStateProvider,
|
|
||||||
FakePermissionActions(),
|
|
||||||
)
|
)
|
||||||
moleculeFlow(RecompositionMode.Immediate) {
|
val presenter = createPresenter(
|
||||||
presenter.present()
|
permissionStateProvider = permissionStateProvider,
|
||||||
}.test {
|
)
|
||||||
|
presenter.test {
|
||||||
val initialState = awaitItem()
|
val initialState = awaitItem()
|
||||||
assertThat(initialState.showDialog).isFalse()
|
assertThat(initialState.showDialog).isFalse()
|
||||||
initialState.eventSink.invoke(PermissionsEvents.RequestPermissions)
|
initialState.eventSink.invoke(PermissionsEvents.RequestPermissions)
|
||||||
|
|
@ -206,28 +161,21 @@ class DefaultPermissionsPresenterTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `present - user does not grant permission third time`() = runTest {
|
fun `present - user does not grant permission third time`() = runTest {
|
||||||
val permissionsStore =
|
val permissionsStore = InMemoryPermissionsStore(
|
||||||
InMemoryPermissionsStore(
|
permissionDenied = true,
|
||||||
permissionDenied = true,
|
permissionAsked = true,
|
||||||
permissionAsked = true
|
|
||||||
)
|
|
||||||
val permissionState = FakePermissionState(
|
|
||||||
A_PERMISSION,
|
|
||||||
PermissionStatus.Denied(shouldShowRationale = false)
|
|
||||||
)
|
)
|
||||||
val permissionStateProvider =
|
val permissionState = aFakePermissionState(
|
||||||
FakeComposablePermissionStateProvider(
|
initialStatus = PermissionStatus.Denied(shouldShowRationale = false),
|
||||||
permissionState
|
|
||||||
)
|
|
||||||
val presenter = DefaultPermissionsPresenter(
|
|
||||||
A_PERMISSION,
|
|
||||||
permissionsStore,
|
|
||||||
permissionStateProvider,
|
|
||||||
FakePermissionActions(),
|
|
||||||
)
|
)
|
||||||
moleculeFlow(RecompositionMode.Immediate) {
|
val permissionStateProvider = FakeComposablePermissionStateProvider(
|
||||||
presenter.present()
|
permissionState = permissionState,
|
||||||
}.test {
|
)
|
||||||
|
val presenter = createPresenter(
|
||||||
|
permissionsStore = permissionsStore,
|
||||||
|
permissionStateProvider = permissionStateProvider,
|
||||||
|
)
|
||||||
|
presenter.test {
|
||||||
skipItems(1)
|
skipItems(1)
|
||||||
val initialState = awaitItem()
|
val initialState = awaitItem()
|
||||||
initialState.eventSink.invoke(PermissionsEvents.RequestPermissions)
|
initialState.eventSink.invoke(PermissionsEvents.RequestPermissions)
|
||||||
|
|
@ -241,24 +189,16 @@ class DefaultPermissionsPresenterTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `present - user grants permission`() = runTest {
|
fun `present - user grants permission`() = runTest {
|
||||||
val permissionsStore = InMemoryPermissionsStore()
|
val permissionState = aFakePermissionState(
|
||||||
val permissionState = FakePermissionState(
|
initialStatus = PermissionStatus.Denied(shouldShowRationale = false)
|
||||||
A_PERMISSION,
|
|
||||||
PermissionStatus.Denied(shouldShowRationale = false)
|
|
||||||
)
|
)
|
||||||
val permissionStateProvider =
|
val permissionStateProvider = FakeComposablePermissionStateProvider(
|
||||||
FakeComposablePermissionStateProvider(
|
permissionState = permissionState,
|
||||||
permissionState
|
|
||||||
)
|
|
||||||
val presenter = DefaultPermissionsPresenter(
|
|
||||||
A_PERMISSION,
|
|
||||||
permissionsStore,
|
|
||||||
permissionStateProvider,
|
|
||||||
FakePermissionActions(),
|
|
||||||
)
|
)
|
||||||
moleculeFlow(RecompositionMode.Immediate) {
|
val presenter = createPresenter(
|
||||||
presenter.present()
|
permissionStateProvider = permissionStateProvider,
|
||||||
}.test {
|
)
|
||||||
|
presenter.test {
|
||||||
val initialState = awaitItem()
|
val initialState = awaitItem()
|
||||||
assertThat(initialState.showDialog).isFalse()
|
assertThat(initialState.showDialog).isFalse()
|
||||||
initialState.eventSink.invoke(PermissionsEvents.RequestPermissions)
|
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,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue