|
|
@ -23,11 +23,11 @@ import app.cash.turbine.test |
|
|
|
import com.google.common.truth.Truth.assertThat |
|
|
|
import com.google.common.truth.Truth.assertThat |
|
|
|
import io.element.android.features.verifysession.impl.VerifySelfSessionState.VerificationStep |
|
|
|
import io.element.android.features.verifysession.impl.VerifySelfSessionState.VerificationStep |
|
|
|
import io.element.android.libraries.architecture.Async |
|
|
|
import io.element.android.libraries.architecture.Async |
|
|
|
|
|
|
|
import io.element.android.libraries.matrix.api.verification.SessionVerificationData |
|
|
|
import io.element.android.libraries.matrix.api.verification.VerificationEmoji |
|
|
|
import io.element.android.libraries.matrix.api.verification.VerificationEmoji |
|
|
|
import io.element.android.libraries.matrix.api.verification.VerificationFlowState |
|
|
|
import io.element.android.libraries.matrix.api.verification.VerificationFlowState |
|
|
|
import io.element.android.libraries.matrix.test.verification.FakeSessionVerificationService |
|
|
|
import io.element.android.libraries.matrix.test.verification.FakeSessionVerificationService |
|
|
|
import io.element.android.tests.testutils.WarmUpRule |
|
|
|
import io.element.android.tests.testutils.WarmUpRule |
|
|
|
import kotlinx.collections.immutable.persistentListOf |
|
|
|
|
|
|
|
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 |
|
|
@ -74,7 +74,7 @@ class VerifySelfSessionPresenterTests { |
|
|
|
// Await for other device response: |
|
|
|
// Await for other device response: |
|
|
|
assertThat(awaitItem().verificationFlowStep).isEqualTo(VerificationStep.AwaitingOtherDeviceResponse) |
|
|
|
assertThat(awaitItem().verificationFlowStep).isEqualTo(VerificationStep.AwaitingOtherDeviceResponse) |
|
|
|
// ChallengeReceived: |
|
|
|
// ChallengeReceived: |
|
|
|
service.triggerReceiveVerificationData() |
|
|
|
service.triggerReceiveVerificationData(SessionVerificationData.Emojis(emptyList())) |
|
|
|
val verifyingState = awaitItem() |
|
|
|
val verifyingState = awaitItem() |
|
|
|
assertThat(verifyingState.verificationFlowStep).isInstanceOf(VerificationStep.Verifying::class.java) |
|
|
|
assertThat(verifyingState.verificationFlowStep).isInstanceOf(VerificationStep.Verifying::class.java) |
|
|
|
} |
|
|
|
} |
|
|
@ -133,7 +133,7 @@ class VerifySelfSessionPresenterTests { |
|
|
|
presenter.present() |
|
|
|
presenter.present() |
|
|
|
}.test { |
|
|
|
}.test { |
|
|
|
requestVerificationAndAwaitVerifyingState(service) |
|
|
|
requestVerificationAndAwaitVerifyingState(service) |
|
|
|
service.givenVerificationFlowState(VerificationFlowState.ReceivedVerificationData(persistentListOf())) |
|
|
|
service.givenVerificationFlowState(VerificationFlowState.ReceivedVerificationData(SessionVerificationData.Emojis(emptyList()))) |
|
|
|
ensureAllEventsConsumed() |
|
|
|
ensureAllEventsConsumed() |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -158,18 +158,24 @@ class VerifySelfSessionPresenterTests { |
|
|
|
@Test |
|
|
|
@Test |
|
|
|
fun `present - When verification is approved, the flow completes if there is no error`() = runTest { |
|
|
|
fun `present - When verification is approved, the flow completes if there is no error`() = runTest { |
|
|
|
val emojis = listOf( |
|
|
|
val emojis = listOf( |
|
|
|
VerificationEmoji(30, "Smiley") |
|
|
|
VerificationEmoji(number = 30, emoji = "😀", description = "Smiley") |
|
|
|
) |
|
|
|
) |
|
|
|
val service = FakeSessionVerificationService().apply { |
|
|
|
val service = FakeSessionVerificationService() |
|
|
|
givenEmojiList(emojis) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
val presenter = createVerifySelfSessionPresenter(service) |
|
|
|
val presenter = createVerifySelfSessionPresenter(service) |
|
|
|
moleculeFlow(RecompositionMode.Immediate) { |
|
|
|
moleculeFlow(RecompositionMode.Immediate) { |
|
|
|
presenter.present() |
|
|
|
presenter.present() |
|
|
|
}.test { |
|
|
|
}.test { |
|
|
|
val state = requestVerificationAndAwaitVerifyingState(service) |
|
|
|
val state = requestVerificationAndAwaitVerifyingState( |
|
|
|
|
|
|
|
service, |
|
|
|
|
|
|
|
SessionVerificationData.Emojis(emojis) |
|
|
|
|
|
|
|
) |
|
|
|
state.eventSink(VerifySelfSessionViewEvents.ConfirmVerification) |
|
|
|
state.eventSink(VerifySelfSessionViewEvents.ConfirmVerification) |
|
|
|
assertThat(awaitItem().verificationFlowStep).isEqualTo(VerificationStep.Verifying(emojis, Async.Loading())) |
|
|
|
assertThat(awaitItem().verificationFlowStep).isEqualTo( |
|
|
|
|
|
|
|
VerificationStep.Verifying( |
|
|
|
|
|
|
|
SessionVerificationData.Emojis(emojis), |
|
|
|
|
|
|
|
Async.Loading(), |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
) |
|
|
|
assertThat(awaitItem().verificationFlowStep).isEqualTo(VerificationStep.Completed) |
|
|
|
assertThat(awaitItem().verificationFlowStep).isEqualTo(VerificationStep.Completed) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -183,13 +189,19 @@ class VerifySelfSessionPresenterTests { |
|
|
|
}.test { |
|
|
|
}.test { |
|
|
|
val state = requestVerificationAndAwaitVerifyingState(service) |
|
|
|
val state = requestVerificationAndAwaitVerifyingState(service) |
|
|
|
state.eventSink(VerifySelfSessionViewEvents.DeclineVerification) |
|
|
|
state.eventSink(VerifySelfSessionViewEvents.DeclineVerification) |
|
|
|
assertThat(awaitItem().verificationFlowStep).isEqualTo(VerificationStep.Verifying(emptyList(), Async.Loading())) |
|
|
|
assertThat(awaitItem().verificationFlowStep).isEqualTo( |
|
|
|
|
|
|
|
VerificationStep.Verifying( |
|
|
|
|
|
|
|
SessionVerificationData.Emojis(emptyList()), |
|
|
|
|
|
|
|
Async.Loading(), |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
) |
|
|
|
assertThat(awaitItem().verificationFlowStep).isEqualTo(VerificationStep.Canceled) |
|
|
|
assertThat(awaitItem().verificationFlowStep).isEqualTo(VerificationStep.Canceled) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private suspend fun ReceiveTurbine<VerifySelfSessionState>.requestVerificationAndAwaitVerifyingState( |
|
|
|
private suspend fun ReceiveTurbine<VerifySelfSessionState>.requestVerificationAndAwaitVerifyingState( |
|
|
|
fakeService: FakeSessionVerificationService |
|
|
|
fakeService: FakeSessionVerificationService, |
|
|
|
|
|
|
|
sessionVerificationData: SessionVerificationData = SessionVerificationData.Emojis(emptyList()), |
|
|
|
): VerifySelfSessionState { |
|
|
|
): VerifySelfSessionState { |
|
|
|
var state = awaitItem() |
|
|
|
var state = awaitItem() |
|
|
|
assertThat(state.verificationFlowStep).isEqualTo(VerificationStep.Initial) |
|
|
|
assertThat(state.verificationFlowStep).isEqualTo(VerificationStep.Initial) |
|
|
@ -204,7 +216,7 @@ class VerifySelfSessionPresenterTests { |
|
|
|
// Await for other device response (again): |
|
|
|
// Await for other device response (again): |
|
|
|
state = awaitItem() |
|
|
|
state = awaitItem() |
|
|
|
assertThat(state.verificationFlowStep).isEqualTo(VerificationStep.AwaitingOtherDeviceResponse) |
|
|
|
assertThat(state.verificationFlowStep).isEqualTo(VerificationStep.AwaitingOtherDeviceResponse) |
|
|
|
fakeService.triggerReceiveVerificationData() |
|
|
|
fakeService.triggerReceiveVerificationData(sessionVerificationData) |
|
|
|
// Finally, ChallengeReceived: |
|
|
|
// Finally, ChallengeReceived: |
|
|
|
state = awaitItem() |
|
|
|
state = awaitItem() |
|
|
|
assertThat(state.verificationFlowStep).isInstanceOf(VerificationStep.Verifying::class.java) |
|
|
|
assertThat(state.verificationFlowStep).isInstanceOf(VerificationStep.Verifying::class.java) |
|
|
|