Loading feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/AccountSetupViewModel.kt +29 −25 Original line number Diff line number Diff line Loading @@ -62,31 +62,6 @@ class AccountSetupViewModel( onNext() } private fun onBack() { when (state.value.setupStep) { SetupStep.AUTO_CONFIG -> navigateBack() SetupStep.INCOMING_CONFIG -> changeToSetupStep(SetupStep.AUTO_CONFIG) SetupStep.INCOMING_VALIDATION -> { if (state.value.isAutomaticConfig) { changeToSetupStep(SetupStep.AUTO_CONFIG) } else { changeToSetupStep(SetupStep.INCOMING_CONFIG) } } SetupStep.OUTGOING_CONFIG -> changeToSetupStep(SetupStep.INCOMING_VALIDATION) SetupStep.OUTGOING_VALIDATION -> { if (state.value.isAutomaticConfig) { changeToSetupStep(SetupStep.AUTO_CONFIG) } else { changeToSetupStep(SetupStep.OUTGOING_CONFIG) } } SetupStep.OPTIONS -> changeToSetupStep(SetupStep.OUTGOING_VALIDATION) } } private fun onNext() { when (state.value.setupStep) { SetupStep.AUTO_CONFIG -> { Loading Loading @@ -125,6 +100,35 @@ class AccountSetupViewModel( } } private fun onBack() { when (state.value.setupStep) { SetupStep.AUTO_CONFIG -> navigateBack() SetupStep.INCOMING_CONFIG -> changeToSetupStep(SetupStep.AUTO_CONFIG) SetupStep.INCOMING_VALIDATION -> { if (state.value.isAutomaticConfig) { changeToSetupStep(SetupStep.AUTO_CONFIG) } else { changeToSetupStep(SetupStep.INCOMING_CONFIG) } } SetupStep.OUTGOING_CONFIG -> changeToSetupStep(SetupStep.INCOMING_CONFIG) SetupStep.OUTGOING_VALIDATION -> { if (state.value.isAutomaticConfig) { changeToSetupStep(SetupStep.AUTO_CONFIG) } else { changeToSetupStep(SetupStep.OUTGOING_CONFIG) } } SetupStep.OPTIONS -> if (state.value.isAutomaticConfig) { changeToSetupStep(SetupStep.AUTO_CONFIG) } else { changeToSetupStep(SetupStep.OUTGOING_CONFIG) } } } private fun changeToSetupStep(setupStep: SetupStep) { if (setupStep == SetupStep.AUTO_CONFIG) { authStateStorage.updateAuthorizationState(authorizationState = null) Loading feature/account/setup/src/test/kotlin/app/k9mail/feature/account/setup/ui/AccountSetupViewModelTest.kt +124 −48 Original line number Diff line number Diff line package app.k9mail.feature.account.setup.ui import app.cash.turbine.testIn import app.k9mail.autodiscovery.api.AutoDiscoveryResult import app.k9mail.autodiscovery.api.ImapServerSettings import app.k9mail.autodiscovery.api.SmtpServerSettings import app.k9mail.core.common.net.toHostname import app.k9mail.core.common.net.toPort import app.k9mail.core.ui.compose.testing.MainDispatcherRule import app.k9mail.core.ui.compose.testing.mvi.assertThatAndMviTurbinesConsumed import app.k9mail.core.ui.compose.testing.mvi.turbinesWithInitialStateCheck import app.k9mail.feature.account.setup.domain.entity.AccountOptions import app.k9mail.feature.account.setup.domain.entity.AuthenticationType import app.k9mail.feature.account.setup.domain.entity.ConnectionSecurity Loading @@ -33,7 +34,6 @@ import app.k9mail.feature.account.setup.ui.outgoing.toValidationState import app.k9mail.feature.account.setup.ui.validation.FakeAccountValidationViewModel import app.k9mail.feature.account.setup.ui.validation.InMemoryAuthStateStorage import assertk.assertThat import assertk.assertions.assertThatAndTurbinesConsumed import assertk.assertions.isEqualTo import assertk.assertions.isNull import assertk.assertions.prop Loading Loading @@ -83,17 +83,7 @@ class AccountSetupViewModelTest { optionsViewModel = optionsViewModel, authStateStorage = authStateStorage, ) val stateTurbine = viewModel.state.testIn(backgroundScope) val effectTurbine = viewModel.effect.testIn(backgroundScope) val turbines = listOf(stateTurbine, effectTurbine) // Initial state assertThatAndTurbinesConsumed( actual = stateTurbine.awaitItem(), turbines = turbines, ) { prop(State::setupStep).isEqualTo(SetupStep.AUTO_CONFIG) } val turbines = turbinesWithInitialStateCheck(viewModel, State(setupStep = SetupStep.AUTO_CONFIG)) autoDiscoveryViewModel.initState(AUTODISCOVERY_STATE) viewModel.event( Loading Loading @@ -130,8 +120,8 @@ class AccountSetupViewModelTest { ), ) assertThatAndTurbinesConsumed( actual = stateTurbine.awaitItem(), assertThatAndMviTurbinesConsumed( actual = turbines.stateTurbine.awaitItem(), turbines = turbines, ) { prop(State::setupStep).isEqualTo(SetupStep.INCOMING_CONFIG) Loading @@ -141,8 +131,8 @@ class AccountSetupViewModelTest { assertThat(incomingValidationViewModel.state.value).isEqualTo(expectedIncomingConfigState.toValidationState()) assertThatAndTurbinesConsumed( actual = stateTurbine.awaitItem(), assertThatAndMviTurbinesConsumed( actual = turbines.stateTurbine.awaitItem(), turbines = turbines, ) { prop(State::setupStep).isEqualTo(SetupStep.INCOMING_VALIDATION) Loading @@ -150,8 +140,8 @@ class AccountSetupViewModelTest { viewModel.event(AccountSetupContract.Event.OnNext) assertThatAndTurbinesConsumed( actual = stateTurbine.awaitItem(), assertThatAndMviTurbinesConsumed( actual = turbines.stateTurbine.awaitItem(), turbines = turbines, ) { prop(State::setupStep).isEqualTo(SetupStep.OUTGOING_CONFIG) Loading @@ -161,8 +151,8 @@ class AccountSetupViewModelTest { assertThat(outgoingValidationViewModel.state.value).isEqualTo(expectedOutgoingConfigState.toValidationState()) assertThatAndTurbinesConsumed( actual = stateTurbine.awaitItem(), assertThatAndMviTurbinesConsumed( actual = turbines.stateTurbine.awaitItem(), turbines = turbines, ) { prop(State::setupStep).isEqualTo(SetupStep.OUTGOING_VALIDATION) Loading @@ -170,8 +160,8 @@ class AccountSetupViewModelTest { viewModel.event(AccountSetupContract.Event.OnNext) assertThatAndTurbinesConsumed( actual = stateTurbine.awaitItem(), assertThatAndMviTurbinesConsumed( actual = turbines.stateTurbine.awaitItem(), turbines = turbines, ) { prop(State::setupStep).isEqualTo(SetupStep.OPTIONS) Loading @@ -190,8 +180,8 @@ class AccountSetupViewModelTest { viewModel.event(AccountSetupContract.Event.OnNext) assertThatAndTurbinesConsumed( actual = effectTurbine.awaitItem(), assertThatAndMviTurbinesConsumed( actual = turbines.effectTurbine.awaitItem(), turbines = turbines, ) { isEqualTo(Effect.NavigateNext("accountUuid")) Loading Loading @@ -227,58 +217,144 @@ class AccountSetupViewModelTest { authStateStorage = authStateStorage, initialState = initialState, ) val stateTurbine = viewModel.state.testIn(backgroundScope) val effectTurbine = viewModel.effect.testIn(backgroundScope) val turbines = listOf(stateTurbine, effectTurbine) val turbines = turbinesWithInitialStateCheck(viewModel, initialState) // Initial state assertThatAndTurbinesConsumed( actual = stateTurbine.awaitItem(), viewModel.event(AccountSetupContract.Event.OnBack) assertThatAndMviTurbinesConsumed( actual = turbines.stateTurbine.awaitItem(), turbines = turbines, ) { prop(State::setupStep).isEqualTo(SetupStep.OPTIONS) prop(State::setupStep).isEqualTo(SetupStep.OUTGOING_CONFIG) } viewModel.event(AccountSetupContract.Event.OnBack) assertThatAndTurbinesConsumed( actual = stateTurbine.awaitItem(), assertThatAndMviTurbinesConsumed( actual = turbines.stateTurbine.awaitItem(), turbines = turbines, ) { prop(State::setupStep).isEqualTo(SetupStep.OUTGOING_VALIDATION) prop(State::setupStep).isEqualTo(SetupStep.INCOMING_CONFIG) } viewModel.event(AccountSetupContract.Event.OnBack) assertThatAndTurbinesConsumed( actual = stateTurbine.awaitItem(), assertThatAndMviTurbinesConsumed( actual = turbines.stateTurbine.awaitItem(), turbines = turbines, ) { prop(State::setupStep).isEqualTo(SetupStep.OUTGOING_CONFIG) prop(State::setupStep).isEqualTo(SetupStep.AUTO_CONFIG) } viewModel.event(AccountSetupContract.Event.OnBack) assertThatAndTurbinesConsumed( actual = stateTurbine.awaitItem(), assertThatAndMviTurbinesConsumed( actual = turbines.effectTurbine.awaitItem(), turbines = turbines, ) { prop(State::setupStep).isEqualTo(SetupStep.INCOMING_VALIDATION) isEqualTo(Effect.NavigateBack) } } @Test fun `should go back from OPTIONS step on back event when isAutomaticConfig enabled`() = runTest { val initialState = State( setupStep = SetupStep.OPTIONS, isAutomaticConfig = true, ) val viewModel = AccountSetupViewModel( createAccount = { _, _, _, _, _ -> "accountUuid" }, autoDiscoveryViewModel = autoDiscoveryViewModel, incomingViewModel = FakeAccountIncomingConfigViewModel(), incomingValidationViewModel = FakeAccountValidationViewModel(), outgoingViewModel = FakeAccountOutgoingConfigViewModel(), outgoingValidationViewModel = FakeAccountValidationViewModel(), optionsViewModel = FakeAccountOptionsViewModel(), authStateStorage = authStateStorage, initialState = initialState, ) val turbines = turbinesWithInitialStateCheck(viewModel, initialState) viewModel.event(AccountSetupContract.Event.OnBack) assertThatAndMviTurbinesConsumed( actual = turbines.stateTurbine.awaitItem(), turbines = turbines, ) { prop(State::setupStep).isEqualTo(SetupStep.AUTO_CONFIG) } viewModel.event(AccountSetupContract.Event.OnBack) assertThatAndTurbinesConsumed( actual = stateTurbine.awaitItem(), assertThatAndMviTurbinesConsumed( actual = turbines.effectTurbine.awaitItem(), turbines = turbines, ) { prop(State::setupStep).isEqualTo(SetupStep.INCOMING_CONFIG) isEqualTo(Effect.NavigateBack) } } @Test fun `should go back from OUTGOING_VALIDATION step state on back event when isAutomaticConfig enabled`() = runTest { val initialState = State( setupStep = SetupStep.OUTGOING_VALIDATION, isAutomaticConfig = true, ) val viewModel = AccountSetupViewModel( createAccount = { _, _, _, _, _ -> "accountUuid" }, autoDiscoveryViewModel = autoDiscoveryViewModel, incomingViewModel = FakeAccountIncomingConfigViewModel(), incomingValidationViewModel = FakeAccountValidationViewModel(), outgoingViewModel = FakeAccountOutgoingConfigViewModel(), outgoingValidationViewModel = FakeAccountValidationViewModel(), optionsViewModel = FakeAccountOptionsViewModel(), authStateStorage = authStateStorage, initialState = initialState, ) val turbines = turbinesWithInitialStateCheck(viewModel, initialState) viewModel.event(AccountSetupContract.Event.OnBack) assertThatAndMviTurbinesConsumed( actual = turbines.stateTurbine.awaitItem(), turbines = turbines, ) { prop(State::setupStep).isEqualTo(SetupStep.AUTO_CONFIG) } viewModel.event(AccountSetupContract.Event.OnBack) assertThatAndMviTurbinesConsumed( actual = turbines.effectTurbine.awaitItem(), turbines = turbines, ) { isEqualTo(Effect.NavigateBack) } } @Test fun `should go back from INCOMING_VALIDATION step state on back event when isAutomaticConfig enabled`() = runTest { val initialState = State( setupStep = SetupStep.OUTGOING_VALIDATION, isAutomaticConfig = true, ) val viewModel = AccountSetupViewModel( createAccount = { _, _, _, _, _ -> "accountUuid" }, autoDiscoveryViewModel = autoDiscoveryViewModel, incomingViewModel = FakeAccountIncomingConfigViewModel(), incomingValidationViewModel = FakeAccountValidationViewModel(), outgoingViewModel = FakeAccountOutgoingConfigViewModel(), outgoingValidationViewModel = FakeAccountValidationViewModel(), optionsViewModel = FakeAccountOptionsViewModel(), authStateStorage = authStateStorage, initialState = initialState, ) val turbines = turbinesWithInitialStateCheck(viewModel, initialState) viewModel.event(AccountSetupContract.Event.OnBack) assertThatAndTurbinesConsumed( actual = stateTurbine.awaitItem(), assertThatAndMviTurbinesConsumed( actual = turbines.stateTurbine.awaitItem(), turbines = turbines, ) { prop(State::setupStep).isEqualTo(SetupStep.AUTO_CONFIG) Loading @@ -286,8 +362,8 @@ class AccountSetupViewModelTest { viewModel.event(AccountSetupContract.Event.OnBack) assertThatAndTurbinesConsumed( actual = effectTurbine.awaitItem(), assertThatAndMviTurbinesConsumed( actual = turbines.effectTurbine.awaitItem(), turbines = turbines, ) { isEqualTo(Effect.NavigateBack) Loading Loading
feature/account/setup/src/main/kotlin/app/k9mail/feature/account/setup/ui/AccountSetupViewModel.kt +29 −25 Original line number Diff line number Diff line Loading @@ -62,31 +62,6 @@ class AccountSetupViewModel( onNext() } private fun onBack() { when (state.value.setupStep) { SetupStep.AUTO_CONFIG -> navigateBack() SetupStep.INCOMING_CONFIG -> changeToSetupStep(SetupStep.AUTO_CONFIG) SetupStep.INCOMING_VALIDATION -> { if (state.value.isAutomaticConfig) { changeToSetupStep(SetupStep.AUTO_CONFIG) } else { changeToSetupStep(SetupStep.INCOMING_CONFIG) } } SetupStep.OUTGOING_CONFIG -> changeToSetupStep(SetupStep.INCOMING_VALIDATION) SetupStep.OUTGOING_VALIDATION -> { if (state.value.isAutomaticConfig) { changeToSetupStep(SetupStep.AUTO_CONFIG) } else { changeToSetupStep(SetupStep.OUTGOING_CONFIG) } } SetupStep.OPTIONS -> changeToSetupStep(SetupStep.OUTGOING_VALIDATION) } } private fun onNext() { when (state.value.setupStep) { SetupStep.AUTO_CONFIG -> { Loading Loading @@ -125,6 +100,35 @@ class AccountSetupViewModel( } } private fun onBack() { when (state.value.setupStep) { SetupStep.AUTO_CONFIG -> navigateBack() SetupStep.INCOMING_CONFIG -> changeToSetupStep(SetupStep.AUTO_CONFIG) SetupStep.INCOMING_VALIDATION -> { if (state.value.isAutomaticConfig) { changeToSetupStep(SetupStep.AUTO_CONFIG) } else { changeToSetupStep(SetupStep.INCOMING_CONFIG) } } SetupStep.OUTGOING_CONFIG -> changeToSetupStep(SetupStep.INCOMING_CONFIG) SetupStep.OUTGOING_VALIDATION -> { if (state.value.isAutomaticConfig) { changeToSetupStep(SetupStep.AUTO_CONFIG) } else { changeToSetupStep(SetupStep.OUTGOING_CONFIG) } } SetupStep.OPTIONS -> if (state.value.isAutomaticConfig) { changeToSetupStep(SetupStep.AUTO_CONFIG) } else { changeToSetupStep(SetupStep.OUTGOING_CONFIG) } } } private fun changeToSetupStep(setupStep: SetupStep) { if (setupStep == SetupStep.AUTO_CONFIG) { authStateStorage.updateAuthorizationState(authorizationState = null) Loading
feature/account/setup/src/test/kotlin/app/k9mail/feature/account/setup/ui/AccountSetupViewModelTest.kt +124 −48 Original line number Diff line number Diff line package app.k9mail.feature.account.setup.ui import app.cash.turbine.testIn import app.k9mail.autodiscovery.api.AutoDiscoveryResult import app.k9mail.autodiscovery.api.ImapServerSettings import app.k9mail.autodiscovery.api.SmtpServerSettings import app.k9mail.core.common.net.toHostname import app.k9mail.core.common.net.toPort import app.k9mail.core.ui.compose.testing.MainDispatcherRule import app.k9mail.core.ui.compose.testing.mvi.assertThatAndMviTurbinesConsumed import app.k9mail.core.ui.compose.testing.mvi.turbinesWithInitialStateCheck import app.k9mail.feature.account.setup.domain.entity.AccountOptions import app.k9mail.feature.account.setup.domain.entity.AuthenticationType import app.k9mail.feature.account.setup.domain.entity.ConnectionSecurity Loading @@ -33,7 +34,6 @@ import app.k9mail.feature.account.setup.ui.outgoing.toValidationState import app.k9mail.feature.account.setup.ui.validation.FakeAccountValidationViewModel import app.k9mail.feature.account.setup.ui.validation.InMemoryAuthStateStorage import assertk.assertThat import assertk.assertions.assertThatAndTurbinesConsumed import assertk.assertions.isEqualTo import assertk.assertions.isNull import assertk.assertions.prop Loading Loading @@ -83,17 +83,7 @@ class AccountSetupViewModelTest { optionsViewModel = optionsViewModel, authStateStorage = authStateStorage, ) val stateTurbine = viewModel.state.testIn(backgroundScope) val effectTurbine = viewModel.effect.testIn(backgroundScope) val turbines = listOf(stateTurbine, effectTurbine) // Initial state assertThatAndTurbinesConsumed( actual = stateTurbine.awaitItem(), turbines = turbines, ) { prop(State::setupStep).isEqualTo(SetupStep.AUTO_CONFIG) } val turbines = turbinesWithInitialStateCheck(viewModel, State(setupStep = SetupStep.AUTO_CONFIG)) autoDiscoveryViewModel.initState(AUTODISCOVERY_STATE) viewModel.event( Loading Loading @@ -130,8 +120,8 @@ class AccountSetupViewModelTest { ), ) assertThatAndTurbinesConsumed( actual = stateTurbine.awaitItem(), assertThatAndMviTurbinesConsumed( actual = turbines.stateTurbine.awaitItem(), turbines = turbines, ) { prop(State::setupStep).isEqualTo(SetupStep.INCOMING_CONFIG) Loading @@ -141,8 +131,8 @@ class AccountSetupViewModelTest { assertThat(incomingValidationViewModel.state.value).isEqualTo(expectedIncomingConfigState.toValidationState()) assertThatAndTurbinesConsumed( actual = stateTurbine.awaitItem(), assertThatAndMviTurbinesConsumed( actual = turbines.stateTurbine.awaitItem(), turbines = turbines, ) { prop(State::setupStep).isEqualTo(SetupStep.INCOMING_VALIDATION) Loading @@ -150,8 +140,8 @@ class AccountSetupViewModelTest { viewModel.event(AccountSetupContract.Event.OnNext) assertThatAndTurbinesConsumed( actual = stateTurbine.awaitItem(), assertThatAndMviTurbinesConsumed( actual = turbines.stateTurbine.awaitItem(), turbines = turbines, ) { prop(State::setupStep).isEqualTo(SetupStep.OUTGOING_CONFIG) Loading @@ -161,8 +151,8 @@ class AccountSetupViewModelTest { assertThat(outgoingValidationViewModel.state.value).isEqualTo(expectedOutgoingConfigState.toValidationState()) assertThatAndTurbinesConsumed( actual = stateTurbine.awaitItem(), assertThatAndMviTurbinesConsumed( actual = turbines.stateTurbine.awaitItem(), turbines = turbines, ) { prop(State::setupStep).isEqualTo(SetupStep.OUTGOING_VALIDATION) Loading @@ -170,8 +160,8 @@ class AccountSetupViewModelTest { viewModel.event(AccountSetupContract.Event.OnNext) assertThatAndTurbinesConsumed( actual = stateTurbine.awaitItem(), assertThatAndMviTurbinesConsumed( actual = turbines.stateTurbine.awaitItem(), turbines = turbines, ) { prop(State::setupStep).isEqualTo(SetupStep.OPTIONS) Loading @@ -190,8 +180,8 @@ class AccountSetupViewModelTest { viewModel.event(AccountSetupContract.Event.OnNext) assertThatAndTurbinesConsumed( actual = effectTurbine.awaitItem(), assertThatAndMviTurbinesConsumed( actual = turbines.effectTurbine.awaitItem(), turbines = turbines, ) { isEqualTo(Effect.NavigateNext("accountUuid")) Loading Loading @@ -227,58 +217,144 @@ class AccountSetupViewModelTest { authStateStorage = authStateStorage, initialState = initialState, ) val stateTurbine = viewModel.state.testIn(backgroundScope) val effectTurbine = viewModel.effect.testIn(backgroundScope) val turbines = listOf(stateTurbine, effectTurbine) val turbines = turbinesWithInitialStateCheck(viewModel, initialState) // Initial state assertThatAndTurbinesConsumed( actual = stateTurbine.awaitItem(), viewModel.event(AccountSetupContract.Event.OnBack) assertThatAndMviTurbinesConsumed( actual = turbines.stateTurbine.awaitItem(), turbines = turbines, ) { prop(State::setupStep).isEqualTo(SetupStep.OPTIONS) prop(State::setupStep).isEqualTo(SetupStep.OUTGOING_CONFIG) } viewModel.event(AccountSetupContract.Event.OnBack) assertThatAndTurbinesConsumed( actual = stateTurbine.awaitItem(), assertThatAndMviTurbinesConsumed( actual = turbines.stateTurbine.awaitItem(), turbines = turbines, ) { prop(State::setupStep).isEqualTo(SetupStep.OUTGOING_VALIDATION) prop(State::setupStep).isEqualTo(SetupStep.INCOMING_CONFIG) } viewModel.event(AccountSetupContract.Event.OnBack) assertThatAndTurbinesConsumed( actual = stateTurbine.awaitItem(), assertThatAndMviTurbinesConsumed( actual = turbines.stateTurbine.awaitItem(), turbines = turbines, ) { prop(State::setupStep).isEqualTo(SetupStep.OUTGOING_CONFIG) prop(State::setupStep).isEqualTo(SetupStep.AUTO_CONFIG) } viewModel.event(AccountSetupContract.Event.OnBack) assertThatAndTurbinesConsumed( actual = stateTurbine.awaitItem(), assertThatAndMviTurbinesConsumed( actual = turbines.effectTurbine.awaitItem(), turbines = turbines, ) { prop(State::setupStep).isEqualTo(SetupStep.INCOMING_VALIDATION) isEqualTo(Effect.NavigateBack) } } @Test fun `should go back from OPTIONS step on back event when isAutomaticConfig enabled`() = runTest { val initialState = State( setupStep = SetupStep.OPTIONS, isAutomaticConfig = true, ) val viewModel = AccountSetupViewModel( createAccount = { _, _, _, _, _ -> "accountUuid" }, autoDiscoveryViewModel = autoDiscoveryViewModel, incomingViewModel = FakeAccountIncomingConfigViewModel(), incomingValidationViewModel = FakeAccountValidationViewModel(), outgoingViewModel = FakeAccountOutgoingConfigViewModel(), outgoingValidationViewModel = FakeAccountValidationViewModel(), optionsViewModel = FakeAccountOptionsViewModel(), authStateStorage = authStateStorage, initialState = initialState, ) val turbines = turbinesWithInitialStateCheck(viewModel, initialState) viewModel.event(AccountSetupContract.Event.OnBack) assertThatAndMviTurbinesConsumed( actual = turbines.stateTurbine.awaitItem(), turbines = turbines, ) { prop(State::setupStep).isEqualTo(SetupStep.AUTO_CONFIG) } viewModel.event(AccountSetupContract.Event.OnBack) assertThatAndTurbinesConsumed( actual = stateTurbine.awaitItem(), assertThatAndMviTurbinesConsumed( actual = turbines.effectTurbine.awaitItem(), turbines = turbines, ) { prop(State::setupStep).isEqualTo(SetupStep.INCOMING_CONFIG) isEqualTo(Effect.NavigateBack) } } @Test fun `should go back from OUTGOING_VALIDATION step state on back event when isAutomaticConfig enabled`() = runTest { val initialState = State( setupStep = SetupStep.OUTGOING_VALIDATION, isAutomaticConfig = true, ) val viewModel = AccountSetupViewModel( createAccount = { _, _, _, _, _ -> "accountUuid" }, autoDiscoveryViewModel = autoDiscoveryViewModel, incomingViewModel = FakeAccountIncomingConfigViewModel(), incomingValidationViewModel = FakeAccountValidationViewModel(), outgoingViewModel = FakeAccountOutgoingConfigViewModel(), outgoingValidationViewModel = FakeAccountValidationViewModel(), optionsViewModel = FakeAccountOptionsViewModel(), authStateStorage = authStateStorage, initialState = initialState, ) val turbines = turbinesWithInitialStateCheck(viewModel, initialState) viewModel.event(AccountSetupContract.Event.OnBack) assertThatAndMviTurbinesConsumed( actual = turbines.stateTurbine.awaitItem(), turbines = turbines, ) { prop(State::setupStep).isEqualTo(SetupStep.AUTO_CONFIG) } viewModel.event(AccountSetupContract.Event.OnBack) assertThatAndMviTurbinesConsumed( actual = turbines.effectTurbine.awaitItem(), turbines = turbines, ) { isEqualTo(Effect.NavigateBack) } } @Test fun `should go back from INCOMING_VALIDATION step state on back event when isAutomaticConfig enabled`() = runTest { val initialState = State( setupStep = SetupStep.OUTGOING_VALIDATION, isAutomaticConfig = true, ) val viewModel = AccountSetupViewModel( createAccount = { _, _, _, _, _ -> "accountUuid" }, autoDiscoveryViewModel = autoDiscoveryViewModel, incomingViewModel = FakeAccountIncomingConfigViewModel(), incomingValidationViewModel = FakeAccountValidationViewModel(), outgoingViewModel = FakeAccountOutgoingConfigViewModel(), outgoingValidationViewModel = FakeAccountValidationViewModel(), optionsViewModel = FakeAccountOptionsViewModel(), authStateStorage = authStateStorage, initialState = initialState, ) val turbines = turbinesWithInitialStateCheck(viewModel, initialState) viewModel.event(AccountSetupContract.Event.OnBack) assertThatAndTurbinesConsumed( actual = stateTurbine.awaitItem(), assertThatAndMviTurbinesConsumed( actual = turbines.stateTurbine.awaitItem(), turbines = turbines, ) { prop(State::setupStep).isEqualTo(SetupStep.AUTO_CONFIG) Loading @@ -286,8 +362,8 @@ class AccountSetupViewModelTest { viewModel.event(AccountSetupContract.Event.OnBack) assertThatAndTurbinesConsumed( actual = effectTurbine.awaitItem(), assertThatAndMviTurbinesConsumed( actual = turbines.effectTurbine.awaitItem(), turbines = turbines, ) { isEqualTo(Effect.NavigateBack) Loading