Skip to content

Commit ad4d635

Browse files
committed
Update unit tests for new relay items
1 parent 87f2aec commit ad4d635

File tree

3 files changed

+126
-58
lines changed

3 files changed

+126
-58
lines changed

android/app/src/test/kotlin/net/mullvad/mullvadvpn/relaylist/RelayNameComparatorTest.kt

+78-21
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,14 @@ class RelayNameComparatorTest {
1616
@Test
1717
fun test_compare_respect_numbers_in_name() {
1818
val relay9 =
19-
Relay(name = "se9-wireguard", location = mockk(), locationName = "mock", active = false)
19+
RelayItem.Relay(
20+
name = "se9-wireguard",
21+
location = mockk(),
22+
locationName = "mock",
23+
active = false
24+
)
2025
val relay10 =
21-
Relay(
26+
RelayItem.Relay(
2227
name = "se10-wireguard",
2328
location = mockk(),
2429
locationName = "mock",
@@ -31,9 +36,19 @@ class RelayNameComparatorTest {
3136
@Test
3237
fun test_compare_same_name() {
3338
val relay9a =
34-
Relay(name = "se9-wireguard", location = mockk(), locationName = "mock", active = false)
39+
RelayItem.Relay(
40+
name = "se9-wireguard",
41+
location = mockk(),
42+
locationName = "mock",
43+
active = false
44+
)
3545
val relay9b =
36-
Relay(name = "se9-wireguard", location = mockk(), locationName = "mock", active = false)
46+
RelayItem.Relay(
47+
name = "se9-wireguard",
48+
location = mockk(),
49+
locationName = "mock",
50+
active = false
51+
)
3752

3853
assertTrue(RelayNameComparator.compare(relay9a, relay9b) == 0)
3954
assertTrue(RelayNameComparator.compare(relay9b, relay9a) == 0)
@@ -42,11 +57,13 @@ class RelayNameComparatorTest {
4257
@Test
4358
fun test_compare_only_numbers_in_name() {
4459
val relay001 =
45-
Relay(name = "001", location = mockk(), locationName = "mock", active = false)
46-
val relay1 = Relay(name = "1", location = mockk(), locationName = "mock", active = false)
47-
val relay3 = Relay(name = "3", location = mockk(), locationName = "mock", active = false)
60+
RelayItem.Relay(name = "001", location = mockk(), locationName = "mock", active = false)
61+
val relay1 =
62+
RelayItem.Relay(name = "1", location = mockk(), locationName = "mock", active = false)
63+
val relay3 =
64+
RelayItem.Relay(name = "3", location = mockk(), locationName = "mock", active = false)
4865
val relay100 =
49-
Relay(name = "100", location = mockk(), locationName = "mock", active = false)
66+
RelayItem.Relay(name = "100", location = mockk(), locationName = "mock", active = false)
5067

5168
relay001 assertOrderBothDirection relay1
5269
relay001 assertOrderBothDirection relay3
@@ -57,9 +74,19 @@ class RelayNameComparatorTest {
5774
@Test
5875
fun test_compare_without_numbers_in_name() {
5976
val relay9a =
60-
Relay(name = "se-wireguard", location = mockk(), locationName = "mock", active = false)
77+
RelayItem.Relay(
78+
name = "se-wireguard",
79+
location = mockk(),
80+
locationName = "mock",
81+
active = false
82+
)
6183
val relay9b =
62-
Relay(name = "se-wireguard", location = mockk(), locationName = "mock", active = false)
84+
RelayItem.Relay(
85+
name = "se-wireguard",
86+
location = mockk(),
87+
locationName = "mock",
88+
active = false
89+
)
6390

6491
assertTrue(RelayNameComparator.compare(relay9a, relay9b) == 0)
6592
assertTrue(RelayNameComparator.compare(relay9b, relay9a) == 0)
@@ -68,14 +95,14 @@ class RelayNameComparatorTest {
6895
@Test
6996
fun test_compare_with_trailing_zeros_in_name() {
7097
val relay001 =
71-
Relay(
98+
RelayItem.Relay(
7299
name = "se001-wireguard",
73100
location = mockk(),
74101
locationName = "mock",
75102
active = false
76103
)
77104
val relay005 =
78-
Relay(
105+
RelayItem.Relay(
79106
name = "se005-wireguard",
80107
location = mockk(),
81108
locationName = "mock",
@@ -88,13 +115,28 @@ class RelayNameComparatorTest {
88115
@Test
89116
fun test_compare_prefix_and_numbers() {
90117
val relayAr2 =
91-
Relay(name = "ar2-wireguard", location = mockk(), locationName = "mock", active = false)
118+
RelayItem.Relay(
119+
name = "ar2-wireguard",
120+
location = mockk(),
121+
locationName = "mock",
122+
active = false
123+
)
92124
val relayAr8 =
93-
Relay(name = "ar8-wireguard", location = mockk(), locationName = "mock", active = false)
125+
RelayItem.Relay(
126+
name = "ar8-wireguard",
127+
location = mockk(),
128+
locationName = "mock",
129+
active = false
130+
)
94131
val relaySe5 =
95-
Relay(name = "se5-wireguard", location = mockk(), locationName = "mock", active = false)
132+
RelayItem.Relay(
133+
name = "se5-wireguard",
134+
location = mockk(),
135+
locationName = "mock",
136+
active = false
137+
)
96138
val relaySe10 =
97-
Relay(
139+
RelayItem.Relay(
98140
name = "se10-wireguard",
99141
location = mockk(),
100142
locationName = "mock",
@@ -109,19 +151,34 @@ class RelayNameComparatorTest {
109151
@Test
110152
fun test_compare_suffix_and_numbers() {
111153
val relay2c =
112-
Relay(name = "se2-cloud", location = mockk(), locationName = "mock", active = false)
154+
RelayItem.Relay(
155+
name = "se2-cloud",
156+
location = mockk(),
157+
locationName = "mock",
158+
active = false
159+
)
113160
val relay2w =
114-
Relay(name = "se2-wireguard", location = mockk(), locationName = "mock", active = false)
161+
RelayItem.Relay(
162+
name = "se2-wireguard",
163+
location = mockk(),
164+
locationName = "mock",
165+
active = false
166+
)
115167

116168
relay2c assertOrderBothDirection relay2w
117169
}
118170

119171
@Test
120172
fun test_compare_different_length() {
121173
val relay22a =
122-
Relay(name = "se22", location = mockk(), locationName = "mock", active = false)
174+
RelayItem.Relay(
175+
name = "se22",
176+
location = mockk(),
177+
locationName = "mock",
178+
active = false
179+
)
123180
val relay22b =
124-
Relay(
181+
RelayItem.Relay(
125182
name = "se22-wireguard",
126183
location = mockk(),
127184
locationName = "mock",
@@ -131,7 +188,7 @@ class RelayNameComparatorTest {
131188
relay22a assertOrderBothDirection relay22b
132189
}
133190

134-
private infix fun Relay.assertOrderBothDirection(other: Relay) {
191+
private infix fun RelayItem.Relay.assertOrderBothDirection(other: RelayItem.Relay) {
135192
assertTrue(RelayNameComparator.compare(this, other) < 0)
136193
assertTrue(RelayNameComparator.compare(other, this) > 0)
137194
}

android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/ConnectViewModelTest.kt

+7-8
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import net.mullvad.mullvadvpn.model.AccountExpiry
2222
import net.mullvad.mullvadvpn.model.DeviceState
2323
import net.mullvad.mullvadvpn.model.GeoIpLocation
2424
import net.mullvad.mullvadvpn.model.TunnelState
25-
import net.mullvad.mullvadvpn.relaylist.RelayCountry
2625
import net.mullvad.mullvadvpn.relaylist.RelayItem
2726
import net.mullvad.mullvadvpn.repository.AccountRepository
2827
import net.mullvad.mullvadvpn.repository.DeviceRepository
@@ -96,7 +95,7 @@ class ConnectViewModelTest {
9695
EventNotifier<TunnelState>(TunnelState.Disconnected())
9796

9897
// Flows
99-
private val selectedRelayFlow = MutableStateFlow<RelayItem?>(null)
98+
private val selectedRelayItemFlow = MutableStateFlow<RelayItem?>(null)
10099

101100
// Out Of Time Use Case
102101
private val outOfTimeUseCase: OutOfTimeUseCase = mockk()
@@ -131,7 +130,7 @@ class ConnectViewModelTest {
131130
every { mockAppVersionInfoCache.onUpdate = any() } answers {}
132131

133132
// Flows
134-
every { mockRelayListUseCase.selectedRelayItem() } returns selectedRelayFlow
133+
every { mockRelayListUseCase.selectedRelayItem() } returns selectedRelayItemFlow
135134

136135
every { outOfTimeUseCase.isOutOfTime() } returns outOfTimeViewFlow
137136
viewModel =
@@ -188,17 +187,17 @@ class ConnectViewModelTest {
188187
}
189188

190189
@Test
191-
fun testRelayItemUpdate() = runTest {
192-
val relayTestItem =
193-
RelayCountry(name = "Name", code = "Code", expanded = false, cities = emptyList())
194-
selectedRelayFlow.value = relayTestItem
190+
fun testSelectedLocationUpdate() = runTest {
191+
val selectedRelayItem =
192+
RelayItem.Country(name = "Name", code = "Code", expanded = false, cities = emptyList())
193+
selectedRelayItemFlow.value = selectedRelayItem
195194

196195
viewModel.uiState.test {
197196
assertEquals(ConnectUiState.INITIAL, awaitItem())
198197
serviceConnectionState.value =
199198
ServiceConnectionState.ConnectedReady(mockServiceConnectionContainer)
200199
val result = awaitItem()
201-
assertEquals(relayTestItem, result.relayLocation)
200+
assertEquals(selectedRelayItem, result.selectedRelayItem)
202201
}
203202
}
204203

android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/SelectLocationViewModelTest.kt

+41-29
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,14 @@ import net.mullvad.mullvadvpn.lib.common.test.TestCoroutineRule
2020
import net.mullvad.mullvadvpn.lib.common.test.assertLists
2121
import net.mullvad.mullvadvpn.model.Constraint
2222
import net.mullvad.mullvadvpn.model.GeographicLocationConstraint
23+
import net.mullvad.mullvadvpn.model.LocationConstraint
2324
import net.mullvad.mullvadvpn.model.Ownership
2425
import net.mullvad.mullvadvpn.model.Providers
2526
import net.mullvad.mullvadvpn.relaylist.Provider
26-
import net.mullvad.mullvadvpn.relaylist.RelayCountry
2727
import net.mullvad.mullvadvpn.relaylist.RelayItem
2828
import net.mullvad.mullvadvpn.relaylist.RelayList
2929
import net.mullvad.mullvadvpn.relaylist.filterOnSearchTerm
30+
import net.mullvad.mullvadvpn.relaylist.toLocationConstraint
3031
import net.mullvad.mullvadvpn.ui.serviceconnection.ConnectionProxy
3132
import net.mullvad.mullvadvpn.ui.serviceconnection.ServiceConnectionManager
3233
import net.mullvad.mullvadvpn.ui.serviceconnection.connectionProxy
@@ -43,7 +44,8 @@ class SelectLocationViewModelTest {
4344
private val mockRelayListFilterUseCase: RelayListFilterUseCase = mockk(relaxed = true)
4445
private val mockServiceConnectionManager: ServiceConnectionManager = mockk()
4546
private lateinit var viewModel: SelectLocationViewModel
46-
private val relayListWithSelectionFlow = MutableStateFlow(RelayList(emptyList(), null))
47+
private val relayListWithSelectionFlow =
48+
MutableStateFlow(RelayList(emptyList(), emptyList(), null))
4749
private val mockRelayListUseCase: RelayListUseCase = mockk()
4850
private val selectedOwnership = MutableStateFlow<Constraint<Ownership>>(Constraint.Any())
4951
private val selectedProvider = MutableStateFlow<Constraint<Providers>>(Constraint.Any())
@@ -60,6 +62,7 @@ class SelectLocationViewModelTest {
6062

6163
mockkStatic(SERVICE_CONNECTION_MANAGER_EXTENSIONS)
6264
mockkStatic(RELAY_LIST_EXTENSIONS)
65+
mockkStatic(RELAY_ITEM_EXTENSIONS)
6366
viewModel =
6467
SelectLocationViewModel(
6568
mockServiceConnectionManager,
@@ -82,10 +85,11 @@ class SelectLocationViewModelTest {
8285
@Test
8386
fun testUpdateLocations() = runTest {
8487
// Arrange
85-
val mockCountries = listOf<RelayCountry>(mockk(), mockk())
86-
val selectedRelay: RelayItem = mockk()
87-
every { mockCountries.filterOnSearchTerm(any(), selectedRelay) } returns mockCountries
88-
relayListWithSelectionFlow.value = RelayList(mockCountries, selectedRelay)
88+
val mockCountries = listOf<RelayItem.Country>(mockk(), mockk())
89+
val mockCustomList = listOf<RelayItem.CustomList>(mockk())
90+
val selectedItem: RelayItem = mockk()
91+
every { mockCountries.filterOnSearchTerm(any(), selectedItem) } returns mockCountries
92+
relayListWithSelectionFlow.value = RelayList(mockCustomList, mockCountries, selectedItem)
8993

9094
// Act, Assert
9195
viewModel.uiState.test {
@@ -97,19 +101,20 @@ class SelectLocationViewModelTest {
97101
(actualState.relayListState as RelayListState.RelayList).countries
98102
)
99103
assertEquals(
100-
selectedRelay,
101-
(actualState.relayListState as RelayListState.RelayList).selectedRelay
104+
selectedItem,
105+
(actualState.relayListState as RelayListState.RelayList).selectedItem
102106
)
103107
}
104108
}
105109

106110
@Test
107111
fun testUpdateLocationsNoSelectedRelay() = runTest {
108112
// Arrange
109-
val mockCountries = listOf<RelayCountry>(mockk(), mockk())
110-
val selectedRelay: RelayItem? = null
111-
every { mockCountries.filterOnSearchTerm(any(), selectedRelay) } returns mockCountries
112-
relayListWithSelectionFlow.value = RelayList(mockCountries, selectedRelay)
113+
val mockCustomList = listOf<RelayItem.CustomList>(mockk())
114+
val mockCountries = listOf<RelayItem.Country>(mockk(), mockk())
115+
val selectedItem: RelayItem? = null
116+
every { mockCountries.filterOnSearchTerm(any(), selectedItem) } returns mockCountries
117+
relayListWithSelectionFlow.value = RelayList(mockCustomList, mockCountries, selectedItem)
113118

114119
// Act, Assert
115120
viewModel.uiState.test {
@@ -121,21 +126,24 @@ class SelectLocationViewModelTest {
121126
(actualState.relayListState as RelayListState.RelayList).countries
122127
)
123128
assertEquals(
124-
selectedRelay,
125-
(actualState.relayListState as RelayListState.RelayList).selectedRelay
129+
selectedItem,
130+
(actualState.relayListState as RelayListState.RelayList).selectedItem
126131
)
127132
}
128133
}
129134

130135
@Test
131136
fun testSelectRelayAndClose() = runTest {
132137
// Arrange
133-
val mockRelayItem: RelayItem = mockk()
138+
val mockRelayItem: RelayItem.Country = mockk()
134139
val mockLocation: GeographicLocationConstraint.Country = mockk(relaxed = true)
140+
val mockLocationConstraint: LocationConstraint = mockk()
135141
val connectionProxyMock: ConnectionProxy = mockk(relaxUnitFun = true)
136142
every { mockRelayItem.location } returns mockLocation
137143
every { mockServiceConnectionManager.connectionProxy() } returns connectionProxyMock
138-
every { mockRelayListUseCase.updateSelectedRelayLocation(mockLocation) } returns Unit
144+
every { mockRelayListUseCase.updateSelectedRelayLocation(mockLocationConstraint) } returns
145+
Unit
146+
every { mockRelayItem.toLocationConstraint() } returns mockLocationConstraint
139147

140148
// Act, Assert
141149
viewModel.uiSideEffect.test {
@@ -144,21 +152,22 @@ class SelectLocationViewModelTest {
144152
assertEquals(SelectLocationSideEffect.CloseScreen, awaitItem())
145153
verify {
146154
connectionProxyMock.connect()
147-
mockRelayListUseCase.updateSelectedRelayLocation(mockLocation)
155+
mockRelayListUseCase.updateSelectedRelayLocation(mockLocationConstraint)
148156
}
149157
}
150158
}
151159

152160
@Test
153161
fun testFilterRelay() = runTest {
154162
// Arrange
155-
val mockCountries = listOf<RelayCountry>(mockk(), mockk())
156-
val selectedRelay: RelayItem? = null
157-
val mockRelayList: List<RelayCountry> = mockk(relaxed = true)
163+
val mockCustomList = listOf<RelayItem.CustomList>(mockk())
164+
val mockCountries = listOf<RelayItem.Country>(mockk(), mockk())
165+
val selectedItem: RelayItem? = null
166+
val mockRelayList: List<RelayItem.Country> = mockk(relaxed = true)
158167
val mockSearchString = "SEARCH"
159-
every { mockRelayList.filterOnSearchTerm(mockSearchString, selectedRelay) } returns
168+
every { mockRelayList.filterOnSearchTerm(mockSearchString, selectedItem) } returns
160169
mockCountries
161-
relayListWithSelectionFlow.value = RelayList(mockRelayList, selectedRelay)
170+
relayListWithSelectionFlow.value = RelayList(mockCustomList, mockRelayList, selectedItem)
162171

163172
// Act, Assert
164173
viewModel.uiState.test {
@@ -177,22 +186,23 @@ class SelectLocationViewModelTest {
177186
(actualState.relayListState as RelayListState.RelayList).countries
178187
)
179188
assertEquals(
180-
selectedRelay,
181-
(actualState.relayListState as RelayListState.RelayList).selectedRelay
189+
selectedItem,
190+
(actualState.relayListState as RelayListState.RelayList).selectedItem
182191
)
183192
}
184193
}
185194

186195
@Test
187196
fun testFilterNotFound() = runTest {
188197
// Arrange
189-
val mockCountries = emptyList<RelayCountry>()
190-
val selectedRelay: RelayItem? = null
191-
val mockRelayList: List<RelayCountry> = mockk(relaxed = true)
198+
val mockCustomList = listOf<RelayItem.CustomList>(mockk())
199+
val mockCountries = emptyList<RelayItem.Country>()
200+
val selectedItem: RelayItem? = null
201+
val mockRelayList: List<RelayItem.Country> = mockk(relaxed = true)
192202
val mockSearchString = "SEARCH"
193-
every { mockRelayList.filterOnSearchTerm(mockSearchString, selectedRelay) } returns
203+
every { mockRelayList.filterOnSearchTerm(mockSearchString, selectedItem) } returns
194204
mockCountries
195-
relayListWithSelectionFlow.value = RelayList(mockRelayList, selectedRelay)
205+
relayListWithSelectionFlow.value = RelayList(mockCustomList, mockRelayList, selectedItem)
196206

197207
// Act, Assert
198208
viewModel.uiState.test {
@@ -250,5 +260,7 @@ class SelectLocationViewModelTest {
250260
"net.mullvad.mullvadvpn.ui.serviceconnection.ServiceConnectionManagerExtensionsKt"
251261
private const val RELAY_LIST_EXTENSIONS =
252262
"net.mullvad.mullvadvpn.relaylist.RelayListExtensionsKt"
263+
private const val RELAY_ITEM_EXTENSIONS =
264+
"net.mullvad.mullvadvpn.relaylist.RelayItemExtensionsKt"
253265
}
254266
}

0 commit comments

Comments
 (0)