Improve FakeSessionVerificationService

This commit is contained in:
Benoit Marty 2026-05-05 15:29:32 +02:00
parent e4c58b3fc6
commit 92ca1e69c1
3 changed files with 19 additions and 12 deletions

View file

@ -99,6 +99,7 @@ class IncomingVerificationPresenterTest {
emojiState.eventSink(IncomingVerificationViewEvents.ConfirmVerification) emojiState.eventSink(IncomingVerificationViewEvents.ConfirmVerification)
val emojiWaitingItem = awaitItem() val emojiWaitingItem = awaitItem()
assertThat((emojiWaitingItem.step as IncomingVerificationState.Step.Verifying).isWaiting).isTrue() assertThat((emojiWaitingItem.step as IncomingVerificationState.Step.Verifying).isWaiting).isTrue()
advanceUntilIdle()
approveVerificationLambda.assertions().isCalledOnce() approveVerificationLambda.assertions().isCalledOnce()
// Remote confirm that the emojis match // Remote confirm that the emojis match
fakeSessionVerificationService.emitVerificationFlowState( fakeSessionVerificationService.emitVerificationFlowState(
@ -161,6 +162,7 @@ class IncomingVerificationPresenterTest {
emojiState.eventSink(IncomingVerificationViewEvents.DeclineVerification) emojiState.eventSink(IncomingVerificationViewEvents.DeclineVerification)
val emojiWaitingItem = awaitItem() val emojiWaitingItem = awaitItem()
assertThat((emojiWaitingItem.step as IncomingVerificationState.Step.Verifying).isWaiting).isTrue() assertThat((emojiWaitingItem.step as IncomingVerificationState.Step.Verifying).isWaiting).isTrue()
advanceUntilIdle()
declineVerificationLambda.assertions().isCalledOnce() declineVerificationLambda.assertions().isCalledOnce()
// Remote confirm that there is a failure // Remote confirm that there is a failure
fakeSessionVerificationService.emitVerificationFlowState( fakeSessionVerificationService.emitVerificationFlowState(
@ -260,6 +262,7 @@ class IncomingVerificationPresenterTest {
emojiState.eventSink(IncomingVerificationViewEvents.GoBack) emojiState.eventSink(IncomingVerificationViewEvents.GoBack)
val emojiWaitingItem = awaitItem() val emojiWaitingItem = awaitItem()
assertThat((emojiWaitingItem.step as IncomingVerificationState.Step.Verifying).isWaiting).isTrue() assertThat((emojiWaitingItem.step as IncomingVerificationState.Step.Verifying).isWaiting).isTrue()
advanceUntilIdle()
declineVerificationLambda.assertions().isCalledOnce() declineVerificationLambda.assertions().isCalledOnce()
// Remote confirm that there is a failure // Remote confirm that there is a failure
fakeSessionVerificationService.emitVerificationFlowState( fakeSessionVerificationService.emitVerificationFlowState(

View file

@ -27,6 +27,8 @@ 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.test import io.element.android.tests.testutils.test
import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.advanceUntilIdle
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
@ -271,6 +273,7 @@ class OutgoingVerificationPresenterTest {
} }
} }
context(testScope: TestScope)
private suspend fun ReceiveTurbine<OutgoingVerificationState>.requestVerificationAndAwaitVerifyingState( private suspend fun ReceiveTurbine<OutgoingVerificationState>.requestVerificationAndAwaitVerifyingState(
fakeService: FakeSessionVerificationService, fakeService: FakeSessionVerificationService,
sessionVerificationData: SessionVerificationData = SessionVerificationData.Emojis(emptyList()), sessionVerificationData: SessionVerificationData = SessionVerificationData.Emojis(emptyList()),
@ -278,6 +281,7 @@ class OutgoingVerificationPresenterTest {
var state = awaitItem() var state = awaitItem()
assertThat(state.step).isEqualTo(Step.Initial) assertThat(state.step).isEqualTo(Step.Initial)
state.eventSink(OutgoingVerificationViewEvents.RequestVerification) state.eventSink(OutgoingVerificationViewEvents.RequestVerification)
testScope.advanceUntilIdle()
// Await for other device response: // Await for other device response:
fakeService.emitVerificationFlowState(VerificationFlowState.DidAcceptVerificationRequest) fakeService.emitVerificationFlowState(VerificationFlowState.DidAcceptVerificationRequest)
state = awaitItem() state = awaitItem()
@ -286,6 +290,7 @@ class OutgoingVerificationPresenterTest {
state = awaitItem() state = awaitItem()
assertThat(state.step).isEqualTo(Step.Ready) assertThat(state.step).isEqualTo(Step.Ready)
state.eventSink(OutgoingVerificationViewEvents.StartSasVerification) state.eventSink(OutgoingVerificationViewEvents.StartSasVerification)
testScope.advanceUntilIdle()
// Await for other device response (again): // Await for other device response (again):
fakeService.emitVerificationFlowState(VerificationFlowState.DidStartSasVerification) fakeService.emitVerificationFlowState(VerificationFlowState.DidStartSasVerification)
state = awaitItem() state = awaitItem()
@ -297,7 +302,7 @@ class OutgoingVerificationPresenterTest {
return state return state
} }
private suspend fun unverifiedSessionService( private fun unverifiedSessionService(
requestDeviceVerificationLambda: () -> Unit = { lambdaError() }, requestDeviceVerificationLambda: () -> Unit = { lambdaError() },
requestUserVerificationLambda: (UserId) -> Unit = { lambdaError() }, requestUserVerificationLambda: (UserId) -> Unit = { lambdaError() },
cancelVerificationLambda: () -> Unit = { lambdaError() }, cancelVerificationLambda: () -> Unit = { lambdaError() },
@ -309,6 +314,7 @@ class OutgoingVerificationPresenterTest {
acceptVerificationRequestLambda: () -> Unit = { lambdaError() }, acceptVerificationRequestLambda: () -> Unit = { lambdaError() },
): FakeSessionVerificationService { ): FakeSessionVerificationService {
return FakeSessionVerificationService( return FakeSessionVerificationService(
initialSessionVerifiedStatus = SessionVerifiedStatus.NotVerified,
requestDeviceVerificationLambda = requestDeviceVerificationLambda, requestDeviceVerificationLambda = requestDeviceVerificationLambda,
requestUserVerificationLambda = requestUserVerificationLambda, requestUserVerificationLambda = requestUserVerificationLambda,
cancelVerificationLambda = cancelVerificationLambda, cancelVerificationLambda = cancelVerificationLambda,
@ -318,9 +324,7 @@ class OutgoingVerificationPresenterTest {
resetLambda = resetLambda, resetLambda = resetLambda,
acknowledgeVerificationRequestLambda = acknowledgeVerificationRequestLambda, acknowledgeVerificationRequestLambda = acknowledgeVerificationRequestLambda,
acceptVerificationRequestLambda = acceptVerificationRequestLambda, acceptVerificationRequestLambda = acceptVerificationRequestLambda,
).apply { )
emitVerifiedStatus(SessionVerifiedStatus.NotVerified)
}
} }
} }

View file

@ -40,31 +40,31 @@ class FakeSessionVerificationService(
override val sessionVerifiedStatus: StateFlow<SessionVerifiedStatus> = _sessionVerifiedStatus override val sessionVerifiedStatus: StateFlow<SessionVerifiedStatus> = _sessionVerifiedStatus
override val needsSessionVerification: Flow<Boolean> = _needsSessionVerification override val needsSessionVerification: Flow<Boolean> = _needsSessionVerification
override suspend fun requestDeviceVerification() { override suspend fun requestDeviceVerification() = simulateLongTask {
requestDeviceVerificationLambda() requestDeviceVerificationLambda()
} }
override suspend fun requestUserVerification(userId: UserId) { override suspend fun requestUserVerification(userId: UserId) = simulateLongTask {
requestUserVerificationLambda(userId) requestUserVerificationLambda(userId)
} }
override suspend fun cancelVerification() { override suspend fun cancelVerification() = simulateLongTask {
cancelVerificationLambda() cancelVerificationLambda()
} }
override suspend fun approveVerification() { override suspend fun approveVerification() = simulateLongTask {
approveVerificationLambda() approveVerificationLambda()
} }
override suspend fun declineVerification() { override suspend fun declineVerification() = simulateLongTask {
declineVerificationLambda() declineVerificationLambda()
} }
override suspend fun startSasVerification() { override suspend fun startSasVerification() = simulateLongTask {
startSasVerificationLambda() startSasVerificationLambda()
} }
override suspend fun reset(cancelAnyPendingVerificationAttempt: Boolean) { override suspend fun reset(cancelAnyPendingVerificationAttempt: Boolean) = simulateLongTask {
resetLambda(cancelAnyPendingVerificationAttempt) resetLambda(cancelAnyPendingVerificationAttempt)
} }
@ -75,7 +75,7 @@ class FakeSessionVerificationService(
this.listener = listener this.listener = listener
} }
override suspend fun acknowledgeVerificationRequest(verificationRequest: VerificationRequest.Incoming) { override suspend fun acknowledgeVerificationRequest(verificationRequest: VerificationRequest.Incoming) = simulateLongTask {
acknowledgeVerificationRequestLambda(verificationRequest) acknowledgeVerificationRequestLambda(verificationRequest)
} }