Skip to content
Snippets Groups Projects
Unverified Commit be1656f6 authored by Oliver Zimmerman's avatar Oliver Zimmerman Committed by GitHub
Browse files

"Invalid Tan" message is displayed when the TAN input screen is opened (EXPOSUREAPP-3646) (#1560)


* Small change to check length of TAN before checking it's validity

* Unit test adjustment to reflect changes.

* Adjusted comparison to use less than operator. Additional tests.

* Seperated tan valid and tan length check fore better readibility. Adjusted tests

* lint fix

* use new isCorrectLength in isTanValidFormat

Co-authored-by: default avatarharambasicluka <64483219+harambasicluka@users.noreply.github.com>
parent df033e9e
No related branches found
No related tags found
No related merge requests found
...@@ -40,7 +40,11 @@ class SubmissionTanFragment : Fragment(R.layout.fragment_submission_tan), AutoIn ...@@ -40,7 +40,11 @@ class SubmissionTanFragment : Fragment(R.layout.fragment_submission_tan), AutoIn
binding.uiState = it binding.uiState = it
submission_tan_character_error.setGone(it.areCharactersCorrect) submission_tan_character_error.setGone(it.areCharactersCorrect)
submission_tan_error.setGone(it.isTanValidFormat) if (it.isCorrectLength) {
submission_tan_error.setGone(it.isTanValid)
} else {
submission_tan_error.setGone(true)
}
} }
binding.submissionTanContent.submissionTanInput.listener = { tan -> binding.submissionTanContent.submissionTanInput.listener = { tan ->
......
...@@ -28,7 +28,8 @@ class SubmissionTanViewModel @AssistedInject constructor( ...@@ -28,7 +28,8 @@ class SubmissionTanViewModel @AssistedInject constructor(
UIState( UIState(
isTanValid = currentTan.isTanValid, isTanValid = currentTan.isTanValid,
isTanValidFormat = currentTan.isTanValidFormat, isTanValidFormat = currentTan.isTanValidFormat,
areCharactersCorrect = currentTan.areCharactersValid areCharactersCorrect = currentTan.areCharactersValid,
isCorrectLength = currentTan.isCorrectLength
) )
}.asLiveData(context = dispatcherProvider.Default) }.asLiveData(context = dispatcherProvider.Default)
...@@ -73,7 +74,8 @@ class SubmissionTanViewModel @AssistedInject constructor( ...@@ -73,7 +74,8 @@ class SubmissionTanViewModel @AssistedInject constructor(
data class UIState( data class UIState(
val isTanValid: Boolean = false, val isTanValid: Boolean = false,
val areCharactersCorrect: Boolean = false, val areCharactersCorrect: Boolean = false,
val isTanValidFormat: Boolean = false val isTanValidFormat: Boolean = false,
val isCorrectLength: Boolean = false
) )
@AssistedInject.Factory @AssistedInject.Factory
......
...@@ -8,8 +8,9 @@ data class Tan( ...@@ -8,8 +8,9 @@ data class Tan(
val value: String val value: String
) { ) {
val isCorrectLength = value.length == MAX_LENGTH
val areCharactersValid = allCharactersValid(value) val areCharactersValid = allCharactersValid(value)
val isTanValidFormat = value.length == MAX_LENGTH && isChecksumValid(value) val isTanValidFormat = isCorrectLength && isChecksumValid(value)
val isTanValid = areCharactersValid && isTanValidFormat val isTanValid = areCharactersValid && isTanValidFormat
companion object { companion object {
......
...@@ -28,15 +28,19 @@ class SubmissionTanViewModelTest : BaseTest() { ...@@ -28,15 +28,19 @@ class SubmissionTanViewModelTest : BaseTest() {
viewModel.onTanChanged("ZWFPC7NG47") viewModel.onTanChanged("ZWFPC7NG47")
viewModel.state.value!!.isTanValid shouldBe true viewModel.state.value!!.isTanValid shouldBe true
viewModel.state.value!!.isCorrectLength shouldBe true
viewModel.onTanChanged("ABC") viewModel.onTanChanged("ABC")
viewModel.state.value!!.isTanValid shouldBe false viewModel.state.value!!.isTanValid shouldBe false
viewModel.state.value!!.isCorrectLength shouldBe false
viewModel.onTanChanged("ZWFPC7NG48") viewModel.onTanChanged("ZWFPC7NG48")
viewModel.state.value!!.isTanValid shouldBe false viewModel.state.value!!.isTanValid shouldBe false
viewModel.state.value!!.isCorrectLength shouldBe true
viewModel.onTanChanged("ZWFPC7NG4A") viewModel.onTanChanged("ZWFPC7NG4A")
viewModel.state.value!!.isTanValid shouldBe false viewModel.state.value!!.isTanValid shouldBe false
viewModel.state.value!!.isCorrectLength shouldBe true
} }
@Test @Test
......
...@@ -46,6 +46,26 @@ class TanTest : BaseTest() { ...@@ -46,6 +46,26 @@ class TanTest : BaseTest() {
} }
} }
@Test
fun isTanValid() {
val validTans = arrayOf(
"9A3B578UMG", "DEU7TKSV3H", "PTPHM35RP4", "V923D59AT8", "H9NC5CQ34E"
)
for (tan in validTans) {
Tan.allCharactersValid(tan) shouldBe true
Tan.isChecksumValid(tan) shouldBe true
(tan.length == Tan.MAX_LENGTH) shouldBe true
}
// invalid tans due to length and/or invalid characters
val invalidTans = arrayOf(
"ABÖAA1", "-1234", "PTPHM15RP4", "aAASd A"
)
for (tan in invalidTans) {
Tan.allCharactersValid(tan) shouldBe false
}
}
@Test @Test
fun isChecksumValid() { fun isChecksumValid() {
// valid // valid
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment