diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/enterprisesignon/EnterpriseSignOnViewModel.kt b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/enterprisesignon/EnterpriseSignOnViewModel.kt index b899978b5e..3f9cae642d 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/enterprisesignon/EnterpriseSignOnViewModel.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/enterprisesignon/EnterpriseSignOnViewModel.kt @@ -2,13 +2,16 @@ package com.x8bit.bitwarden.ui.auth.feature.enterprisesignon import android.os.Parcelable import androidx.lifecycle.SavedStateHandle +import androidx.lifecycle.viewModelScope import com.x8bit.bitwarden.R import com.x8bit.bitwarden.data.platform.manager.NetworkConnectionManager import com.x8bit.bitwarden.ui.platform.base.BaseViewModel import com.x8bit.bitwarden.ui.platform.base.util.Text import com.x8bit.bitwarden.ui.platform.base.util.asText import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.delay import kotlinx.coroutines.flow.update +import kotlinx.coroutines.launch import kotlinx.parcelize.Parcelize import javax.inject.Inject @@ -74,6 +77,22 @@ class EnterpriseSignOnViewModel @Inject constructor( ), ) } + return + } + + viewModelScope.launch { + mutableStateFlow.update { + it.copy( + dialogState = EnterpriseSignOnState.DialogState.Loading( + R.string.logging_in.asText(), + ), + ) + } + // TODO The delay and hide are temporary until the actual SSO flow is implemented (see + // BIT-816) + @Suppress("MagicNumber") + delay(2000) + mutableStateFlow.update { it.copy(dialogState = null) } } } diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/enterprisesignon/EnterpriseSignOnViewModelTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/enterprisesignon/EnterpriseSignOnViewModelTest.kt index 6bd41e1448..b2a9c4bab1 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/enterprisesignon/EnterpriseSignOnViewModelTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/enterprisesignon/EnterpriseSignOnViewModelTest.kt @@ -45,42 +45,59 @@ class EnterpriseSignOnViewModelTest : BaseViewModelTest() { } } + @Suppress("MaxLineLength") @Test - fun `LogInClick with valid organization should emit ShowToast`() = runTest { - val state = DEFAULT_STATE.copy(orgIdentifierInput = "Test") - val viewModel = createViewModel(state) - viewModel.eventFlow.test { + fun `LogInClick with valid organization should emit ShowToast, show a loading dialog, and then hide the dialog`() = + runTest { + val state = DEFAULT_STATE.copy(orgIdentifierInput = "Test") + val viewModel = createViewModel(state) viewModel.actionChannel.trySend(EnterpriseSignOnAction.LogInClick) - assertEquals(state, viewModel.stateFlow.value) - assertEquals( - EnterpriseSignOnEvent.ShowToast("Not yet implemented."), - awaitItem(), - ) + viewModel.eventFlow.test { + assertEquals( + EnterpriseSignOnEvent.ShowToast("Not yet implemented."), + awaitItem(), + ) + } + viewModel.stateFlow.test { + assertEquals( + state.copy( + dialogState = EnterpriseSignOnState.DialogState.Loading( + R.string.logging_in.asText(), + ), + ), + awaitItem(), + ) + + assertEquals( + state.copy(dialogState = null), + awaitItem(), + ) + } } - } @Suppress("MaxLineLength") @Test - fun `LogInClick with invalid organization should emit ShowToast and show error dialog`() = runTest { - val viewModel = createViewModel() - viewModel.eventFlow.test { - viewModel.actionChannel.trySend(EnterpriseSignOnAction.LogInClick) - assertEquals( - DEFAULT_STATE.copy( - dialogState = EnterpriseSignOnState.DialogState.Error( - message = R.string.validation_field_required.asText( - R.string.org_identifier.asText(), + fun `LogInClick with invalid organization should emit ShowToast and show error dialog`() = + runTest { + val viewModel = createViewModel() + viewModel.eventFlow.test { + viewModel.actionChannel.trySend(EnterpriseSignOnAction.LogInClick) + assertEquals( + DEFAULT_STATE.copy( + dialogState = EnterpriseSignOnState.DialogState.Error( + message = R.string.validation_field_required.asText( + R.string.org_identifier.asText(), + ), ), ), - ), - viewModel.stateFlow.value, - ) - assertEquals( - EnterpriseSignOnEvent.ShowToast("Not yet implemented."), - awaitItem(), - ) + viewModel.stateFlow.value, + ) + assertEquals( + EnterpriseSignOnEvent.ShowToast("Not yet implemented."), + awaitItem(), + ) + } } - } @Suppress("MaxLineLength") @Test