summaryrefslogtreecommitdiffhomepage
path: root/android/app/src/test
diff options
context:
space:
mode:
authorDavid Göransson <david.goransson90@gmail.com>2023-12-18 12:12:17 +0100
committerJonathan <jonathan@mullvad.net>2023-12-21 13:33:59 +0100
commit8ed53a012b6c510a0dfd92925b8b0e742fd79da3 (patch)
treec92a6f524fa9f659a0edb2bb702e466d051ddba2 /android/app/src/test
parentc70509a345b6db8caf12c880b3ee3bf4c70bf79d (diff)
downloadmullvadvpn-8ed53a012b6c510a0dfd92925b8b0e742fd79da3.tar.xz
mullvadvpn-8ed53a012b6c510a0dfd92925b8b0e742fd79da3.zip
Support new tunnel state API in the Android frontend.
Remove `get_current_location` from jni.
Diffstat (limited to 'android/app/src/test')
-rw-r--r--android/app/src/test/kotlin/net/mullvad/mullvadvpn/usecase/OutOfTimeUseCaseTest.kt2
-rw-r--r--android/app/src/test/kotlin/net/mullvad/mullvadvpn/usecase/TunnelStateNotificationUseCaseTest.kt2
-rw-r--r--android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/ConnectViewModelTest.kt49
-rw-r--r--android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/DeviceRevokedViewModelTest.kt2
-rw-r--r--android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/OutOfTimeViewModelTest.kt3
-rw-r--r--android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/WelcomeViewModelTest.kt2
6 files changed, 20 insertions, 40 deletions
diff --git a/android/app/src/test/kotlin/net/mullvad/mullvadvpn/usecase/OutOfTimeUseCaseTest.kt b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/usecase/OutOfTimeUseCaseTest.kt
index 74683813ae..bdc5ea49b8 100644
--- a/android/app/src/test/kotlin/net/mullvad/mullvadvpn/usecase/OutOfTimeUseCaseTest.kt
+++ b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/usecase/OutOfTimeUseCaseTest.kt
@@ -63,7 +63,7 @@ class OutOfTimeUseCaseTest {
val expiredAccountExpiry = AccountExpiry.Available(DateTime.now().plusDays(1))
val tunnelStateChanges =
listOf(
- TunnelState.Disconnected,
+ TunnelState.Disconnected(),
TunnelState.Connected(mockk(), null),
TunnelState.Connecting(null, null),
TunnelState.Disconnecting(mockk()),
diff --git a/android/app/src/test/kotlin/net/mullvad/mullvadvpn/usecase/TunnelStateNotificationUseCaseTest.kt b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/usecase/TunnelStateNotificationUseCaseTest.kt
index 1b89c92be7..e67630642d 100644
--- a/android/app/src/test/kotlin/net/mullvad/mullvadvpn/usecase/TunnelStateNotificationUseCaseTest.kt
+++ b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/usecase/TunnelStateNotificationUseCaseTest.kt
@@ -35,7 +35,7 @@ class TunnelStateNotificationUseCaseTest {
MutableStateFlow<ServiceConnectionState>(ServiceConnectionState.Disconnected)
private lateinit var tunnelStateNotificationUseCase: TunnelStateNotificationUseCase
- private val eventNotifierTunnelUiState = EventNotifier<TunnelState>(TunnelState.Disconnected)
+ private val eventNotifierTunnelUiState = EventNotifier<TunnelState>(TunnelState.Disconnected())
@Before
fun setup() {
diff --git a/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/ConnectViewModelTest.kt b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/ConnectViewModelTest.kt
index 7271c07433..47364652ce 100644
--- a/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/ConnectViewModelTest.kt
+++ b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/ConnectViewModelTest.kt
@@ -6,12 +6,11 @@ import io.mockk.coEvery
import io.mockk.every
import io.mockk.mockk
import io.mockk.mockkStatic
-import io.mockk.slot
import io.mockk.unmockkAll
import io.mockk.verify
import kotlin.test.assertEquals
import kotlin.test.assertIs
-import kotlin.test.assertTrue
+import kotlin.test.assertNull
import kotlinx.coroutines.async
import kotlinx.coroutines.cancel
import kotlinx.coroutines.flow.MutableStateFlow
@@ -33,7 +32,6 @@ import net.mullvad.mullvadvpn.ui.VersionInfo
import net.mullvad.mullvadvpn.ui.serviceconnection.AppVersionInfoCache
import net.mullvad.mullvadvpn.ui.serviceconnection.AuthTokenCache
import net.mullvad.mullvadvpn.ui.serviceconnection.ConnectionProxy
-import net.mullvad.mullvadvpn.ui.serviceconnection.LocationInfoCache
import net.mullvad.mullvadvpn.ui.serviceconnection.ServiceConnectionContainer
import net.mullvad.mullvadvpn.ui.serviceconnection.ServiceConnectionManager
import net.mullvad.mullvadvpn.ui.serviceconnection.ServiceConnectionState
@@ -73,7 +71,6 @@ class ConnectViewModelTest {
// Service connections
private val mockServiceConnectionContainer: ServiceConnectionContainer = mockk()
- private val mockLocationInfoCache: LocationInfoCache = mockk(relaxUnitFun = true)
private lateinit var mockAppVersionInfoCache: AppVersionInfoCache
private val mockConnectionProxy: ConnectionProxy = mockk()
private val mockLocation: GeoIpLocation = mockk(relaxed = true)
@@ -93,12 +90,10 @@ class ConnectViewModelTest {
// Payment use case
private val mockPaymentUseCase: PaymentUseCase = mockk(relaxed = true)
- // Captures
- private val locationSlot = slot<((GeoIpLocation?) -> Unit)>()
-
// Event notifiers
- private val eventNotifierTunnelUiState = EventNotifier<TunnelState>(TunnelState.Disconnected)
- private val eventNotifierTunnelRealState = EventNotifier<TunnelState>(TunnelState.Disconnected)
+ private val eventNotifierTunnelUiState = EventNotifier<TunnelState>(TunnelState.Disconnected())
+ private val eventNotifierTunnelRealState =
+ EventNotifier<TunnelState>(TunnelState.Disconnected())
// Flows
private val selectedRelayFlow = MutableStateFlow<RelayItem?>(null)
@@ -118,7 +113,6 @@ class ConnectViewModelTest {
}
every { mockServiceConnectionManager.connectionState } returns serviceConnectionState
- every { mockServiceConnectionContainer.locationInfoCache } returns mockLocationInfoCache
every { mockServiceConnectionContainer.appVersionInfoCache } returns mockAppVersionInfoCache
every { mockServiceConnectionContainer.connectionProxy } returns mockConnectionProxy
@@ -134,7 +128,6 @@ class ConnectViewModelTest {
every { mockLocation.country } returns "dummy country"
// Listeners
- every { mockLocationInfoCache.onNewLocation = capture(locationSlot) } answers {}
every { mockAppVersionInfoCache.onUpdate = any() } answers {}
// Flows
@@ -167,29 +160,14 @@ class ConnectViewModelTest {
}
@Test
- fun testTunnelInfoExpandedUpdate() =
- runTest(testCoroutineRule.testDispatcher) {
- viewModel.uiState.test {
- assertEquals(ConnectUiState.INITIAL, awaitItem())
- serviceConnectionState.value =
- ServiceConnectionState.ConnectedReady(mockServiceConnectionContainer)
- locationSlot.captured.invoke(mockLocation)
- viewModel.toggleTunnelInfoExpansion()
- val result = awaitItem()
- assertTrue(result.isTunnelInfoExpanded)
- }
- }
-
- @Test
fun testTunnelRealStateUpdate() =
runTest(testCoroutineRule.testDispatcher) {
- val tunnelRealStateTestItem = TunnelState.Connected(mockk(relaxed = true), mockk())
+ val tunnelRealStateTestItem = TunnelState.Connected(mockk(relaxed = true), null)
viewModel.uiState.test {
assertEquals(ConnectUiState.INITIAL, awaitItem())
serviceConnectionState.value =
ServiceConnectionState.ConnectedReady(mockServiceConnectionContainer)
- locationSlot.captured.invoke(mockLocation)
eventNotifierTunnelRealState.notify(tunnelRealStateTestItem)
val result = awaitItem()
assertEquals(tunnelRealStateTestItem, result.tunnelRealState)
@@ -205,7 +183,6 @@ class ConnectViewModelTest {
assertEquals(ConnectUiState.INITIAL, awaitItem())
serviceConnectionState.value =
ServiceConnectionState.ConnectedReady(mockServiceConnectionContainer)
- locationSlot.captured.invoke(mockLocation)
eventNotifierTunnelUiState.notify(tunnelUiStateTestItem)
val result = awaitItem()
assertEquals(tunnelUiStateTestItem, result.tunnelUiState)
@@ -223,7 +200,6 @@ class ConnectViewModelTest {
assertEquals(ConnectUiState.INITIAL, awaitItem())
serviceConnectionState.value =
ServiceConnectionState.ConnectedReady(mockServiceConnectionContainer)
- locationSlot.captured.invoke(mockLocation)
val result = awaitItem()
assertEquals(relayTestItem, result.relayLocation)
}
@@ -241,13 +217,19 @@ class ConnectViewModelTest {
hostname = "Host"
)
+ // Act, Assert
viewModel.uiState.test {
assertEquals(ConnectUiState.INITIAL, awaitItem())
+ eventNotifierTunnelRealState.notify(TunnelState.Disconnected(null))
+
serviceConnectionState.value =
ServiceConnectionState.ConnectedReady(mockServiceConnectionContainer)
- locationSlot.captured.invoke(locationTestItem)
- val result = awaitItem()
- assertEquals(locationTestItem, result.location)
+ // Start of with no location
+ assertNull(awaitItem().location)
+
+ // After updated we show latest
+ eventNotifierTunnelRealState.notify(TunnelState.Disconnected(locationTestItem))
+ assertEquals(locationTestItem, awaitItem().location)
}
}
@@ -262,7 +244,6 @@ class ConnectViewModelTest {
assertEquals(ConnectUiState.INITIAL, awaitItem())
serviceConnectionState.value =
ServiceConnectionState.ConnectedReady(mockServiceConnectionContainer)
- locationSlot.captured.invoke(locationTestItem)
expectNoEvents()
val result = awaitItem()
assertEquals(locationTestItem, result.location)
@@ -320,7 +301,6 @@ class ConnectViewModelTest {
assertEquals(ConnectUiState.INITIAL, awaitItem())
serviceConnectionState.value =
ServiceConnectionState.ConnectedReady(mockServiceConnectionContainer)
- locationSlot.captured.invoke(mockLocation)
eventNotifierTunnelUiState.notify(tunnelUiState)
val result = awaitItem()
assertEquals(expectedConnectNotificationState, result.inAppNotification)
@@ -356,7 +336,6 @@ class ConnectViewModelTest {
awaitItem()
serviceConnectionState.value =
ServiceConnectionState.ConnectedReady(mockServiceConnectionContainer)
- locationSlot.captured.invoke(mockLocation)
outOfTimeViewFlow.value = true
awaitItem()
}
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 8959b1f9e3..a73ecfc4e7 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
@@ -105,7 +105,7 @@ class DeviceRevokedViewModelTest {
// Arrange
val mockedContainer =
mockk<ServiceConnectionContainer>().also {
- every { it.connectionProxy.state } returns TunnelState.Disconnected
+ every { it.connectionProxy.state } returns TunnelState.Disconnected()
every { it.connectionProxy.disconnect() } just Runs
every { mockedAccountRepository.logout() } just Runs
}
diff --git a/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/OutOfTimeViewModelTest.kt b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/OutOfTimeViewModelTest.kt
index ab861b1e20..50a9d8fb98 100644
--- a/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/OutOfTimeViewModelTest.kt
+++ b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/OutOfTimeViewModelTest.kt
@@ -59,7 +59,8 @@ class OutOfTimeViewModelTest {
private val mockConnectionProxy: ConnectionProxy = mockk()
// Event notifiers
- private val eventNotifierTunnelRealState = EventNotifier<TunnelState>(TunnelState.Disconnected)
+ private val eventNotifierTunnelRealState =
+ EventNotifier<TunnelState>(TunnelState.Disconnected())
private val mockAccountRepository: AccountRepository = mockk(relaxed = true)
private val mockDeviceRepository: DeviceRepository = mockk()
diff --git a/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/WelcomeViewModelTest.kt b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/WelcomeViewModelTest.kt
index ac047db2ea..29b0dfde75 100644
--- a/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/WelcomeViewModelTest.kt
+++ b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/WelcomeViewModelTest.kt
@@ -58,7 +58,7 @@ class WelcomeViewModelTest {
private val mockConnectionProxy: ConnectionProxy = mockk()
// Event notifiers
- private val eventNotifierTunnelUiState = EventNotifier<TunnelState>(TunnelState.Disconnected)
+ private val eventNotifierTunnelUiState = EventNotifier<TunnelState>(TunnelState.Disconnected())
private val mockAccountRepository: AccountRepository = mockk(relaxed = true)
private val mockDeviceRepository: DeviceRepository = mockk()