diff options
| author | Albin <albin@mullvad.net> | 2022-06-17 21:48:30 +0200 |
|---|---|---|
| committer | Albin <albin@mullvad.net> | 2022-06-22 11:57:30 +0200 |
| commit | 92cdbc13f479ec563c6bba4ee132c4ea2b9508d1 (patch) | |
| tree | 6e60f8c80e1a0ac55171daaad41141c4384aaa67 /android/app/src | |
| parent | c94c989f7e9caf5750311c64281729008190e93c (diff) | |
| download | mullvadvpn-92cdbc13f479ec563c6bba4ee132c4ea2b9508d1.tar.xz mullvadvpn-92cdbc13f479ec563c6bba4ee132c4ea2b9508d1.zip | |
Fix tests
Diffstat (limited to 'android/app/src')
4 files changed, 40 insertions, 21 deletions
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/LoginFragment.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/LoginFragment.kt index de240c765c..784bfc5bf5 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/LoginFragment.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/LoginFragment.kt @@ -48,7 +48,6 @@ class LoginFragment : container: ViewGroup?, savedInstanceState: Bundle? ): View { - loginViewModel.reset() // TODO: Keep? val view = inflater.inflate(R.layout.login, container, false) headerBar = view.findViewById(R.id.header_bar) diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/LoginViewModel.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/LoginViewModel.kt index 5b80bbe3fd..757e573820 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/LoginViewModel.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/LoginViewModel.kt @@ -69,11 +69,6 @@ class LoginViewModel( data class OtherError(val errorMessage: String) : LoginUiState() } - // TODO: Required? - fun reset() { - _uiState.value = LoginUiState.Default - } - fun clearAccountHistory() { accountCache.tryPerformAction( errorMessageIfAccountCacheNotAvailable = SERVICE_NOT_CONNECTED_ERROR_MESSAGE diff --git a/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/DeviceRevokedViewModelTest.kt b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/DeviceRevokedViewModelTest.kt index 69941a474d..f507aa5b35 100644 --- a/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/DeviceRevokedViewModelTest.kt +++ b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/DeviceRevokedViewModelTest.kt @@ -12,7 +12,6 @@ import io.mockk.unmockkAll import io.mockk.verify import io.mockk.verifyOrder import junit.framework.Assert.assertEquals -import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.test.TestCoroutineDispatcher import kotlinx.coroutines.test.runBlockingTest @@ -45,7 +44,7 @@ class DeviceRevokedViewModelTest { every { mockedServiceConnectionManager.connectionState } returns serviceConnectionState viewModel = DeviceRevokedViewModel( mockedServiceConnectionManager, - CoroutineScope(TestCoroutineDispatcher()) + TestCoroutineDispatcher() ) } diff --git a/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/LoginViewModelTest.kt b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/LoginViewModelTest.kt index a0dc80957b..59c52aab7d 100644 --- a/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/LoginViewModelTest.kt +++ b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/LoginViewModelTest.kt @@ -3,20 +3,27 @@ package net.mullvad.mullvadvpn.viewmodel import app.cash.turbine.FlowTurbine import app.cash.turbine.test import io.mockk.MockKAnnotations +import io.mockk.coEvery import io.mockk.every import io.mockk.impl.annotations.MockK import io.mockk.verify import junit.framework.Assert.assertEquals import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.MutableSharedFlow +import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.test.TestCoroutineDispatcher import kotlinx.coroutines.test.runBlockingTest import kotlinx.coroutines.test.setMain import net.mullvad.mullvadvpn.ipc.Event import net.mullvad.mullvadvpn.model.AccountCreationResult import net.mullvad.mullvadvpn.model.AccountHistory +import net.mullvad.mullvadvpn.model.DeviceListEvent import net.mullvad.mullvadvpn.model.LoginResult import net.mullvad.mullvadvpn.ui.serviceconnection.AccountCache +import net.mullvad.mullvadvpn.ui.serviceconnection.DeviceRepository +import net.mullvad.mullvadvpn.ui.serviceconnection.ServiceConnectionContainer +import net.mullvad.mullvadvpn.ui.serviceconnection.ServiceConnectionManager +import net.mullvad.mullvadvpn.ui.serviceconnection.ServiceConnectionState import org.junit.Before import org.junit.Test @@ -25,12 +32,24 @@ class LoginViewModelTest { @MockK private lateinit var mockedAccountCache: AccountCache + @MockK + private lateinit var mockedDeviceRepository: DeviceRepository + + @MockK + private lateinit var mockedServiceConnectionManager: ServiceConnectionManager + + @MockK + private lateinit var mockedServiceConnectionContainer: ServiceConnectionContainer + private lateinit var loginViewModel: LoginViewModel private val accountCreationTestEvents = MutableSharedFlow<AccountCreationResult>() private val accountHistoryTestEvents = MutableSharedFlow<AccountHistory>() private val loginTestEvents = MutableSharedFlow<Event.LoginEvent>() + private val serviceConnectionState = + MutableStateFlow<ServiceConnectionState>(ServiceConnectionState.Disconnected) + @Before fun setup() { Dispatchers.setMain(TestCoroutineDispatcher()) @@ -39,13 +58,21 @@ class LoginViewModelTest { every { mockedAccountCache.accountCreationEvents } returns accountCreationTestEvents every { mockedAccountCache.accountHistoryEvents } returns accountHistoryTestEvents every { mockedAccountCache.loginEvents } returns loginTestEvents + every { mockedServiceConnectionManager.connectionState } returns serviceConnectionState + every { mockedServiceConnectionContainer.accountCache } returns mockedAccountCache - loginViewModel = LoginViewModel() + serviceConnectionState.value = + ServiceConnectionState.ConnectedReady(mockedServiceConnectionContainer) + + loginViewModel = LoginViewModel( + mockedDeviceRepository, + mockedServiceConnectionManager, + TestCoroutineDispatcher() + ) } @Test fun testDefaultState() = runBlockingTest { - loginViewModel.updateAccountCacheInstance(mockedAccountCache) loginViewModel.uiState.test { assertEquals(LoginViewModel.LoginUiState.Default, awaitItem()) } @@ -53,19 +80,18 @@ class LoginViewModelTest { @Test fun testCreateAccount() = runBlockingTest { - loginViewModel.updateAccountCacheInstance(mockedAccountCache) loginViewModel.uiState.test { skipDefaultItem() loginViewModel.createAccount() assertEquals(LoginViewModel.LoginUiState.CreatingAccount, awaitItem()) accountCreationTestEvents.emit(AccountCreationResult.Success(DUMMY_ACCOUNT_TOKEN)) + assertEquals(LoginViewModel.LoginUiState.AccountCreated, awaitItem()) } } @Test fun testLoginWithValidAccount() = runBlockingTest { - loginViewModel.updateAccountCacheInstance(mockedAccountCache) loginViewModel.uiState.test { skipDefaultItem() loginViewModel.login(DUMMY_ACCOUNT_TOKEN) @@ -77,7 +103,6 @@ class LoginViewModelTest { @Test fun testLoginWithInvalidAccount() = runBlockingTest { - loginViewModel.updateAccountCacheInstance(mockedAccountCache) loginViewModel.uiState.test { skipDefaultItem() loginViewModel.login(DUMMY_ACCOUNT_TOKEN) @@ -89,19 +114,23 @@ class LoginViewModelTest { @Test fun testLoginWithTooManyDevicesError() = runBlockingTest { - loginViewModel.updateAccountCacheInstance(mockedAccountCache) + coEvery { mockedDeviceRepository.getDeviceList(any()) } returns DeviceListEvent.Available( + DUMMY_ACCOUNT_TOKEN, listOf() + ) + loginViewModel.uiState.test { skipDefaultItem() loginViewModel.login(DUMMY_ACCOUNT_TOKEN) assertEquals(LoginViewModel.LoginUiState.Loading, awaitItem()) loginTestEvents.emit(Event.LoginEvent(LoginResult.MaxDevicesReached)) - assertEquals(LoginViewModel.LoginUiState.TooManyDevicesError, awaitItem()) + assertEquals( + LoginViewModel.LoginUiState.TooManyDevicesError(DUMMY_ACCOUNT_TOKEN), awaitItem() + ) } } @Test fun testLoginWithRpcError() = runBlockingTest { - loginViewModel.updateAccountCacheInstance(mockedAccountCache) loginViewModel.uiState.test { skipDefaultItem() loginViewModel.login(DUMMY_ACCOUNT_TOKEN) @@ -116,7 +145,6 @@ class LoginViewModelTest { @Test fun testLoginWithUnknownError() = runBlockingTest { - loginViewModel.updateAccountCacheInstance(mockedAccountCache) loginViewModel.uiState.test { skipDefaultItem() loginViewModel.login(DUMMY_ACCOUNT_TOKEN) @@ -131,17 +159,15 @@ class LoginViewModelTest { @Test fun testAccountHistory() = runBlockingTest { - loginViewModel.updateAccountCacheInstance(mockedAccountCache) - loginViewModel.accountHistory.test { skipDefaultItem() } - accountHistoryTestEvents.emit(AccountHistory.Available(DUMMY_ACCOUNT_TOKEN)) loginViewModel.accountHistory.test { + skipDefaultItem() + accountHistoryTestEvents.emit(AccountHistory.Available(DUMMY_ACCOUNT_TOKEN)) assertEquals(AccountHistory.Available(DUMMY_ACCOUNT_TOKEN), awaitItem()) } } @Test fun testClearingAccountHistory() = runBlockingTest { - loginViewModel.updateAccountCacheInstance(mockedAccountCache) loginViewModel.clearAccountHistory() verify { mockedAccountCache.clearAccountHistory() } } |
