Pin create: add test for presenter

This commit is contained in:
ganfra 2023-10-19 15:45:11 +02:00
parent 3a4d32f79d
commit e88a5fc858
9 changed files with 142 additions and 15 deletions

View file

@ -57,7 +57,7 @@ class CreatePinPresenter @Inject constructor(
if (confirmPinEntry == choosePinEntry) {
//TODO save in db and navigate to next screen
} else {
createPinFailure = CreatePinFailure.ConfirmationPinNotMatching
createPinFailure = CreatePinFailure.PinsDontMatch
}
}
} else {
@ -74,11 +74,11 @@ class CreatePinPresenter @Inject constructor(
}
CreatePinEvents.ClearFailure -> {
when (createPinFailure) {
is CreatePinFailure.ConfirmationPinNotMatching -> {
is CreatePinFailure.PinsDontMatch -> {
choosePinEntry = PinEntry.empty(PIN_SIZE)
confirmPinEntry = PinEntry.empty(PIN_SIZE)
}
is CreatePinFailure.ChosenPinBlacklisted -> {
is CreatePinFailure.PinBlacklisted -> {
choosePinEntry = PinEntry.empty(PIN_SIZE)
}
null -> Unit

View file

@ -35,11 +35,11 @@ open class CreatePinStateProvider : PreviewParameterProvider<CreatePinState> {
choosePinEntry = PinEntry.empty(4).fillWith("1789"),
confirmPinEntry = PinEntry.empty(4).fillWith("1788"),
isConfirmationStep = true,
creationFailure = CreatePinFailure.ConfirmationPinNotMatching
creationFailure = CreatePinFailure.PinsDontMatch
),
aCreatePinState(
choosePinEntry = PinEntry.empty(4).fillWith("1111"),
creationFailure = CreatePinFailure.ChosenPinBlacklisted
creationFailure = CreatePinFailure.PinBlacklisted
),
)

View file

@ -125,16 +125,16 @@ private fun CreatePinContent(
@Composable
private fun CreatePinFailure.content(): String {
return when (this) {
CreatePinFailure.ChosenPinBlacklisted -> "You cannot choose this as your PIN code for security reasons"
CreatePinFailure.ConfirmationPinNotMatching -> "Please enter the same PIN twice"
CreatePinFailure.PinBlacklisted -> "You cannot choose this as your PIN code for security reasons"
CreatePinFailure.PinsDontMatch -> "Please enter the same PIN twice"
}
}
@Composable
private fun CreatePinFailure.title(): String {
return when (this) {
CreatePinFailure.ChosenPinBlacklisted -> "Choose a different PIN"
CreatePinFailure.ConfirmationPinNotMatching -> "PINs don't match"
CreatePinFailure.PinBlacklisted -> "Choose a different PIN"
CreatePinFailure.PinsDontMatch -> "PINs don't match"
}
}

View file

@ -17,6 +17,6 @@
package io.element.android.features.lockscreen.impl.create.validation
sealed interface CreatePinFailure {
data object ChosenPinBlacklisted : CreatePinFailure
data object ConfirmationPinNotMatching : CreatePinFailure
data object PinBlacklisted : CreatePinFailure
data object PinsDontMatch : CreatePinFailure
}

View file

@ -16,13 +16,17 @@
package io.element.android.features.lockscreen.impl.create.validation
import androidx.annotation.VisibleForTesting
import io.element.android.features.lockscreen.impl.create.model.PinEntry
import javax.inject.Inject
private val BLACKLIST = listOf("0000", "1234")
class PinValidator @Inject constructor() {
companion object {
@VisibleForTesting
val BLACKLIST = listOf("0000", "1234")
}
sealed interface Result {
data object Valid : Result
data class Invalid(val failure: CreatePinFailure) : Result
@ -32,7 +36,7 @@ class PinValidator @Inject constructor() {
val pinAsText = pinEntry.toText()
val isBlacklisted = BLACKLIST.any { it == pinAsText }
return if (isBlacklisted) {
Result.Invalid(CreatePinFailure.ChosenPinBlacklisted)
Result.Invalid(CreatePinFailure.PinBlacklisted)
} else {
Result.Valid
}