diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/tan/SubmissionTanFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/tan/SubmissionTanFragment.kt index a9c953118a6983ab44db4e83d669d41185e25c00..7f95fa7c859f30d8b35da16d36e28aea968e2f1d 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/tan/SubmissionTanFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/tan/SubmissionTanFragment.kt @@ -40,7 +40,11 @@ class SubmissionTanFragment : Fragment(R.layout.fragment_submission_tan), AutoIn binding.uiState = it 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 -> diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/tan/SubmissionTanViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/tan/SubmissionTanViewModel.kt index c947e09a91c7507945441f918e49abe8306814a2..28dbe39bc10303fb8df48d1c1458be736bde5f4f 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/tan/SubmissionTanViewModel.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/tan/SubmissionTanViewModel.kt @@ -28,7 +28,8 @@ class SubmissionTanViewModel @AssistedInject constructor( UIState( isTanValid = currentTan.isTanValid, isTanValidFormat = currentTan.isTanValidFormat, - areCharactersCorrect = currentTan.areCharactersValid + areCharactersCorrect = currentTan.areCharactersValid, + isCorrectLength = currentTan.isCorrectLength ) }.asLiveData(context = dispatcherProvider.Default) @@ -73,7 +74,8 @@ class SubmissionTanViewModel @AssistedInject constructor( data class UIState( val isTanValid: Boolean = false, val areCharactersCorrect: Boolean = false, - val isTanValidFormat: Boolean = false + val isTanValidFormat: Boolean = false, + val isCorrectLength: Boolean = false ) @AssistedInject.Factory diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/tan/Tan.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/tan/Tan.kt index a4d883605477fbc1295047d10155bb8bb5305b22..8cfc0e09483da70ab08b16405b7a9aac1ce9bb34 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/tan/Tan.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/tan/Tan.kt @@ -8,8 +8,9 @@ data class Tan( val value: String ) { + val isCorrectLength = value.length == MAX_LENGTH val areCharactersValid = allCharactersValid(value) - val isTanValidFormat = value.length == MAX_LENGTH && isChecksumValid(value) + val isTanValidFormat = isCorrectLength && isChecksumValid(value) val isTanValid = areCharactersValid && isTanValidFormat companion object { diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/tan/SubmissionTanViewModelTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/tan/SubmissionTanViewModelTest.kt index fe2bd9043d442472d3a2b8739ffa07a583545f85..ee57585af900af56835c3bf36089e72e85ece59b 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/tan/SubmissionTanViewModelTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/tan/SubmissionTanViewModelTest.kt @@ -28,15 +28,19 @@ class SubmissionTanViewModelTest : BaseTest() { viewModel.onTanChanged("ZWFPC7NG47") viewModel.state.value!!.isTanValid shouldBe true + viewModel.state.value!!.isCorrectLength shouldBe true viewModel.onTanChanged("ABC") viewModel.state.value!!.isTanValid shouldBe false + viewModel.state.value!!.isCorrectLength shouldBe false viewModel.onTanChanged("ZWFPC7NG48") viewModel.state.value!!.isTanValid shouldBe false + viewModel.state.value!!.isCorrectLength shouldBe true viewModel.onTanChanged("ZWFPC7NG4A") viewModel.state.value!!.isTanValid shouldBe false + viewModel.state.value!!.isCorrectLength shouldBe true } @Test diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/tan/TanTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/tan/TanTest.kt index 4a011b972587c5bc14a74e2b0bf002a1e70259ce..927c107ed5ebf2d5494a8fc5a6cfd43ceea030cd 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/tan/TanTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/tan/TanTest.kt @@ -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 fun isChecksumValid() { // valid