|
|
|
@ -22,14 +22,14 @@ import app.cash.turbine.test
@@ -22,14 +22,14 @@ import app.cash.turbine.test
|
|
|
|
|
import com.google.common.truth.Truth.assertThat |
|
|
|
|
import io.element.android.features.lockscreen.impl.pin.model.PinDigit |
|
|
|
|
import io.element.android.features.lockscreen.impl.pin.model.PinEntry |
|
|
|
|
import io.element.android.features.lockscreen.impl.setup.validation.CreatePinFailure |
|
|
|
|
import io.element.android.features.lockscreen.impl.setup.validation.PinValidator |
|
|
|
|
import io.element.android.features.lockscreen.impl.setup.validation.SetupPinFailure |
|
|
|
|
import io.element.android.libraries.matrix.test.core.aBuildMeta |
|
|
|
|
import io.element.android.tests.testutils.awaitLastSequentialItem |
|
|
|
|
import kotlinx.coroutines.test.runTest |
|
|
|
|
import org.junit.Test |
|
|
|
|
|
|
|
|
|
class CreatePinPresenterTest { |
|
|
|
|
class SetupPinPresenterTest { |
|
|
|
|
|
|
|
|
|
private val blacklistedPin = PinValidator.BLACKLIST.first() |
|
|
|
|
private val halfCompletePin = "12" |
|
|
|
@ -39,58 +39,58 @@ class CreatePinPresenterTest {
@@ -39,58 +39,58 @@ class CreatePinPresenterTest {
|
|
|
|
|
@Test |
|
|
|
|
fun `present - complete flow`() = runTest { |
|
|
|
|
|
|
|
|
|
val presenter = createCreatePinPresenter() |
|
|
|
|
val presenter = createSetupPinPresenter() |
|
|
|
|
moleculeFlow(RecompositionMode.Immediate) { |
|
|
|
|
presenter.present() |
|
|
|
|
}.test { |
|
|
|
|
awaitItem().also { state -> |
|
|
|
|
state.choosePinEntry.assertEmpty() |
|
|
|
|
state.confirmPinEntry.assertEmpty() |
|
|
|
|
assertThat(state.createPinFailure).isNull() |
|
|
|
|
assertThat(state.setupPinFailure).isNull() |
|
|
|
|
assertThat(state.isConfirmationStep).isFalse() |
|
|
|
|
state.eventSink(CreatePinEvents.OnPinEntryChanged(halfCompletePin)) |
|
|
|
|
state.eventSink(SetupPinEvents.OnPinEntryChanged(halfCompletePin)) |
|
|
|
|
} |
|
|
|
|
awaitItem().also { state -> |
|
|
|
|
state.choosePinEntry.assertText(halfCompletePin) |
|
|
|
|
state.confirmPinEntry.assertEmpty() |
|
|
|
|
assertThat(state.createPinFailure).isNull() |
|
|
|
|
assertThat(state.setupPinFailure).isNull() |
|
|
|
|
assertThat(state.isConfirmationStep).isFalse() |
|
|
|
|
state.eventSink(CreatePinEvents.OnPinEntryChanged(blacklistedPin)) |
|
|
|
|
state.eventSink(SetupPinEvents.OnPinEntryChanged(blacklistedPin)) |
|
|
|
|
} |
|
|
|
|
awaitLastSequentialItem().also { state -> |
|
|
|
|
state.choosePinEntry.assertText(blacklistedPin) |
|
|
|
|
assertThat(state.createPinFailure).isEqualTo(CreatePinFailure.PinBlacklisted) |
|
|
|
|
state.eventSink(CreatePinEvents.ClearFailure) |
|
|
|
|
assertThat(state.setupPinFailure).isEqualTo(SetupPinFailure.PinBlacklisted) |
|
|
|
|
state.eventSink(SetupPinEvents.ClearFailure) |
|
|
|
|
} |
|
|
|
|
awaitLastSequentialItem().also { state -> |
|
|
|
|
state.choosePinEntry.assertEmpty() |
|
|
|
|
assertThat(state.createPinFailure).isNull() |
|
|
|
|
state.eventSink(CreatePinEvents.OnPinEntryChanged(completePin)) |
|
|
|
|
assertThat(state.setupPinFailure).isNull() |
|
|
|
|
state.eventSink(SetupPinEvents.OnPinEntryChanged(completePin)) |
|
|
|
|
} |
|
|
|
|
awaitLastSequentialItem().also { state -> |
|
|
|
|
state.choosePinEntry.assertText(completePin) |
|
|
|
|
state.confirmPinEntry.assertEmpty() |
|
|
|
|
assertThat(state.isConfirmationStep).isTrue() |
|
|
|
|
state.eventSink(CreatePinEvents.OnPinEntryChanged(mismatchedPin)) |
|
|
|
|
state.eventSink(SetupPinEvents.OnPinEntryChanged(mismatchedPin)) |
|
|
|
|
} |
|
|
|
|
awaitLastSequentialItem().also { state -> |
|
|
|
|
state.choosePinEntry.assertText(completePin) |
|
|
|
|
state.confirmPinEntry.assertText(mismatchedPin) |
|
|
|
|
assertThat(state.createPinFailure).isEqualTo(CreatePinFailure.PinsDontMatch) |
|
|
|
|
state.eventSink(CreatePinEvents.ClearFailure) |
|
|
|
|
assertThat(state.setupPinFailure).isEqualTo(SetupPinFailure.PinsDontMatch) |
|
|
|
|
state.eventSink(SetupPinEvents.ClearFailure) |
|
|
|
|
} |
|
|
|
|
awaitLastSequentialItem().also { state -> |
|
|
|
|
state.choosePinEntry.assertEmpty() |
|
|
|
|
state.confirmPinEntry.assertEmpty() |
|
|
|
|
assertThat(state.isConfirmationStep).isFalse() |
|
|
|
|
assertThat(state.createPinFailure).isNull() |
|
|
|
|
state.eventSink(CreatePinEvents.OnPinEntryChanged(completePin)) |
|
|
|
|
assertThat(state.setupPinFailure).isNull() |
|
|
|
|
state.eventSink(SetupPinEvents.OnPinEntryChanged(completePin)) |
|
|
|
|
} |
|
|
|
|
awaitLastSequentialItem().also { state -> |
|
|
|
|
state.choosePinEntry.assertText(completePin) |
|
|
|
|
state.confirmPinEntry.assertEmpty() |
|
|
|
|
assertThat(state.isConfirmationStep).isTrue() |
|
|
|
|
state.eventSink(CreatePinEvents.OnPinEntryChanged(completePin)) |
|
|
|
|
state.eventSink(SetupPinEvents.OnPinEntryChanged(completePin)) |
|
|
|
|
} |
|
|
|
|
awaitItem().also { state -> |
|
|
|
|
state.choosePinEntry.assertText(completePin) |
|
|
|
@ -108,7 +108,7 @@ class CreatePinPresenterTest {
@@ -108,7 +108,7 @@ class CreatePinPresenterTest {
|
|
|
|
|
assertThat(isEmpty).isTrue() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private fun createCreatePinPresenter(): CreatePinPresenter { |
|
|
|
|
return CreatePinPresenter(PinValidator(), aBuildMeta()) |
|
|
|
|
private fun createSetupPinPresenter(): SetupPinPresenter { |
|
|
|
|
return SetupPinPresenter(PinValidator(), aBuildMeta()) |
|
|
|
|
} |
|
|
|
|
} |