TP-68852 | crash fix for contactInitials (#11117)

Co-authored-by: Aditya Narayan Malik <aditya.narayan@navi.com>
This commit is contained in:
Shaurya Rehan
2024-06-03 14:28:20 +05:30
committed by GitHub
parent a241c65d50
commit 92e2d12396
3 changed files with 42 additions and 14 deletions

View File

@@ -262,25 +262,25 @@ fun String.initials(): String {
}
fun String.contactInitials(): String {
if (this.isBlank()) return ""
var name = this
if (name.isBlank()) return EMPTY
if (containsOnlyEmoji(name)) return name
if (containsEmoji(name)) {
name = name.replace(Regex("[\\uD83C-\\uDBFF\\uDC00-\\uDFFF]+"), "")
name = name.replace(Regex("[\\uD83C-\\uDBFF\\uDC00-\\uDFFF]+"), EMPTY)
}
if (name.length == 1) return name.uppercase()
val nameParts = name.trim().split("\\s+".toRegex())
if (nameParts.isEmpty()) return ""
if (nameParts.isEmpty() || nameParts.all { it.isEmpty() }) return EMPTY
val firstInitial = nameParts.first().first().uppercase()
val firstInitial = nameParts.firstOrNull()?.firstOrNull()?.uppercase() ?: EMPTY
val lastInitial =
if (nameParts.size == 1) {
if (nameParts.first().length > 1) nameParts.first()[1].uppercase() else ""
if (nameParts.first().length > 1) nameParts.first()[1].uppercase() else EMPTY
} else {
nameParts.last().first().uppercase()
nameParts.lastOrNull()?.firstOrNull()?.uppercase() ?: EMPTY
}
return "$firstInitial$lastInitial"
}

View File

@@ -7,6 +7,7 @@
package com.navi.pay.utility
import com.navi.pay.utils.contactInitials
import com.navi.pay.utils.initials
import org.junit.Assert
import org.junit.Test
@@ -23,3 +24,25 @@ class InitialsUtilityTest {
Assert.assertEquals("", "".initials())
}
}
class ContactInitialsUtilityTest {
@Test
fun contactInitials() {
Assert.assertEquals("JA", "Jahanvi".contactInitials())
Assert.assertEquals("JS", "Jahanvi Singh".contactInitials())
Assert.assertEquals("JN", "Jahanvi Singh New".contactInitials())
Assert.assertEquals("J2", "Jahanvi 2".contactInitials())
Assert.assertEquals("JA", "Jahanvi \uD83D\uDE03".contactInitials())
Assert.assertEquals("JS", "Jahanvi Singh \uD83D\uDE03".contactInitials())
Assert.assertEquals("JN", "Jahanvi Singh New \uD83D\uDE03".contactInitials())
Assert.assertEquals("JS", "Jahanvi \uD83D\uDE03 Singh".contactInitials())
Assert.assertEquals("J.", "Jahanvi .".contactInitials())
Assert.assertEquals(".", ".".contactInitials())
Assert.assertEquals("\uD83D\uDE03", "\uD83D\uDE03".contactInitials())
Assert.assertEquals("UK", " Ujjwal Kumar ".contactInitials())
Assert.assertEquals("UM", " Ujjwal Kumar Maharana ".contactInitials())
Assert.assertEquals("", " ".contactInitials())
Assert.assertEquals("", "".contactInitials())
}
}

View File

@@ -9,6 +9,7 @@ package com.navi.pay.viewmodel
import androidx.lifecycle.SavedStateHandle
import com.navi.base.utils.EMPTY
import com.navi.base.utils.ResourceProvider
import com.navi.pay.common.connectivity.NaviPayNetworkConnectivity
import com.navi.pay.common.mockCoroutinesDispatcherProvider
import com.navi.pay.common.mockDeviceInfoProvider
@@ -16,6 +17,7 @@ import com.navi.pay.common.model.view.NaviPaySessionHelper
import com.navi.pay.common.repository.CommonRepository
import com.navi.pay.common.usecase.LinkedAccountsUseCase
import com.navi.pay.common.usecase.NaviPayConfigUseCase
import com.navi.pay.common.usecase.ValidateVpaUseCase
import com.navi.pay.management.common.upiid.model.view.UPIIdInputNextScreenDestination
import com.navi.pay.management.common.upiid.model.view.UPIIdScreenData
import com.navi.pay.management.common.upiid.viewmodel.UPIIdInputViewModel
@@ -33,6 +35,8 @@ class UpiIdViewModelUnitTest {
@MockK private lateinit var naviPayNetworkConnectivity: NaviPayNetworkConnectivity
@MockK private lateinit var naviPayConfigUseCase: NaviPayConfigUseCase
@MockK private lateinit var naviPaySessionHelper: NaviPaySessionHelper
@MockK private lateinit var validateVpaUseCase: ValidateVpaUseCase
@MockK private lateinit var resourceProvider: ResourceProvider
@OptIn(ExperimentalCoroutinesApi::class)
private val coroutineDispatcher = UnconfinedTestDispatcher()
@@ -56,17 +60,17 @@ class UpiIdViewModelUnitTest {
@Test
fun upiIdSuggestionsIsListCorrect() {
val upiIdInputViewModel =
UPIIdInputViewModel(
savedStateHandle,
mockCoroutinesDispatcherProvider(coroutineDispatcher),
mockDeviceInfoProvider(),
commonRepository,
linkedAccountsUseCase,
naviPayNetworkConnectivity,
naviPayConfigUseCase,
naviPaySessionHelper
naviPaySessionHelper,
validateVpaUseCase,
resourceProvider
)
// showSuggestions = false and List Empty Cases
@@ -228,11 +232,12 @@ class UpiIdViewModelUnitTest {
savedStateHandle,
mockCoroutinesDispatcherProvider(coroutineDispatcher),
mockDeviceInfoProvider(),
commonRepository,
linkedAccountsUseCase,
naviPayNetworkConnectivity,
naviPayConfigUseCase,
naviPaySessionHelper
naviPaySessionHelper,
validateVpaUseCase,
resourceProvider
)
Assert.assertEquals(EMPTY, upiIdInputViewModel.getFormattedUpiIdInput(input = EMPTY))
Assert.assertEquals("Adi", upiIdInputViewModel.getFormattedUpiIdInput(input = "Adi"))