Skip to content

Commit 7f99e9a

Browse files
committed
Refactor screens to use preview parameter provider
1 parent 2c71523 commit 7f99e9a

File tree

46 files changed

+665
-239
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+665
-239
lines changed

android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/EditCustomListScreenTest.kt

+8-8
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import io.mockk.verify
1010
import net.mullvad.mullvadvpn.compose.createEdgeToEdgeComposeExtension
1111
import net.mullvad.mullvadvpn.compose.data.DUMMY_CUSTOM_LISTS
1212
import net.mullvad.mullvadvpn.compose.setContentWithTheme
13-
import net.mullvad.mullvadvpn.compose.state.EditCustomListState
13+
import net.mullvad.mullvadvpn.compose.state.EditCustomListUiState
1414
import net.mullvad.mullvadvpn.compose.test.CIRCULAR_PROGRESS_INDICATOR
1515
import net.mullvad.mullvadvpn.compose.test.DELETE_DROPDOWN_MENU_ITEM_TEST_TAG
1616
import net.mullvad.mullvadvpn.compose.test.TOP_BAR_DROPDOWN_BUTTON_TEST_TAG
@@ -33,7 +33,7 @@ class EditCustomListScreenTest {
3333
fun givenLoadingStateShouldShowLoadingSpinner() =
3434
composeExtension.use {
3535
// Arrange
36-
setContentWithTheme { EditCustomListScreen(state = EditCustomListState.Loading) }
36+
setContentWithTheme { EditCustomListScreen(state = EditCustomListUiState.Loading) }
3737

3838
// Assert
3939
onNodeWithTag(CIRCULAR_PROGRESS_INDICATOR).assertExists()
@@ -43,7 +43,7 @@ class EditCustomListScreenTest {
4343
fun givenNotFoundStateShouldShowNotFound() =
4444
composeExtension.use {
4545
// Arrange
46-
setContentWithTheme { EditCustomListScreen(state = EditCustomListState.NotFound) }
46+
setContentWithTheme { EditCustomListScreen(state = EditCustomListUiState.NotFound) }
4747

4848
// Assert
4949
onNodeWithText(NOT_FOUND_TEXT).assertExists()
@@ -57,7 +57,7 @@ class EditCustomListScreenTest {
5757
setContentWithTheme {
5858
EditCustomListScreen(
5959
state =
60-
EditCustomListState.Content(
60+
EditCustomListUiState.Content(
6161
id = customList.id,
6262
name = customList.name,
6363
locations = customList.locations,
@@ -77,7 +77,7 @@ class EditCustomListScreenTest {
7777
setContentWithTheme {
7878
EditCustomListScreen(
7979
state =
80-
EditCustomListState.Content(
80+
EditCustomListUiState.Content(
8181
id = customList.id,
8282
name = customList.name,
8383
locations = customList.locations,
@@ -98,7 +98,7 @@ class EditCustomListScreenTest {
9898
setContentWithTheme {
9999
EditCustomListScreen(
100100
state =
101-
EditCustomListState.Content(
101+
EditCustomListUiState.Content(
102102
id = customList.id,
103103
name = customList.name,
104104
locations = customList.locations,
@@ -124,7 +124,7 @@ class EditCustomListScreenTest {
124124
setContentWithTheme {
125125
EditCustomListScreen(
126126
state =
127-
EditCustomListState.Content(
127+
EditCustomListUiState.Content(
128128
id = customList.id,
129129
name = customList.name,
130130
locations = customList.locations,
@@ -149,7 +149,7 @@ class EditCustomListScreenTest {
149149
setContentWithTheme {
150150
EditCustomListScreen(
151151
state =
152-
EditCustomListState.Content(
152+
EditCustomListUiState.Content(
153153
id = customList.id,
154154
name = customList.name,
155155
locations = customList.locations,

android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/FilterScreenTest.kt

+7-7
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import io.mockk.mockk
88
import io.mockk.verify
99
import net.mullvad.mullvadvpn.compose.createEdgeToEdgeComposeExtension
1010
import net.mullvad.mullvadvpn.compose.setContentWithTheme
11-
import net.mullvad.mullvadvpn.compose.state.RelayFilterState
11+
import net.mullvad.mullvadvpn.compose.state.RelayFilterUiState
1212
import net.mullvad.mullvadvpn.lib.model.Ownership
1313
import net.mullvad.mullvadvpn.lib.model.Provider
1414
import net.mullvad.mullvadvpn.lib.model.ProviderId
@@ -29,7 +29,7 @@ class FilterScreenTest {
2929
setContentWithTheme {
3030
FilterScreen(
3131
state =
32-
RelayFilterState(
32+
RelayFilterUiState(
3333
allProviders = DUMMY_RELAY_ALL_PROVIDERS,
3434
selectedOwnership = null,
3535
selectedProviders = DUMMY_SELECTED_PROVIDERS,
@@ -47,7 +47,7 @@ class FilterScreenTest {
4747
setContentWithTheme {
4848
FilterScreen(
4949
state =
50-
RelayFilterState(
50+
RelayFilterUiState(
5151
allProviders = DUMMY_RELAY_ALL_PROVIDERS,
5252
selectedOwnership = null,
5353
selectedProviders = DUMMY_SELECTED_PROVIDERS,
@@ -65,7 +65,7 @@ class FilterScreenTest {
6565
setContentWithTheme {
6666
FilterScreen(
6767
state =
68-
RelayFilterState(
68+
RelayFilterUiState(
6969
allProviders = DUMMY_RELAY_ALL_PROVIDERS,
7070
selectedOwnership = Ownership.MullvadOwned,
7171
selectedProviders = DUMMY_SELECTED_PROVIDERS,
@@ -83,7 +83,7 @@ class FilterScreenTest {
8383
setContentWithTheme {
8484
FilterScreen(
8585
state =
86-
RelayFilterState(
86+
RelayFilterUiState(
8787
allProviders = DUMMY_RELAY_ALL_PROVIDERS,
8888
selectedOwnership = Ownership.Rented,
8989
selectedProviders = DUMMY_SELECTED_PROVIDERS,
@@ -101,7 +101,7 @@ class FilterScreenTest {
101101
setContentWithTheme {
102102
FilterScreen(
103103
state =
104-
RelayFilterState(
104+
RelayFilterUiState(
105105
allProviders = DUMMY_RELAY_ALL_PROVIDERS,
106106
selectedOwnership = null,
107107
selectedProviders = DUMMY_SELECTED_PROVIDERS,
@@ -122,7 +122,7 @@ class FilterScreenTest {
122122
setContentWithTheme {
123123
FilterScreen(
124124
state =
125-
RelayFilterState(
125+
RelayFilterUiState(
126126
allProviders = listOf(),
127127
selectedOwnership = null,
128128
selectedProviders =

android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/ServerIpOverridesScreenTest.kt

+9-13
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import net.mullvad.mullvadvpn.compose.test.SERVER_IP_OVERRIDE_IMPORT_TEST_TAG
1616
import net.mullvad.mullvadvpn.compose.test.SERVER_IP_OVERRIDE_INFO_TEST_TAG
1717
import net.mullvad.mullvadvpn.compose.test.SERVER_IP_OVERRIDE_MORE_VERT_TEST_TAG
1818
import net.mullvad.mullvadvpn.compose.test.SERVER_IP_OVERRIDE_RESET_OVERRIDES_TEST_TAG
19-
import net.mullvad.mullvadvpn.viewmodel.ServerIpOverridesViewState
19+
import net.mullvad.mullvadvpn.viewmodel.ServerIpOverridesUiState
2020
import org.junit.jupiter.api.BeforeEach
2121
import org.junit.jupiter.api.Test
2222
import org.junit.jupiter.api.extension.RegisterExtension
@@ -33,7 +33,7 @@ class ServerIpOverridesScreenTest {
3333
@Suppress("TestFunctionName")
3434
@Composable
3535
private fun ScreenWithDefault(
36-
state: ServerIpOverridesViewState,
36+
state: ServerIpOverridesUiState,
3737
onBackClick: () -> Unit = {},
3838
onInfoClick: () -> Unit = {},
3939
onResetOverridesClick: () -> Unit = {},
@@ -55,7 +55,7 @@ class ServerIpOverridesScreenTest {
5555
composeExtension.use {
5656
// Arrange
5757
setContentWithTheme {
58-
ScreenWithDefault(state = ServerIpOverridesViewState.Loaded(false))
58+
ScreenWithDefault(state = ServerIpOverridesUiState.Loaded(false))
5959
}
6060

6161
// Assert
@@ -66,9 +66,7 @@ class ServerIpOverridesScreenTest {
6666
fun ensure_overrides_active_is_displayed() =
6767
composeExtension.use {
6868
// Arrange
69-
setContentWithTheme {
70-
ScreenWithDefault(state = ServerIpOverridesViewState.Loaded(true))
71-
}
69+
setContentWithTheme { ScreenWithDefault(state = ServerIpOverridesUiState.Loaded(true)) }
7270

7371
// Assert
7472
onNodeWithText("Overrides active").assertExists()
@@ -78,9 +76,7 @@ class ServerIpOverridesScreenTest {
7876
fun ensure_overrides_active_shows_warning_on_import() =
7977
composeExtension.use {
8078
// Arrange
81-
setContentWithTheme {
82-
ScreenWithDefault(state = ServerIpOverridesViewState.Loaded(true))
83-
}
79+
setContentWithTheme { ScreenWithDefault(state = ServerIpOverridesUiState.Loaded(true)) }
8480

8581
// Act
8682
onNodeWithTag(testTag = SERVER_IP_OVERRIDE_IMPORT_TEST_TAG).performClick()
@@ -99,7 +95,7 @@ class ServerIpOverridesScreenTest {
9995
val clickHandler: () -> Unit = mockk(relaxed = true)
10096
setContentWithTheme {
10197
ScreenWithDefault(
102-
state = ServerIpOverridesViewState.Loaded(false),
98+
state = ServerIpOverridesUiState.Loaded(false),
10399
onInfoClick = clickHandler,
104100
)
105101
}
@@ -118,7 +114,7 @@ class ServerIpOverridesScreenTest {
118114
val clickHandler: () -> Unit = mockk(relaxed = true)
119115
setContentWithTheme {
120116
ScreenWithDefault(
121-
state = ServerIpOverridesViewState.Loaded(true),
117+
state = ServerIpOverridesUiState.Loaded(true),
122118
onResetOverridesClick = clickHandler,
123119
)
124120
}
@@ -138,7 +134,7 @@ class ServerIpOverridesScreenTest {
138134
val clickHandler: () -> Unit = mockk(relaxed = true)
139135
setContentWithTheme {
140136
ScreenWithDefault(
141-
state = ServerIpOverridesViewState.Loaded(false),
137+
state = ServerIpOverridesUiState.Loaded(false),
142138
onImportByFile = clickHandler,
143139
)
144140
}
@@ -158,7 +154,7 @@ class ServerIpOverridesScreenTest {
158154
val clickHandler: () -> Unit = mockk(relaxed = true)
159155
setContentWithTheme {
160156
ScreenWithDefault(
161-
state = ServerIpOverridesViewState.Loaded(false),
157+
state = ServerIpOverridesUiState.Loaded(false),
162158
onImportByText = clickHandler,
163159
)
164160
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package net.mullvad.mullvadvpn.compose.preview
2+
3+
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
4+
import net.mullvad.mullvadvpn.compose.state.PaymentState
5+
import net.mullvad.mullvadvpn.lib.model.AccountNumber
6+
import net.mullvad.mullvadvpn.lib.payment.model.PaymentProduct
7+
import net.mullvad.mullvadvpn.lib.payment.model.PaymentStatus
8+
import net.mullvad.mullvadvpn.lib.payment.model.ProductId
9+
import net.mullvad.mullvadvpn.lib.payment.model.ProductPrice
10+
import net.mullvad.mullvadvpn.viewmodel.AccountUiState
11+
import org.joda.time.DateTime
12+
13+
class AccountUiStatePreviewParameterProvider : PreviewParameterProvider<AccountUiState> {
14+
override val values =
15+
sequenceOf(
16+
AccountUiState(
17+
deviceName = "Test Name",
18+
accountNumber = AccountNumber("1234123412341234"),
19+
accountExpiry = DateTime.parse("2050-12-01"),
20+
showSitePayment = true,
21+
billingPaymentState =
22+
PaymentState.PaymentAvailable(
23+
listOf(
24+
PaymentProduct(
25+
ProductId("productId"),
26+
price = ProductPrice("34 SEK"),
27+
status = null,
28+
),
29+
PaymentProduct(
30+
ProductId("productId_pending"),
31+
price = ProductPrice("34 SEK"),
32+
status = PaymentStatus.PENDING,
33+
),
34+
)
35+
),
36+
)
37+
) + generateOtherStates()
38+
}
39+
40+
private fun generateOtherStates(): Sequence<AccountUiState> =
41+
sequenceOf(
42+
PaymentState.Loading,
43+
PaymentState.NoPayment,
44+
PaymentState.NoProductsFounds,
45+
PaymentState.Error.Billing,
46+
)
47+
.map { state ->
48+
AccountUiState(
49+
deviceName = "Test Name",
50+
accountNumber = AccountNumber("1234123412341234"),
51+
accountExpiry = null,
52+
showSitePayment = false,
53+
billingPaymentState = state,
54+
)
55+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package net.mullvad.mullvadvpn.compose.preview
2+
3+
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
4+
import java.net.InetAddress
5+
import net.mullvad.mullvadvpn.compose.state.ConnectUiState
6+
import net.mullvad.mullvadvpn.lib.model.ActionAfterDisconnect
7+
import net.mullvad.mullvadvpn.lib.model.GeoIpLocation
8+
import net.mullvad.mullvadvpn.lib.model.TransportProtocol
9+
10+
private const val PORT = 23451
11+
12+
class ConnectUiStatePreviewParameterProvider : PreviewParameterProvider<ConnectUiState> {
13+
override val values = sequenceOf(ConnectUiState.INITIAL) + generateOtherStates()
14+
}
15+
16+
private fun generateOtherStates(): Sequence<ConnectUiState> =
17+
sequenceOf(
18+
TunnelStatePreviewData.generateConnectedState(
19+
featureIndicators = 8,
20+
quantumResistant = true,
21+
),
22+
TunnelStatePreviewData.generateDisconnectedState(),
23+
TunnelStatePreviewData.generateConnectingState(
24+
featureIndicators = 4,
25+
quantumResistant = false,
26+
),
27+
TunnelStatePreviewData.generateDisconnectingState(
28+
actionAfterDisconnect = ActionAfterDisconnect.Reconnect
29+
),
30+
TunnelStatePreviewData.generateErrorState(isBlocking = true),
31+
)
32+
.map { state ->
33+
ConnectUiState(
34+
location =
35+
GeoIpLocation(
36+
ipv4 = InetAddress.getLocalHost(),
37+
ipv6 = null,
38+
country = "Sweden",
39+
city = "Göteborg",
40+
latitude = 23.3,
41+
longitude = 12.99,
42+
hostname = "Hostname",
43+
),
44+
selectedRelayItemTitle = "Relay Title",
45+
tunnelState = state,
46+
inAddress = Triple("inaddress", PORT, TransportProtocol.Tcp),
47+
outAddress = "192.168.1.1",
48+
showLocation = true,
49+
inAppNotification = null,
50+
deviceName = "Cool Beans",
51+
daysLeftUntilExpiry = 42,
52+
isPlayBuild = true,
53+
)
54+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package net.mullvad.mullvadvpn.compose.preview
2+
3+
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
4+
import net.mullvad.mullvadvpn.compose.state.CustomListLocationsUiState
5+
import net.mullvad.mullvadvpn.compose.state.RelayLocationListItem
6+
import net.mullvad.mullvadvpn.lib.model.GeoLocationId
7+
8+
class CustomListLocationUiStatePreviewParameterProvider :
9+
PreviewParameterProvider<CustomListLocationsUiState> {
10+
override val values =
11+
sequenceOf(
12+
CustomListLocationsUiState.Content.Data(
13+
newList = true,
14+
locations =
15+
listOf(
16+
RelayLocationListItem(
17+
item =
18+
RelayItemPreviewData.generateRelayItemCountry(
19+
name = "A relay",
20+
cityNames = listOf("City 1", "City 2"),
21+
relaysPerCity = 2,
22+
active = true,
23+
)
24+
),
25+
RelayLocationListItem(
26+
item =
27+
RelayItemPreviewData.generateRelayItemCountry(
28+
name = "Another relay",
29+
cityNames = listOf("City X", "City Y", "City Z"),
30+
relaysPerCity = 1,
31+
active = false,
32+
)
33+
.copy(id = GeoLocationId.Country("se"))
34+
),
35+
),
36+
searchTerm = "",
37+
saveEnabled = true,
38+
hasUnsavedChanges = true,
39+
),
40+
CustomListLocationsUiState.Content.Empty(newList = false, searchTerm = "searchTerm"),
41+
CustomListLocationsUiState.Loading(newList = true),
42+
)
43+
}

0 commit comments

Comments
 (0)