Use test extension

This commit is contained in:
Benoit Marty 2024-11-07 13:36:36 +01:00
parent 0d1779b1d8
commit 3a2baed2df

View file

@ -7,10 +7,7 @@
package io.element.android.features.verifysession.impl.outgoing package io.element.android.features.verifysession.impl.outgoing
import app.cash.molecule.RecompositionMode
import app.cash.molecule.moleculeFlow
import app.cash.turbine.ReceiveTurbine import app.cash.turbine.ReceiveTurbine
import app.cash.turbine.test
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import io.element.android.features.logout.api.LogoutUseCase import io.element.android.features.logout.api.LogoutUseCase
import io.element.android.features.logout.test.FakeLogoutUseCase import io.element.android.features.logout.test.FakeLogoutUseCase
@ -33,6 +30,7 @@ import io.element.android.tests.testutils.WarmUpRule
import io.element.android.tests.testutils.lambda.lambdaError import io.element.android.tests.testutils.lambda.lambdaError
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.ExperimentalCoroutinesApi import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import org.junit.Rule import org.junit.Rule
@ -48,9 +46,7 @@ class VerifySelfSessionPresenterTest {
val presenter = createVerifySelfSessionPresenter( val presenter = createVerifySelfSessionPresenter(
service = unverifiedSessionService(), service = unverifiedSessionService(),
) )
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
awaitItem().run { awaitItem().run {
assertThat(step).isEqualTo(Step.Initial(false)) assertThat(step).isEqualTo(Step.Initial(false))
assertThat(displaySkipButton).isTrue() assertThat(displaySkipButton).isTrue()
@ -65,9 +61,7 @@ class VerifySelfSessionPresenterTest {
service = unverifiedSessionService(), service = unverifiedSessionService(),
buildMeta = buildMeta, buildMeta = buildMeta,
) )
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
assertThat(awaitItem().displaySkipButton).isFalse() assertThat(awaitItem().displaySkipButton).isFalse()
} }
} }
@ -83,9 +77,7 @@ class VerifySelfSessionPresenterTest {
emitRecoveryState(RecoveryState.INCOMPLETE) emitRecoveryState(RecoveryState.INCOMPLETE)
} }
) )
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
assertThat(awaitItem().step).isEqualTo(Step.Initial(true)) assertThat(awaitItem().step).isEqualTo(Step.Initial(true))
resetLambda.assertions().isCalledOnce().with(value(true)) resetLambda.assertions().isCalledOnce().with(value(true))
} }
@ -100,9 +92,7 @@ class VerifySelfSessionPresenterTest {
emitRecoveryState(RecoveryState.INCOMPLETE) emitRecoveryState(RecoveryState.INCOMPLETE)
} }
) )
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
assertThat(awaitItem().step).isEqualTo(Step.Initial(canEnterRecoveryKey = true, isLastDevice = true)) assertThat(awaitItem().step).isEqualTo(Step.Initial(canEnterRecoveryKey = true, isLastDevice = true))
} }
} }
@ -114,9 +104,7 @@ class VerifySelfSessionPresenterTest {
startVerificationLambda = { }, startVerificationLambda = { },
) )
val presenter = createVerifySelfSessionPresenter(service) val presenter = createVerifySelfSessionPresenter(service)
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
requestVerificationAndAwaitVerifyingState(service) requestVerificationAndAwaitVerifyingState(service)
} }
} }
@ -126,9 +114,7 @@ class VerifySelfSessionPresenterTest {
val presenter = createVerifySelfSessionPresenter( val presenter = createVerifySelfSessionPresenter(
service = unverifiedSessionService(), service = unverifiedSessionService(),
) )
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
val initialState = awaitItem() val initialState = awaitItem()
assertThat(initialState.step).isEqualTo(Step.Initial(false)) assertThat(initialState.step).isEqualTo(Step.Initial(false))
val eventSink = initialState.eventSink val eventSink = initialState.eventSink
@ -145,9 +131,7 @@ class VerifySelfSessionPresenterTest {
approveVerificationLambda = { }, approveVerificationLambda = { },
) )
val presenter = createVerifySelfSessionPresenter(service) val presenter = createVerifySelfSessionPresenter(service)
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
val state = requestVerificationAndAwaitVerifyingState(service) val state = requestVerificationAndAwaitVerifyingState(service)
state.eventSink(VerifySelfSessionViewEvents.ConfirmVerification) state.eventSink(VerifySelfSessionViewEvents.ConfirmVerification)
// Cancelling // Cancelling
@ -164,9 +148,7 @@ class VerifySelfSessionPresenterTest {
requestVerificationLambda = { }, requestVerificationLambda = { },
) )
val presenter = createVerifySelfSessionPresenter(service) val presenter = createVerifySelfSessionPresenter(service)
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
awaitItem().eventSink(VerifySelfSessionViewEvents.UseAnotherDevice) awaitItem().eventSink(VerifySelfSessionViewEvents.UseAnotherDevice)
awaitItem().eventSink(VerifySelfSessionViewEvents.RequestVerification) awaitItem().eventSink(VerifySelfSessionViewEvents.RequestVerification)
service.emitVerificationFlowState(VerificationFlowState.DidFail) service.emitVerificationFlowState(VerificationFlowState.DidFail)
@ -183,9 +165,7 @@ class VerifySelfSessionPresenterTest {
cancelVerificationLambda = { }, cancelVerificationLambda = { },
) )
val presenter = createVerifySelfSessionPresenter(service) val presenter = createVerifySelfSessionPresenter(service)
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
val state = requestVerificationAndAwaitVerifyingState(service) val state = requestVerificationAndAwaitVerifyingState(service)
state.eventSink(VerifySelfSessionViewEvents.Cancel) state.eventSink(VerifySelfSessionViewEvents.Cancel)
assertThat(awaitItem().step).isEqualTo(Step.Canceled) assertThat(awaitItem().step).isEqualTo(Step.Canceled)
@ -199,9 +179,7 @@ class VerifySelfSessionPresenterTest {
startVerificationLambda = { }, startVerificationLambda = { },
) )
val presenter = createVerifySelfSessionPresenter(service) val presenter = createVerifySelfSessionPresenter(service)
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
requestVerificationAndAwaitVerifyingState(service) requestVerificationAndAwaitVerifyingState(service)
service.emitVerificationFlowState(VerificationFlowState.DidReceiveVerificationData(SessionVerificationData.Emojis(emptyList()))) service.emitVerificationFlowState(VerificationFlowState.DidReceiveVerificationData(SessionVerificationData.Emojis(emptyList())))
ensureAllEventsConsumed() ensureAllEventsConsumed()
@ -215,9 +193,7 @@ class VerifySelfSessionPresenterTest {
startVerificationLambda = { }, startVerificationLambda = { },
) )
val presenter = createVerifySelfSessionPresenter(service) val presenter = createVerifySelfSessionPresenter(service)
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
val state = requestVerificationAndAwaitVerifyingState(service) val state = requestVerificationAndAwaitVerifyingState(service)
service.emitVerificationFlowState(VerificationFlowState.DidCancel) service.emitVerificationFlowState(VerificationFlowState.DidCancel)
assertThat(awaitItem().step).isEqualTo(Step.Canceled) assertThat(awaitItem().step).isEqualTo(Step.Canceled)
@ -235,9 +211,7 @@ class VerifySelfSessionPresenterTest {
startVerificationLambda = { }, startVerificationLambda = { },
) )
val presenter = createVerifySelfSessionPresenter(service) val presenter = createVerifySelfSessionPresenter(service)
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
val state = requestVerificationAndAwaitVerifyingState(service) val state = requestVerificationAndAwaitVerifyingState(service)
service.emitVerificationFlowState(VerificationFlowState.DidCancel) service.emitVerificationFlowState(VerificationFlowState.DidCancel)
assertThat(awaitItem().step).isEqualTo(Step.Canceled) assertThat(awaitItem().step).isEqualTo(Step.Canceled)
@ -259,9 +233,7 @@ class VerifySelfSessionPresenterTest {
approveVerificationLambda = { }, approveVerificationLambda = { },
) )
val presenter = createVerifySelfSessionPresenter(service) val presenter = createVerifySelfSessionPresenter(service)
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
val state = requestVerificationAndAwaitVerifyingState( val state = requestVerificationAndAwaitVerifyingState(
service, service,
SessionVerificationData.Emojis(emojis) SessionVerificationData.Emojis(emojis)
@ -286,9 +258,7 @@ class VerifySelfSessionPresenterTest {
declineVerificationLambda = { }, declineVerificationLambda = { },
) )
val presenter = createVerifySelfSessionPresenter(service) val presenter = createVerifySelfSessionPresenter(service)
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
val state = requestVerificationAndAwaitVerifyingState(service) val state = requestVerificationAndAwaitVerifyingState(service)
state.eventSink(VerifySelfSessionViewEvents.DeclineVerification) state.eventSink(VerifySelfSessionViewEvents.DeclineVerification)
assertThat(awaitItem().step).isEqualTo( assertThat(awaitItem().step).isEqualTo(
@ -309,9 +279,7 @@ class VerifySelfSessionPresenterTest {
startVerificationLambda = { }, startVerificationLambda = { },
) )
val presenter = createVerifySelfSessionPresenter(service) val presenter = createVerifySelfSessionPresenter(service)
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
val state = requestVerificationAndAwaitVerifyingState(service) val state = requestVerificationAndAwaitVerifyingState(service)
state.eventSink(VerifySelfSessionViewEvents.SkipVerification) state.eventSink(VerifySelfSessionViewEvents.SkipVerification)
assertThat(awaitItem().step).isEqualTo(Step.Skipped) assertThat(awaitItem().step).isEqualTo(Step.Skipped)
@ -331,9 +299,7 @@ class VerifySelfSessionPresenterTest {
service = service, service = service,
showDeviceVerifiedScreen = true, showDeviceVerifiedScreen = true,
) )
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
assertThat(awaitItem().step).isEqualTo(Step.Completed) assertThat(awaitItem().step).isEqualTo(Step.Completed)
} }
} }
@ -351,9 +317,7 @@ class VerifySelfSessionPresenterTest {
service = service, service = service,
showDeviceVerifiedScreen = false, showDeviceVerifiedScreen = false,
) )
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
skipItems(1) skipItems(1)
assertThat(awaitItem().step).isEqualTo(Step.Skipped) assertThat(awaitItem().step).isEqualTo(Step.Skipped)
} }
@ -373,9 +337,7 @@ class VerifySelfSessionPresenterTest {
service, service,
logoutUseCase = FakeLogoutUseCase(signOutLambda) logoutUseCase = FakeLogoutUseCase(signOutLambda)
) )
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
skipItems(1) skipItems(1)
val initialItem = awaitItem() val initialItem = awaitItem()
initialItem.eventSink(VerifySelfSessionViewEvents.SignOut) initialItem.eventSink(VerifySelfSessionViewEvents.SignOut)