diff options
| author | Jonatan Rhodin <jonatan.rhodin@mullvad.net> | 2024-01-04 15:49:28 +0100 |
|---|---|---|
| committer | Jonatan Rhodin <jonatan.rhodin@mullvad.net> | 2024-01-04 15:49:28 +0100 |
| commit | d081fab3bd95b306b432fce38c926db37f7d68b6 (patch) | |
| tree | c24c44f5238d5d398b4b3c0fc5c12a768d11ad7f /android/app/src | |
| parent | aa98204d5e3ab402b9006ca2ddffb33397739ec0 (diff) | |
| parent | 57d3634c3e5e76d8d541732721b92a6ae27c9079 (diff) | |
| download | mullvadvpn-d081fab3bd95b306b432fce38c926db37f7d68b6.tar.xz mullvadvpn-d081fab3bd95b306b432fce38c926db37f7d68b6.zip | |
Merge branch 'voucher-error-not-removed-when-changing-input-droid-545'
Diffstat (limited to 'android/app/src')
2 files changed, 27 insertions, 0 deletions
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VoucherDialogViewModel.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VoucherDialogViewModel.kt index 0cc55b992c..b26429f18b 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VoucherDialogViewModel.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VoucherDialogViewModel.kt @@ -66,6 +66,8 @@ class VoucherDialogViewModel( } fun onVoucherInputChange(voucherString: String) { + // Remove any errors when the user starts typing again + vmState.update { VoucherDialogState.Default } if (VoucherRegexHelper.validate(voucherString)) { val trimmedVoucher = VoucherRegexHelper.trim(voucherString) voucherInput.value = diff --git a/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/VoucherDialogViewModelTest.kt b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/VoucherDialogViewModelTest.kt index 01ce6659cb..bfa068a381 100644 --- a/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/VoucherDialogViewModelTest.kt +++ b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/VoucherDialogViewModelTest.kt @@ -122,6 +122,31 @@ class VoucherDialogViewModelTest { } } + @Test + fun testResetStateAfterChangingInput() = runTest { + val voucher = DUMMY_INVALID_VOUCHER + val dummyStringResource = DUMMY_STRING_RESOURCE + + // Arrange + every { mockServiceConnectionManager.voucherRedeemer() } returns mockVoucherRedeemer + every { mockResources.getString(any()) } returns dummyStringResource + every { mockVoucherSubmission.timeAdded } returns 0 + coEvery { mockVoucherRedeemer.submit(voucher) } returns + VoucherSubmissionResult.Error(VoucherSubmissionError.OtherError) + + // Act, Assert + viewModel.uiState.test { + assertEquals(viewModel.uiState.value, awaitItem()) + serviceConnectionState.value = + ServiceConnectionState.ConnectedReady(mockServiceConnectionContainer) + viewModel.onRedeem(voucher) + assertTrue { awaitItem().voucherViewModelState is VoucherDialogState.Verifying } + assertTrue { awaitItem().voucherViewModelState is VoucherDialogState.Error } + viewModel.onVoucherInputChange(DUMMY_VALID_VOUCHER) + assertTrue { awaitItem().voucherViewModelState is VoucherDialogState.Default } + } + } + companion object { private const val DUMMY_VALID_VOUCHER = "dummy_valid_voucher" private const val DUMMY_INVALID_VOUCHER = "dummy_invalid_voucher" |
