mirror of
https://github.com/bitwarden/android.git
synced 2026-07-29 23:28:08 -05:00
PM-18877 Respect system app specific language selection on Android 13 and up. (#4849)
This commit is contained in:
@@ -97,6 +97,7 @@ class MainViewModelTest : BaseViewModelTest() {
|
||||
every { isScreenCaptureAllowed } returns true
|
||||
every { isScreenCaptureAllowedStateFlow } returns mutableScreenCaptureAllowedFlow
|
||||
every { storeUserHasLoggedInValue(any()) } just runs
|
||||
every { appLanguage = any() } just runs
|
||||
}
|
||||
private val authRepository = mockk<AuthRepository> {
|
||||
every { activeUserId } returns DEFAULT_USER_STATE.activeUserId
|
||||
@@ -1090,6 +1091,15 @@ class MainViewModelTest : BaseViewModelTest() {
|
||||
verify { appResumeManager.setResumeScreen(AppResumeScreenData.GeneratorScreen) }
|
||||
}
|
||||
|
||||
@Suppress("MaxLineLength")
|
||||
@Test
|
||||
fun `on AppSpecificLanguageUpdate, the repository value should be updated with the specified value`() {
|
||||
val viewModel = createViewModel()
|
||||
viewModel.trySendAction(MainAction.AppSpecificLanguageUpdate(AppLanguage.SPANISH))
|
||||
|
||||
verify { settingsRepository.appLanguage = AppLanguage.SPANISH }
|
||||
}
|
||||
|
||||
private fun createViewModel(
|
||||
initialSpecialCircumstance: SpecialCircumstance? = null,
|
||||
) = MainViewModel(
|
||||
|
||||
+27
-21
@@ -11,11 +11,14 @@ import io.mockk.just
|
||||
import io.mockk.mockk
|
||||
import io.mockk.runs
|
||||
import io.mockk.verify
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.update
|
||||
import kotlinx.coroutines.test.runTest
|
||||
import org.junit.jupiter.api.Assertions.assertEquals
|
||||
import org.junit.jupiter.api.Test
|
||||
|
||||
class AppearanceViewModelTest : BaseViewModelTest() {
|
||||
private val mutableAppLanguageStateFlow = MutableStateFlow(AppLanguage.DEFAULT)
|
||||
private val mockSettingsRepository = mockk<SettingsRepository> {
|
||||
every { appLanguage } returns AppLanguage.DEFAULT
|
||||
every { appTheme } returns AppTheme.DEFAULT
|
||||
@@ -23,6 +26,7 @@ class AppearanceViewModelTest : BaseViewModelTest() {
|
||||
every { isIconLoadingDisabled } returns false
|
||||
every { isIconLoadingDisabled = true } just runs
|
||||
every { appTheme = AppTheme.DARK } just runs
|
||||
every { appLanguageStateFlow } returns mutableAppLanguageStateFlow
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -48,30 +52,32 @@ class AppearanceViewModelTest : BaseViewModelTest() {
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `on LanguageChange should update state and store language`() = runTest {
|
||||
val viewModel = createViewModel(
|
||||
settingsRepository = mockSettingsRepository,
|
||||
)
|
||||
viewModel.stateFlow.test {
|
||||
assertEquals(
|
||||
DEFAULT_STATE,
|
||||
awaitItem(),
|
||||
)
|
||||
viewModel.trySendAction(AppearanceAction.LanguageChange(AppLanguage.ENGLISH))
|
||||
assertEquals(
|
||||
DEFAULT_STATE.copy(
|
||||
language = AppLanguage.ENGLISH,
|
||||
),
|
||||
awaitItem(),
|
||||
)
|
||||
}
|
||||
fun `on LanguageChange should store updated language in repository`() {
|
||||
val viewModel = createViewModel()
|
||||
viewModel.trySendAction(AppearanceAction.LanguageChange(AppLanguage.ENGLISH))
|
||||
|
||||
verify {
|
||||
mockSettingsRepository.appLanguage
|
||||
mockSettingsRepository.appLanguage = AppLanguage.ENGLISH
|
||||
}
|
||||
verify { mockSettingsRepository.appLanguage = AppLanguage.ENGLISH }
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `on AppLanguageStateFlow value updated, view model language state should change`() =
|
||||
runTest {
|
||||
val viewModel = createViewModel()
|
||||
viewModel.stateFlow.test {
|
||||
assertEquals(
|
||||
DEFAULT_STATE,
|
||||
awaitItem(),
|
||||
)
|
||||
mutableAppLanguageStateFlow.update { AppLanguage.AFRIKAANS }
|
||||
assertEquals(
|
||||
DEFAULT_STATE.copy(
|
||||
language = AppLanguage.AFRIKAANS,
|
||||
),
|
||||
awaitItem(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `on ShowWebsiteIconsToggle should update state and store the value`() = runTest {
|
||||
val viewModel = createViewModel()
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
package com.x8bit.bitwarden.ui.platform.util
|
||||
|
||||
import com.x8bit.bitwarden.ui.platform.feature.settings.appearance.model.AppLanguage
|
||||
import org.junit.Test
|
||||
import org.junit.jupiter.api.Assertions.assertEquals
|
||||
import org.junit.jupiter.api.Assertions.assertNull
|
||||
import java.util.Locale
|
||||
|
||||
class LocaleExtensionsTest {
|
||||
|
||||
@Test
|
||||
fun `locale with Espanol language returns AppLanguage SPANISH`() {
|
||||
val locale = Locale("es")
|
||||
assertEquals(
|
||||
AppLanguage.SPANISH,
|
||||
locale.appLanguage,
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `locale with GB english returns AppLanguage ENGLISH_BRITISH`() {
|
||||
val locale = Locale("en-GB")
|
||||
assertEquals(
|
||||
AppLanguage.ENGLISH_BRITISH,
|
||||
locale.appLanguage,
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `locale with non existent app language returns null`() {
|
||||
val locale = Locale("😅😅😅")
|
||||
assertNull(locale.appLanguage)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user