diff options
| author | David Göransson <david.goransson@mullvad.net> | 2024-03-19 15:05:06 +0100 |
|---|---|---|
| committer | David Göransson <david.goransson@mullvad.net> | 2024-03-19 16:15:43 +0100 |
| commit | 2b31f2863ffb574db9f9cdd4578d7fa59e577022 (patch) | |
| tree | 0089449e2279570d5fa8603a679d1996352063fb /android/app/src/androidTest | |
| parent | 7791177cbbda3a23c7bb908784352c9deb6e8aeb (diff) | |
| download | mullvadvpn-2b31f2863ffb574db9f9cdd4578d7fa59e577022.tar.xz mullvadvpn-2b31f2863ffb574db9f9cdd4578d7fa59e577022.zip | |
Add Server IP overrides compose tests
Diffstat (limited to 'android/app/src/androidTest')
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() } + } +} |
