From be1656f6063f11b8f331eb8a93a6ad03eac3630c Mon Sep 17 00:00:00 2001 From: Oliver Zimmerman <oezimmerman@gmail.com> Date: Tue, 10 Nov 2020 09:06:17 +0000 Subject: [PATCH] "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: harambasicluka <64483219+harambasicluka@users.noreply.github.com> --- .../submission/tan/SubmissionTanFragment.kt | 6 +++++- .../submission/tan/SubmissionTanViewModel.kt | 6 ++++-- .../coronawarnapp/ui/submission/tan/Tan.kt | 3 ++- .../tan/SubmissionTanViewModelTest.kt | 4 ++++ .../ui/submission/tan/TanTest.kt | 20 +++++++++++++++++++ 5 files changed, 35 insertions(+), 4 deletions(-) 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 a9c953118..7f95fa7c8 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 c947e09a9..28dbe39bc 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 a4d883605..8cfc0e094 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 fe2bd9043..ee57585af 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 4a011b972..927c107ed 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 -- GitLab