Improve FakeSessionVerificationService

This commit is contained in:
Benoit Marty 2026-05-05 15:29:32 +02:00
parent 51bcaca9db
commit 0a9259604b
3 changed files with 19 additions and 12 deletions

View file

@ -99,6 +99,7 @@ class IncomingVerificationPresenterTest {
emojiState.eventSink(IncomingVerificationViewEvents.ConfirmVerification)
val emojiWaitingItem = awaitItem()
assertThat((emojiWaitingItem.step as IncomingVerificationState.Step.Verifying).isWaiting).isTrue()
advanceUntilIdle()
approveVerificationLambda.assertions().isCalledOnce()
// Remote confirm that the emojis match
fakeSessionVerificationService.emitVerificationFlowState(
@ -161,6 +162,7 @@ class IncomingVerificationPresenterTest {
emojiState.eventSink(IncomingVerificationViewEvents.DeclineVerification)
val emojiWaitingItem = awaitItem()
assertThat((emojiWaitingItem.step as IncomingVerificationState.Step.Verifying).isWaiting).isTrue()
advanceUntilIdle()
declineVerificationLambda.assertions().isCalledOnce()
// Remote confirm that there is a failure
fakeSessionVerificationService.emitVerificationFlowState(
@ -260,6 +262,7 @@ class IncomingVerificationPresenterTest {
emojiState.eventSink(IncomingVerificationViewEvents.GoBack)
val emojiWaitingItem = awaitItem()
assertThat((emojiWaitingItem.step as IncomingVerificationState.Step.Verifying).isWaiting).isTrue()
advanceUntilIdle()
declineVerificationLambda.assertions().isCalledOnce()
// Remote confirm that there is a failure
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.test
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.advanceUntilIdle
import kotlinx.coroutines.test.runTest
import org.junit.Rule
import org.junit.Test
@ -271,6 +273,7 @@ class OutgoingVerificationPresenterTest {
}
}
context(testScope: TestScope)
private suspend fun ReceiveTurbine<OutgoingVerificationState>.requestVerificationAndAwaitVerifyingState(
fakeService: FakeSessionVerificationService,
sessionVerificationData: SessionVerificationData = SessionVerificationData.Emojis(emptyList()),
@ -278,6 +281,7 @@ class OutgoingVerificationPresenterTest {
var state = awaitItem()
assertThat(state.step).isEqualTo(Step.Initial)
state.eventSink(OutgoingVerificationViewEvents.RequestVerification)
testScope.advanceUntilIdle()
// Await for other device response:
fakeService.emitVerificationFlowState(VerificationFlowState.DidAcceptVerificationRequest)
state = awaitItem()
@ -286,6 +290,7 @@ class OutgoingVerificationPresenterTest {
state = awaitItem()
assertThat(state.step).isEqualTo(Step.Ready)
state.eventSink(OutgoingVerificationViewEvents.StartSasVerification)
testScope.advanceUntilIdle()
// Await for other device response (again):
fakeService.emitVerificationFlowState(VerificationFlowState.DidStartSasVerification)
state = awaitItem()
@ -297,7 +302,7 @@ class OutgoingVerificationPresenterTest {
return state
}
private suspend fun unverifiedSessionService(
private fun unverifiedSessionService(
requestDeviceVerificationLambda: () -> Unit = { lambdaError() },
requestUserVerificationLambda: (UserId) -> Unit = { lambdaError() },
cancelVerificationLambda: () -> Unit = { lambdaError() },
@ -309,6 +314,7 @@ class OutgoingVerificationPresenterTest {
acceptVerificationRequestLambda: () -> Unit = { lambdaError() },
): FakeSessionVerificationService {
return FakeSessionVerificationService(
initialSessionVerifiedStatus = SessionVerifiedStatus.NotVerified,
requestDeviceVerificationLambda = requestDeviceVerificationLambda,
requestUserVerificationLambda = requestUserVerificationLambda,
cancelVerificationLambda = cancelVerificationLambda,
@ -318,9 +324,7 @@ class OutgoingVerificationPresenterTest {
resetLambda = resetLambda,
acknowledgeVerificationRequestLambda = acknowledgeVerificationRequestLambda,
acceptVerificationRequestLambda = acceptVerificationRequestLambda,
).apply {
emitVerifiedStatus(SessionVerifiedStatus.NotVerified)
}
)
}
}

View file

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