Skip to content

Commit 1be222f

Browse files
committed
Fix more things
1 parent e2f9650 commit 1be222f

File tree

5 files changed

+115
-19
lines changed

5 files changed

+115
-19
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package net.mullvad.mullvadvpn.compose.dialog
2+
3+
import androidx.compose.ui.test.ExperimentalTestApi
4+
import androidx.compose.ui.test.onNodeWithText
5+
import androidx.compose.ui.test.performClick
6+
import io.mockk.MockKAnnotations
7+
import io.mockk.mockk
8+
import io.mockk.verify
9+
import net.mullvad.mullvadvpn.compose.createEdgeToEdgeComposeExtension
10+
import net.mullvad.mullvadvpn.compose.setContentWithTheme
11+
import org.junit.jupiter.api.BeforeEach
12+
import org.junit.jupiter.api.Test
13+
import org.junit.jupiter.api.extension.RegisterExtension
14+
15+
class ResetServerIPOverridesConfirmationDialogTest {
16+
@OptIn(ExperimentalTestApi::class)
17+
@JvmField
18+
@RegisterExtension
19+
val composeExtension = createEdgeToEdgeComposeExtension()
20+
21+
@BeforeEach
22+
fun setup() {
23+
MockKAnnotations.init(this)
24+
}
25+
26+
@Test
27+
fun givenNameShouldShowDeleteNameTitle() =
28+
composeExtension.use {
29+
// Arrange
30+
val name = "List should be deleted"
31+
setContentWithTheme { DeleteCustomListConfirmationDialog(name = name) }
32+
33+
// Assert
34+
onNodeWithText(DELETE_TITLE.format(name)).assertExists()
35+
}
36+
37+
@Test
38+
fun whenDeleteIsClickedShouldCallOnDelete() =
39+
composeExtension.use {
40+
// Arrange
41+
val name = "List should be deleted"
42+
val mockedOnDelete: () -> Unit = mockk(relaxed = true)
43+
setContentWithTheme {
44+
DeleteCustomListConfirmationDialog(name = name, onDelete = mockedOnDelete)
45+
}
46+
47+
// Act
48+
onNodeWithText(DELETE_BUTTON_TEXT).performClick()
49+
50+
// Assert
51+
verify { mockedOnDelete.invoke() }
52+
}
53+
54+
@Test
55+
fun whenCancelIsClickedShouldCallOnBack() =
56+
composeExtension.use {
57+
// Arrange
58+
val name = "List should be deleted"
59+
val mockedOnBack: () -> Unit = mockk(relaxed = true)
60+
setContentWithTheme {
61+
DeleteCustomListConfirmationDialog(name = name, onBack = mockedOnBack)
62+
}
63+
64+
// Act
65+
onNodeWithText(CANCEL_BUTTON_TEXT).performClick()
66+
67+
// Assert
68+
verify { mockedOnBack.invoke() }
69+
}
70+
71+
companion object {
72+
private const val DELETE_TITLE = "Delete \"%s\"?"
73+
private const val CANCEL_BUTTON_TEXT = "Cancel"
74+
private const val DELETE_BUTTON_TEXT = "Delete"
75+
}
76+
}

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

+19-9
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,9 @@ class ServerIpOverridesScreenTest {
3030
MockKAnnotations.init(this)
3131
}
3232

33+
@Suppress("TestFunctionName")
3334
@Composable
34-
private fun Screen(
35+
private fun ScreenWithDefault(
3536
state: ServerIpOverridesViewState,
3637
onBackClick: () -> Unit = {},
3738
onInfoClick: () -> Unit = {},
@@ -53,7 +54,7 @@ class ServerIpOverridesScreenTest {
5354
fun testOverridesInactive() =
5455
composeExtension.use {
5556
// Arrange
56-
setContentWithTheme { Screen(state = ServerIpOverridesViewState(false)) }
57+
setContentWithTheme { ScreenWithDefault(state = ServerIpOverridesViewState(false)) }
5758

5859
// Assert
5960
onNodeWithText("Overrides inactive").assertExists()
@@ -63,7 +64,7 @@ class ServerIpOverridesScreenTest {
6364
fun testOverridesActive() =
6465
composeExtension.use {
6566
// Arrange
66-
setContentWithTheme { Screen(state = ServerIpOverridesViewState(true)) }
67+
setContentWithTheme { ScreenWithDefault(state = ServerIpOverridesViewState(true)) }
6768

6869
// Assert
6970
onNodeWithText("Overrides active").assertExists()
@@ -73,7 +74,7 @@ class ServerIpOverridesScreenTest {
7374
fun testOverridesActiveShowsWarningOnImport() =
7475
composeExtension.use {
7576
// Arrange
76-
setContentWithTheme { Screen(state = ServerIpOverridesViewState(true)) }
77+
setContentWithTheme { ScreenWithDefault(state = ServerIpOverridesViewState(true)) }
7778

7879
// Act
7980
onNodeWithTag(testTag = SERVER_IP_OVERRIDE_IMPORT_TEST_TAG).performClick()
@@ -91,7 +92,10 @@ class ServerIpOverridesScreenTest {
9192
// Arrange
9293
val clickHandler: () -> Unit = mockk(relaxed = true)
9394
setContentWithTheme {
94-
Screen(state = ServerIpOverridesViewState(false), onInfoClick = clickHandler)
95+
ScreenWithDefault(
96+
state = ServerIpOverridesViewState(false),
97+
onInfoClick = clickHandler
98+
)
9599
}
96100

97101
// Act
@@ -107,8 +111,8 @@ class ServerIpOverridesScreenTest {
107111
// Arrange
108112
val clickHandler: () -> Unit = mockk(relaxed = true)
109113
setContentWithTheme {
110-
Screen(
111-
state = ServerIpOverridesViewState(false),
114+
ScreenWithDefault(
115+
state = ServerIpOverridesViewState(true),
112116
onResetOverridesClick = clickHandler
113117
)
114118
}
@@ -127,7 +131,10 @@ class ServerIpOverridesScreenTest {
127131
// Arrange
128132
val clickHandler: () -> Unit = mockk(relaxed = true)
129133
setContentWithTheme {
130-
Screen(state = ServerIpOverridesViewState(false), onImportByFile = clickHandler)
134+
ScreenWithDefault(
135+
state = ServerIpOverridesViewState(false),
136+
onImportByFile = clickHandler
137+
)
131138
}
132139

133140
// Act
@@ -144,7 +151,10 @@ class ServerIpOverridesScreenTest {
144151
// Arrange
145152
val clickHandler: () -> Unit = mockk(relaxed = true)
146153
setContentWithTheme {
147-
Screen(state = ServerIpOverridesViewState(false), onImportByText = clickHandler)
154+
ScreenWithDefault(
155+
state = ServerIpOverridesViewState(false),
156+
onImportByText = clickHandler
157+
)
148158
}
149159

150160
// Act

android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/ResetServerIpOverridesConfirmationDialog.kt

+17-8
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import androidx.compose.ui.res.stringResource
1010
import androidx.compose.ui.tooling.preview.Preview
1111
import com.ramcosta.composedestinations.annotation.Destination
1212
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
13-
import com.ramcosta.composedestinations.navigation.EmptyDestinationsNavigator
1413
import com.ramcosta.composedestinations.spec.DestinationStyle
1514
import net.mullvad.mullvadvpn.R
1615
import net.mullvad.mullvadvpn.compose.button.NegativeButton
@@ -24,34 +23,44 @@ import org.koin.androidx.compose.koinViewModel
2423
@Preview
2524
@Composable
2625
private fun PreviewResetServerIpOverridesConfirmationDialog() {
27-
AppTheme { ResetServerIpOverridesConfirmationDialog(EmptyDestinationsNavigator) }
26+
AppTheme { ResetServerIpOverridesConfirmationDialog({}, {}) }
2827
}
2928

3029
@Destination(style = DestinationStyle.Dialog::class)
3130
@Composable
32-
fun ResetServerIpOverridesConfirmationDialog(navigator: DestinationsNavigator) {
33-
val viewModel: ResetServerIpOverridesConfirmationViewModel = koinViewModel()
34-
CollectSideEffectWithLifecycle(viewModel.uiSideEffect) {
31+
fun ResetServerIpOverridesConfirmation(navigator: DestinationsNavigator) {
32+
val vm: ResetServerIpOverridesConfirmationViewModel = koinViewModel()
33+
CollectSideEffectWithLifecycle(vm.uiSideEffect) {
3534
when (it) {
3635
ResetServerIpOverridesConfirmationUiSideEffect.OverridesCleared ->
3736
navigator.navigateUp()
3837
}
3938
}
39+
ResetServerIpOverridesConfirmationDialog(
40+
onClearAllOverrides = vm::clearAllOverrides,
41+
navigator::navigateUp
42+
)
43+
}
4044

45+
@Composable
46+
fun ResetServerIpOverridesConfirmationDialog(
47+
onClearAllOverrides: () -> Unit,
48+
onNavigateBack: () -> Unit
49+
) {
4150
AlertDialog(
4251
containerColor = MaterialTheme.colorScheme.background,
4352
confirmButton = {
4453
NegativeButton(
4554
modifier = Modifier.fillMaxWidth(),
4655
text = stringResource(id = R.string.server_ip_overrides_reset_reset_button),
47-
onClick = viewModel::clearAllOverrides
56+
onClick = onClearAllOverrides
4857
)
4958
},
5059
dismissButton = {
5160
PrimaryButton(
5261
modifier = Modifier.fillMaxWidth(),
5362
text = stringResource(R.string.cancel),
54-
onClick = navigator::navigateUp
63+
onClick = onNavigateBack
5564
)
5665
},
5766
title = {
@@ -67,6 +76,6 @@ fun ResetServerIpOverridesConfirmationDialog(navigator: DestinationsNavigator) {
6776
style = MaterialTheme.typography.bodySmall,
6877
)
6978
},
70-
onDismissRequest = navigator::navigateUp
79+
onDismissRequest = onNavigateBack
7180
)
7281
}

android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ServerIpOverridesScreen.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ import net.mullvad.mullvadvpn.compose.component.MullvadModalBottomSheet
5555
import net.mullvad.mullvadvpn.compose.component.MullvadSnackbar
5656
import net.mullvad.mullvadvpn.compose.component.ScaffoldWithMediumTopBar
5757
import net.mullvad.mullvadvpn.compose.destinations.ImportOverridesByTextDestination
58-
import net.mullvad.mullvadvpn.compose.destinations.ResetServerIpOverridesConfirmationDialogDestination
58+
import net.mullvad.mullvadvpn.compose.destinations.ResetServerIpOverridesConfirmationDestination
5959
import net.mullvad.mullvadvpn.compose.destinations.ServerIpOverridesInfoDialogDestination
6060
import net.mullvad.mullvadvpn.compose.test.SERVER_IP_OVERRIDES_IMPORT_BY_FILE_TEST_TAG
6161
import net.mullvad.mullvadvpn.compose.test.SERVER_IP_OVERRIDES_IMPORT_BY_TEXT_TEST_TAG
@@ -136,7 +136,7 @@ fun ServerIpOverrides(
136136
},
137137
onResetOverridesClick = {
138138
navigator.navigate(
139-
ResetServerIpOverridesConfirmationDialogDestination,
139+
ResetServerIpOverridesConfirmationDestination,
140140
onlyIfResumed = true
141141
)
142142
},

android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/test/ComposeTestTagConstants.kt

+1
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ const val SELECT_LOCATION_CUSTOM_LIST_BOTTOM_SHEET_TEST_TAG =
6565
const val SELECT_LOCATION_LOCATION_BOTTOM_SHEET_TEST_TAG =
6666
"select_location_location_bottom_sheet_test_tag"
6767

68+
// ServerIpOverridesScreen
6869
const val SERVER_IP_OVERRIDE_IMPORT_TEST_TAG = "server_ip_override_import_button_test_tag"
6970
const val SERVER_IP_OVERRIDE_INFO_TEST_TAG = "server_ip_override_info_button_test_tag"
7071
const val SERVER_IP_OVERRIDE_MORE_VERT_TEST_TAG = "server_ip_override_more_vert_button_test_tag"

0 commit comments

Comments
 (0)