Add unit tests for FindByViewModel.

Closes #14145
This commit is contained in:
Sagar
2025-05-14 23:03:08 +05:30
committed by Cody Henthorne
parent 92e1f68c6d
commit 418ce68a97
3 changed files with 283 additions and 12 deletions

View File

@@ -136,15 +136,13 @@ class FindByActivity : PassphraseRequiredActivity() {
onNavigationClick = { finishAfterTransition() },
navigationIcon = ImageVector.vectorResource(id = R.drawable.symbol_arrow_start_24)
) {
val context = LocalContext.current
Content(
paddingValues = it,
state = state,
onUserEntryChanged = viewModel::onUserEntryChanged,
onNextClick = {
lifecycleScope.launch {
when (val result = viewModel.onNextClicked(context)) {
when (val result = viewModel.onNextClicked()) {
is FindByResult.Success -> {
setResult(RESULT_OK, Intent().putExtra(RECIPIENT_ID, result.recipientId))
finishAfterTransition()
@@ -193,10 +191,6 @@ class FindByActivity : PassphraseRequiredActivity() {
val body = if (state.mode == FindByMode.USERNAME) {
stringResource(id = R.string.FindByActivity__s_is_not_a_valid_username, state.userEntry)
} else {
val formattedNumber = remember(state.userEntry) {
val cleansed = state.userEntry.removePrefix(state.selectedCountry.countryCode.toString())
E164Util.formatAsE164WithCountryCodeForDisplay(state.selectedCountry.countryCode.toString(), cleansed)
}
stringResource(id = R.string.FindByActivity__s_is_not_a_valid_phone_number, state.userEntry)
}

View File

@@ -5,7 +5,6 @@
package org.thoughtcrime.securesms.recipients.ui.findby
import android.content.Context
import androidx.annotation.WorkerThread
import androidx.compose.runtime.State
import androidx.compose.runtime.mutableStateOf
@@ -43,13 +42,13 @@ class FindByViewModel(
internalState.value = state.value.copy(selectedCountry = country)
}
suspend fun onNextClicked(context: Context): FindByResult {
suspend fun onNextClicked(): FindByResult {
internalState.value = state.value.copy(isLookupInProgress = true)
val findByResult = viewModelScope.async(context = Dispatchers.IO) {
if (state.value.mode == FindByMode.USERNAME) {
performUsernameLookup()
} else {
performPhoneLookup(context)
performPhoneLookup()
}
}.await()
@@ -66,14 +65,14 @@ class FindByViewModel(
}
return when (val result = UsernameRepository.fetchAciForUsername(usernameString = username.removePrefix("@"))) {
UsernameRepository.UsernameAciFetchResult.NetworkError -> FindByResult.NotFound()
UsernameRepository.UsernameAciFetchResult.NetworkError -> FindByResult.NetworkError
UsernameRepository.UsernameAciFetchResult.NotFound -> FindByResult.NotFound()
is UsernameRepository.UsernameAciFetchResult.Success -> FindByResult.Success(Recipient.externalUsername(result.aci, username).id)
}
}
@WorkerThread
private fun performPhoneLookup(context: Context): FindByResult {
private fun performPhoneLookup(): FindByResult {
val stateSnapshot = state.value
val countryCode = stateSnapshot.selectedCountry.countryCode
val nationalNumber = stateSnapshot.userEntry.removePrefix(countryCode.toString())