summaryrefslogtreecommitdiffhomepage
path: root/android/app/src/androidTest
diff options
context:
space:
mode:
authorDavid Göransson <david.goransson@mullvad.net>2024-03-19 15:05:06 +0100
committerDavid Göransson <david.goransson@mullvad.net>2024-03-19 16:15:43 +0100
commit2b31f2863ffb574db9f9cdd4578d7fa59e577022 (patch)
tree0089449e2279570d5fa8603a679d1996352063fb /android/app/src/androidTest
parent7791177cbbda3a23c7bb908784352c9deb6e8aeb (diff)
downloadmullvadvpn-2b31f2863ffb574db9f9cdd4578d7fa59e577022.tar.xz
mullvadvpn-2b31f2863ffb574db9f9cdd4578d7fa59e577022.zip
Add Server IP overrides compose tests
Diffstat (limited to 'android/app/src/androidTest')
-rw-r--r--android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/dialog/ResetServerIPOverridesConfirmationDialogTest.kt67
-rw-r--r--android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/ServerIpOverridesScreenTest.kt173
2 files changed, 240 insertions, 0 deletions
diff --git a/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/dialog/ResetServerIPOverridesConfirmationDialogTest.kt b/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/dialog/ResetServerIPOverridesConfirmationDialogTest.kt
new file mode 100644
index 0000000000..df06f00fc7
--- /dev/null
+++ b/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/dialog/ResetServerIPOverridesConfirmationDialogTest.kt
@@ -0,0 +1,67 @@
+package net.mullvad.mullvadvpn.compose.dialog
+
+import androidx.compose.ui.test.ExperimentalTestApi
+import androidx.compose.ui.test.onNodeWithTag
+import androidx.compose.ui.test.performClick
+import io.mockk.MockKAnnotations
+import io.mockk.mockk
+import io.mockk.verify
+import net.mullvad.mullvadvpn.compose.createEdgeToEdgeComposeExtension
+import net.mullvad.mullvadvpn.compose.setContentWithTheme
+import net.mullvad.mullvadvpn.compose.test.RESET_SERVER_IP_OVERRIDE_CANCEL_TEST_TAG
+import net.mullvad.mullvadvpn.compose.test.RESET_SERVER_IP_OVERRIDE_RESET_TEST_TAG
+import org.junit.jupiter.api.BeforeEach
+import org.junit.jupiter.api.Test
+import org.junit.jupiter.api.extension.RegisterExtension
+
+class ResetServerIPOverridesConfirmationDialogTest {
+ @OptIn(ExperimentalTestApi::class)
+ @JvmField
+ @RegisterExtension
+ val composeExtension = createEdgeToEdgeComposeExtension()
+
+ @BeforeEach
+ fun setup() {
+ MockKAnnotations.init(this)
+ }
+
+ @Test
+ fun ensure_cancel_click_works() =
+ composeExtension.use {
+ val clickHandler: () -> Unit = mockk(relaxed = true)
+
+ // Arrange
+ setContentWithTheme {
+ ResetServerIpOverridesConfirmationDialog(
+ onNavigateBack = clickHandler,
+ onClearAllOverrides = {}
+ )
+ }
+
+ // Act
+ onNodeWithTag(RESET_SERVER_IP_OVERRIDE_CANCEL_TEST_TAG).performClick()
+
+ // Assert
+ verify { clickHandler() }
+ }
+
+ @Test
+ fun ensure_reset_click_works() =
+ composeExtension.use {
+ val clickHandler: () -> Unit = mockk(relaxed = true)
+
+ // Arrange
+ setContentWithTheme {
+ ResetServerIpOverridesConfirmationDialog(
+ onNavigateBack = {},
+ onClearAllOverrides = clickHandler
+ )
+ }
+
+ // Act
+ onNodeWithTag(RESET_SERVER_IP_OVERRIDE_RESET_TEST_TAG).performClick()
+
+ // Assert
+ verify { clickHandler() }
+ }
+}
diff --git a/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/ServerIpOverridesScreenTest.kt b/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/ServerIpOverridesScreenTest.kt
new file mode 100644
index 0000000000..32bab72de2
--- /dev/null
+++ b/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/ServerIpOverridesScreenTest.kt
@@ -0,0 +1,173 @@
+package net.mullvad.mullvadvpn.compose.screen
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.test.ExperimentalTestApi
+import androidx.compose.ui.test.onNodeWithTag
+import androidx.compose.ui.test.onNodeWithText
+import androidx.compose.ui.test.performClick
+import io.mockk.MockKAnnotations
+import io.mockk.mockk
+import io.mockk.verify
+import net.mullvad.mullvadvpn.compose.createEdgeToEdgeComposeExtension
+import net.mullvad.mullvadvpn.compose.setContentWithTheme
+import net.mullvad.mullvadvpn.compose.test.SERVER_IP_OVERRIDES_IMPORT_BY_FILE_TEST_TAG
+import net.mullvad.mullvadvpn.compose.test.SERVER_IP_OVERRIDES_IMPORT_BY_TEXT_TEST_TAG
+import net.mullvad.mullvadvpn.compose.test.SERVER_IP_OVERRIDE_IMPORT_TEST_TAG
+import net.mullvad.mullvadvpn.compose.test.SERVER_IP_OVERRIDE_INFO_TEST_TAG
+import net.mullvad.mullvadvpn.compose.test.SERVER_IP_OVERRIDE_MORE_VERT_TEST_TAG
+import net.mullvad.mullvadvpn.compose.test.SERVER_IP_OVERRIDE_RESET_OVERRIDES_TEST_TAG
+import net.mullvad.mullvadvpn.viewmodel.ServerIpOverridesViewState
+import org.junit.jupiter.api.BeforeEach
+import org.junit.jupiter.api.Test
+import org.junit.jupiter.api.extension.RegisterExtension
+
+@ExperimentalTestApi
+class ServerIpOverridesScreenTest {
+ @JvmField @RegisterExtension val composeExtension = createEdgeToEdgeComposeExtension()
+
+ @BeforeEach
+ fun setup() {
+ MockKAnnotations.init(this)
+ }
+
+ @Suppress("TestFunctionName")
+ @Composable
+ private fun ScreenWithDefault(
+ state: ServerIpOverridesViewState,
+ onBackClick: () -> Unit = {},
+ onInfoClick: () -> Unit = {},
+ onResetOverridesClick: () -> Unit = {},
+ onImportByFile: () -> Unit = {},
+ onImportByText: () -> Unit = {},
+ ) {
+ ServerIpOverridesScreen(
+ state = state,
+ onBackClick = onBackClick,
+ onInfoClick = onInfoClick,
+ onResetOverridesClick = onResetOverridesClick,
+ onImportByFile = onImportByFile,
+ onImportByText = onImportByText
+ )
+ }
+
+ @Test
+ fun ensure_overrides_inactive_is_displayed() =
+ composeExtension.use {
+ // Arrange
+ setContentWithTheme {
+ ScreenWithDefault(state = ServerIpOverridesViewState.Loaded(false))
+ }
+
+ // Assert
+ onNodeWithText("Overrides inactive").assertExists()
+ }
+
+ @Test
+ fun ensure_overrides_active_is_displayed() =
+ composeExtension.use {
+ // Arrange
+ setContentWithTheme {
+ ScreenWithDefault(state = ServerIpOverridesViewState.Loaded(true))
+ }
+
+ // Assert
+ onNodeWithText("Overrides active").assertExists()
+ }
+
+ @Test
+ fun ensure_overrides_active_shows_warning_on_import() =
+ composeExtension.use {
+ // Arrange
+ setContentWithTheme {
+ ScreenWithDefault(state = ServerIpOverridesViewState.Loaded(true))
+ }
+
+ // Act
+ onNodeWithTag(testTag = SERVER_IP_OVERRIDE_IMPORT_TEST_TAG).performClick()
+
+ // Assert
+ onNodeWithText(
+ "Importing new overrides might replace some previously imported overrides."
+ )
+ .assertExists()
+ }
+
+ @Test
+ fun ensure_info_click_works() =
+ composeExtension.use {
+ // Arrange
+ val clickHandler: () -> Unit = mockk(relaxed = true)
+ setContentWithTheme {
+ ScreenWithDefault(
+ state = ServerIpOverridesViewState.Loaded(false),
+ onInfoClick = clickHandler
+ )
+ }
+
+ // Act
+ onNodeWithTag(SERVER_IP_OVERRIDE_INFO_TEST_TAG).performClick()
+
+ // Assert
+ verify { clickHandler() }
+ }
+
+ @Test
+ fun ensure_reset_click_works() =
+ composeExtension.use {
+ // Arrange
+ val clickHandler: () -> Unit = mockk(relaxed = true)
+ setContentWithTheme {
+ ScreenWithDefault(
+ state = ServerIpOverridesViewState.Loaded(true),
+ onResetOverridesClick = clickHandler
+ )
+ }
+
+ // Act
+ onNodeWithTag(SERVER_IP_OVERRIDE_MORE_VERT_TEST_TAG).performClick()
+ onNodeWithTag(SERVER_IP_OVERRIDE_RESET_OVERRIDES_TEST_TAG).performClick()
+
+ // Assert
+ verify { clickHandler() }
+ }
+
+ @Test
+ fun ensure_import_by_file_works() =
+ composeExtension.use {
+ // Arrange
+ val clickHandler: () -> Unit = mockk(relaxed = true)
+ setContentWithTheme {
+ ScreenWithDefault(
+ state = ServerIpOverridesViewState.Loaded(false),
+ onImportByFile = clickHandler
+ )
+ }
+
+ // Act
+ onNodeWithTag(SERVER_IP_OVERRIDE_IMPORT_TEST_TAG).performClick()
+ onNodeWithTag(SERVER_IP_OVERRIDES_IMPORT_BY_FILE_TEST_TAG).performClick()
+
+ // Assert
+ verify { clickHandler() }
+ }
+
+ @Test
+ fun ensure_import_by_text() =
+ composeExtension.use {
+ // Arrange
+ val clickHandler: () -> Unit = mockk(relaxed = true)
+ setContentWithTheme {
+ ScreenWithDefault(
+ state = ServerIpOverridesViewState.Loaded(false),
+ onImportByText = clickHandler
+ )
+ }
+
+ // Act
+ onNodeWithTag(SERVER_IP_OVERRIDE_IMPORT_TEST_TAG).performClick()
+ onNodeWithTag(SERVER_IP_OVERRIDES_IMPORT_BY_TEXT_TEST_TAG).performClick()
+
+ // Assert
+ verify { clickHandler() }
+ }
+}