@@ -20,13 +20,14 @@ import net.mullvad.mullvadvpn.lib.common.test.TestCoroutineRule
20
20
import net.mullvad.mullvadvpn.lib.common.test.assertLists
21
21
import net.mullvad.mullvadvpn.model.Constraint
22
22
import net.mullvad.mullvadvpn.model.GeographicLocationConstraint
23
+ import net.mullvad.mullvadvpn.model.LocationConstraint
23
24
import net.mullvad.mullvadvpn.model.Ownership
24
25
import net.mullvad.mullvadvpn.model.Providers
25
26
import net.mullvad.mullvadvpn.relaylist.Provider
26
- import net.mullvad.mullvadvpn.relaylist.RelayCountry
27
27
import net.mullvad.mullvadvpn.relaylist.RelayItem
28
28
import net.mullvad.mullvadvpn.relaylist.RelayList
29
29
import net.mullvad.mullvadvpn.relaylist.filterOnSearchTerm
30
+ import net.mullvad.mullvadvpn.relaylist.toLocationConstraint
30
31
import net.mullvad.mullvadvpn.ui.serviceconnection.ConnectionProxy
31
32
import net.mullvad.mullvadvpn.ui.serviceconnection.ServiceConnectionManager
32
33
import net.mullvad.mullvadvpn.ui.serviceconnection.connectionProxy
@@ -43,7 +44,8 @@ class SelectLocationViewModelTest {
43
44
private val mockRelayListFilterUseCase: RelayListFilterUseCase = mockk(relaxed = true )
44
45
private val mockServiceConnectionManager: ServiceConnectionManager = mockk()
45
46
private lateinit var viewModel: SelectLocationViewModel
46
- private val relayListWithSelectionFlow = MutableStateFlow (RelayList (emptyList(), null ))
47
+ private val relayListWithSelectionFlow =
48
+ MutableStateFlow (RelayList (emptyList(), emptyList(), null ))
47
49
private val mockRelayListUseCase: RelayListUseCase = mockk()
48
50
private val selectedOwnership = MutableStateFlow <Constraint <Ownership >>(Constraint .Any ())
49
51
private val selectedProvider = MutableStateFlow <Constraint <Providers >>(Constraint .Any ())
@@ -60,6 +62,7 @@ class SelectLocationViewModelTest {
60
62
61
63
mockkStatic(SERVICE_CONNECTION_MANAGER_EXTENSIONS )
62
64
mockkStatic(RELAY_LIST_EXTENSIONS )
65
+ mockkStatic(RELAY_ITEM_EXTENSIONS )
63
66
viewModel =
64
67
SelectLocationViewModel (
65
68
mockServiceConnectionManager,
@@ -82,10 +85,11 @@ class SelectLocationViewModelTest {
82
85
@Test
83
86
fun testUpdateLocations () = runTest {
84
87
// 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)
89
93
90
94
// Act, Assert
91
95
viewModel.uiState.test {
@@ -97,19 +101,20 @@ class SelectLocationViewModelTest {
97
101
(actualState.relayListState as RelayListState .RelayList ).countries
98
102
)
99
103
assertEquals(
100
- selectedRelay ,
101
- (actualState.relayListState as RelayListState .RelayList ).selectedRelay
104
+ selectedItem ,
105
+ (actualState.relayListState as RelayListState .RelayList ).selectedItem
102
106
)
103
107
}
104
108
}
105
109
106
110
@Test
107
111
fun testUpdateLocationsNoSelectedRelay () = runTest {
108
112
// 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)
113
118
114
119
// Act, Assert
115
120
viewModel.uiState.test {
@@ -121,21 +126,24 @@ class SelectLocationViewModelTest {
121
126
(actualState.relayListState as RelayListState .RelayList ).countries
122
127
)
123
128
assertEquals(
124
- selectedRelay ,
125
- (actualState.relayListState as RelayListState .RelayList ).selectedRelay
129
+ selectedItem ,
130
+ (actualState.relayListState as RelayListState .RelayList ).selectedItem
126
131
)
127
132
}
128
133
}
129
134
130
135
@Test
131
136
fun testSelectRelayAndClose () = runTest {
132
137
// Arrange
133
- val mockRelayItem: RelayItem = mockk()
138
+ val mockRelayItem: RelayItem . Country = mockk()
134
139
val mockLocation: GeographicLocationConstraint .Country = mockk(relaxed = true )
140
+ val mockLocationConstraint: LocationConstraint = mockk()
135
141
val connectionProxyMock: ConnectionProxy = mockk(relaxUnitFun = true )
136
142
every { mockRelayItem.location } returns mockLocation
137
143
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
139
147
140
148
// Act, Assert
141
149
viewModel.uiSideEffect.test {
@@ -144,21 +152,22 @@ class SelectLocationViewModelTest {
144
152
assertEquals(SelectLocationSideEffect .CloseScreen , awaitItem())
145
153
verify {
146
154
connectionProxyMock.connect()
147
- mockRelayListUseCase.updateSelectedRelayLocation(mockLocation )
155
+ mockRelayListUseCase.updateSelectedRelayLocation(mockLocationConstraint )
148
156
}
149
157
}
150
158
}
151
159
152
160
@Test
153
161
fun testFilterRelay () = runTest {
154
162
// 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 )
158
167
val mockSearchString = " SEARCH"
159
- every { mockRelayList.filterOnSearchTerm(mockSearchString, selectedRelay ) } returns
168
+ every { mockRelayList.filterOnSearchTerm(mockSearchString, selectedItem ) } returns
160
169
mockCountries
161
- relayListWithSelectionFlow.value = RelayList (mockRelayList, selectedRelay )
170
+ relayListWithSelectionFlow.value = RelayList (mockCustomList, mockRelayList, selectedItem )
162
171
163
172
// Act, Assert
164
173
viewModel.uiState.test {
@@ -177,22 +186,23 @@ class SelectLocationViewModelTest {
177
186
(actualState.relayListState as RelayListState .RelayList ).countries
178
187
)
179
188
assertEquals(
180
- selectedRelay ,
181
- (actualState.relayListState as RelayListState .RelayList ).selectedRelay
189
+ selectedItem ,
190
+ (actualState.relayListState as RelayListState .RelayList ).selectedItem
182
191
)
183
192
}
184
193
}
185
194
186
195
@Test
187
196
fun testFilterNotFound () = runTest {
188
197
// 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 )
192
202
val mockSearchString = " SEARCH"
193
- every { mockRelayList.filterOnSearchTerm(mockSearchString, selectedRelay ) } returns
203
+ every { mockRelayList.filterOnSearchTerm(mockSearchString, selectedItem ) } returns
194
204
mockCountries
195
- relayListWithSelectionFlow.value = RelayList (mockRelayList, selectedRelay )
205
+ relayListWithSelectionFlow.value = RelayList (mockCustomList, mockRelayList, selectedItem )
196
206
197
207
// Act, Assert
198
208
viewModel.uiState.test {
@@ -250,5 +260,7 @@ class SelectLocationViewModelTest {
250
260
" net.mullvad.mullvadvpn.ui.serviceconnection.ServiceConnectionManagerExtensionsKt"
251
261
private const val RELAY_LIST_EXTENSIONS =
252
262
" net.mullvad.mullvadvpn.relaylist.RelayListExtensionsKt"
263
+ private const val RELAY_ITEM_EXTENSIONS =
264
+ " net.mullvad.mullvadvpn.relaylist.RelayItemExtensionsKt"
253
265
}
254
266
}
0 commit comments