@@ -3,6 +3,7 @@ package net.mullvad.mullvadvpn.viewmodel
3
3
import androidx.lifecycle.viewModelScope
4
4
import app.cash.turbine.test
5
5
import arrow.core.right
6
+ import io.mockk.Awaits
6
7
import io.mockk.Runs
7
8
import io.mockk.coEvery
8
9
import io.mockk.coVerify
@@ -18,10 +19,10 @@ import kotlinx.coroutines.cancel
18
19
import kotlinx.coroutines.flow.MutableStateFlow
19
20
import kotlinx.coroutines.test.UnconfinedTestDispatcher
20
21
import kotlinx.coroutines.test.runTest
21
- import mullvad_daemon.management_interface.daitaSettings
22
22
import net.mullvad.mullvadvpn.lib.common.test.TestCoroutineRule
23
23
import net.mullvad.mullvadvpn.lib.model.Constraint
24
24
import net.mullvad.mullvadvpn.lib.model.DaitaSettings
25
+ import net.mullvad.mullvadvpn.lib.model.IpVersion
25
26
import net.mullvad.mullvadvpn.lib.model.Mtu
26
27
import net.mullvad.mullvadvpn.lib.model.Port
27
28
import net.mullvad.mullvadvpn.lib.model.PortRange
@@ -163,6 +164,7 @@ class VpnSettingsViewModelTest {
163
164
every { mockRelaySettings.relayConstraints } returns mockRelayConstraints
164
165
every { mockRelayConstraints.wireguardConstraints } returns mockWireguardConstraints
165
166
every { mockWireguardConstraints.port } returns expectedPort
167
+ every { mockWireguardConstraints.ipVersion } returns Constraint .Any
166
168
every { mockSettings.tunnelOptions } returns
167
169
TunnelOptions (
168
170
wireguard =
@@ -193,6 +195,7 @@ class VpnSettingsViewModelTest {
193
195
port = wireguardPort,
194
196
isMultihopEnabled = false ,
195
197
entryLocation = Constraint .Any ,
198
+ ipVersion = Constraint .Any ,
196
199
)
197
200
coEvery { mockWireguardConstraintsRepository.setWireguardPort(any()) } returns
198
201
Unit .right()
@@ -249,4 +252,42 @@ class VpnSettingsViewModelTest {
249
252
mockAutoStartAndConnectOnBootRepository.setAutoStartAndConnectOnBoot(targetState)
250
253
}
251
254
}
255
+
256
+ @Test
257
+ fun `when device ip version is IPv6 then UiState should be IPv6` () = runTest {
258
+ // Arrange
259
+ val ipVersion = Constraint .Only (IpVersion .IPV6 )
260
+ val mockSettings = mockk<Settings >(relaxed = true )
261
+ every { mockSettings.relaySettings.relayConstraints.wireguardConstraints.ipVersion } returns
262
+ ipVersion
263
+ every { mockSettings.tunnelOptions.wireguard } returns
264
+ WireguardTunnelOptions (
265
+ mtu = Mtu (0 ),
266
+ quantumResistant = QuantumResistantState .Off ,
267
+ daitaSettings = DaitaSettings (enabled = false , directOnly = false ),
268
+ )
269
+ every { mockSettings.relaySettings.relayConstraints.wireguardConstraints.port } returns
270
+ Constraint .Any
271
+
272
+ // Act, Assert
273
+ viewModel.uiState.test {
274
+ // Default value
275
+ awaitItem()
276
+ mockSettingsUpdate.value = mockSettings
277
+ assertEquals(ipVersion, awaitItem().deviceIpVersion)
278
+ }
279
+ }
280
+
281
+ @Test
282
+ fun `calling onDeviceIpVersionSelected should call setDeviceIpVersion` () = runTest {
283
+ // Arrange
284
+ val targetState = Constraint .Only (IpVersion .IPV4 )
285
+ coEvery { mockWireguardConstraintsRepository.setDeviceIpVersion(targetState) } just Awaits
286
+
287
+ // Act
288
+ viewModel.onDeviceIpVersionSelected(targetState)
289
+
290
+ // Assert
291
+ coVerify(exactly = 1 ) { mockWireguardConstraintsRepository.setDeviceIpVersion(targetState) }
292
+ }
252
293
}
0 commit comments