mirror of
https://github.com/bitwarden/android.git
synced 2024-10-31 15:15:34 +03:00
BIT-1729: Re-load the options to apply policy values (#1000)
This commit is contained in:
parent
6bfb9440b5
commit
5928987a9b
2 changed files with 75 additions and 6 deletions
|
@ -101,10 +101,7 @@ class GeneratorViewModel @Inject constructor(
|
|||
|
||||
init {
|
||||
stateFlow.onEach { savedStateHandle[KEY_STATE] = it }.launchIn(viewModelScope)
|
||||
when (val selectedType = mutableStateFlow.value.selectedType) {
|
||||
is Passcode -> loadPasscodeOptions(selectedType, usePolicyDefault = true)
|
||||
is Username -> loadUsernameOptions(selectedType)
|
||||
}
|
||||
loadOptions()
|
||||
policyManager
|
||||
.getActivePoliciesFlow<PolicyInformation.PasswordGenerator>()
|
||||
.map { GeneratorAction.Internal.PasswordGeneratorPolicyReceive(it) }
|
||||
|
@ -251,6 +248,13 @@ class GeneratorViewModel @Inject constructor(
|
|||
|
||||
//region Generation Handlers
|
||||
|
||||
private fun loadOptions() {
|
||||
when (val selectedType = state.selectedType) {
|
||||
is Passcode -> loadPasscodeOptions(selectedType = selectedType, usePolicyDefault = true)
|
||||
is Username -> loadUsernameOptions(selectedType = selectedType)
|
||||
}
|
||||
}
|
||||
|
||||
@Suppress("CyclomaticComplexMethod")
|
||||
private fun loadPasscodeOptions(selectedType: Passcode, usePolicyDefault: Boolean) {
|
||||
val passwordType = if (usePolicyDefault) {
|
||||
|
@ -652,6 +656,7 @@ class GeneratorViewModel @Inject constructor(
|
|||
action: GeneratorAction.Internal.PasswordGeneratorPolicyReceive,
|
||||
) {
|
||||
mutableStateFlow.update { it.copy(isUnderPolicy = action.policies.any()) }
|
||||
loadOptions()
|
||||
}
|
||||
|
||||
//endregion Generated Field Handlers
|
||||
|
|
|
@ -139,10 +139,74 @@ class GeneratorViewModelTest : BaseViewModelTest() {
|
|||
|
||||
viewModel.stateFlow.test {
|
||||
assertEquals(initialPasscodeState, awaitItem())
|
||||
every {
|
||||
policyManager.getActivePolicies(type = PolicyTypeJson.PASSWORD_GENERATOR)
|
||||
} returns policies
|
||||
mutablePolicyFlow.tryEmit(value = policies)
|
||||
assertEquals(initialPasscodeState.copy(isUnderPolicy = true), awaitItem())
|
||||
assertEquals(
|
||||
initialPasscodeState.copy(
|
||||
selectedType = GeneratorState.MainType.Passcode(
|
||||
selectedType = GeneratorState.MainType.Passcode.PasscodeType.Password(
|
||||
length = 14,
|
||||
minLength = 10,
|
||||
maxLength = 128,
|
||||
useCapitals = true,
|
||||
capitalsEnabled = false,
|
||||
useLowercase = true,
|
||||
lowercaseEnabled = false,
|
||||
useNumbers = true,
|
||||
numbersEnabled = false,
|
||||
useSpecialChars = true,
|
||||
specialCharsEnabled = false,
|
||||
minNumbers = 3,
|
||||
minNumbersAllowed = 3,
|
||||
maxNumbersAllowed = 5,
|
||||
minSpecial = 3,
|
||||
minSpecialAllowed = 3,
|
||||
maxSpecialAllowed = 5,
|
||||
avoidAmbiguousChars = false,
|
||||
ambiguousCharsEnabled = true,
|
||||
isUserInteracting = false,
|
||||
),
|
||||
),
|
||||
isUnderPolicy = true,
|
||||
),
|
||||
awaitItem(),
|
||||
)
|
||||
every {
|
||||
policyManager.getActivePolicies(type = PolicyTypeJson.PASSWORD_GENERATOR)
|
||||
} returns emptyList()
|
||||
mutablePolicyFlow.tryEmit(value = emptyList())
|
||||
assertEquals(initialPasscodeState.copy(isUnderPolicy = false), awaitItem())
|
||||
assertEquals(
|
||||
initialPasscodeState.copy(
|
||||
selectedType = GeneratorState.MainType.Passcode(
|
||||
selectedType = GeneratorState.MainType.Passcode.PasscodeType.Password(
|
||||
length = 14,
|
||||
minLength = 5,
|
||||
maxLength = 128,
|
||||
useCapitals = true,
|
||||
capitalsEnabled = true,
|
||||
useLowercase = true,
|
||||
lowercaseEnabled = true,
|
||||
useNumbers = true,
|
||||
numbersEnabled = true,
|
||||
useSpecialChars = true,
|
||||
specialCharsEnabled = true,
|
||||
minNumbers = 3,
|
||||
minNumbersAllowed = 0,
|
||||
maxNumbersAllowed = 5,
|
||||
minSpecial = 3,
|
||||
minSpecialAllowed = 0,
|
||||
maxSpecialAllowed = 5,
|
||||
avoidAmbiguousChars = false,
|
||||
ambiguousCharsEnabled = true,
|
||||
isUserInteracting = false,
|
||||
),
|
||||
),
|
||||
isUnderPolicy = false,
|
||||
),
|
||||
awaitItem(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue