summaryrefslogtreecommitdiffhomepage
path: root/android/app/src/androidTest
diff options
context:
space:
mode:
authorMaryamShaghaghi <122574719+MaryamShaghaghi@users.noreply.github.com>2023-11-27 14:37:32 +0100
committerMaryamShaghaghi <122574719+MaryamShaghaghi@users.noreply.github.com>2023-12-04 11:33:59 +0100
commit1e64dcdbd9d82173c65a4d4b49f72f80f7de8269 (patch)
treeb2b1fcec30e0b2f89732abe653054b652176a68d /android/app/src/androidTest
parentba4658d9545d926bfe08341a5bc80c63b3a09d3e (diff)
downloadmullvadvpn-1e64dcdbd9d82173c65a4d4b49f72f80f7de8269.tar.xz
mullvadvpn-1e64dcdbd9d82173c65a4d4b49f72f80f7de8269.zip
Add filter screen and viewmodel tests
Co-Authored-By: Boban Sijuk <49131853+boki91@users.noreply.github.com>
Diffstat (limited to 'android/app/src/androidTest')
-rw-r--r--android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/FilterScreenTest.kt191
1 files changed, 191 insertions, 0 deletions
diff --git a/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/FilterScreenTest.kt b/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/FilterScreenTest.kt
new file mode 100644
index 0000000000..b5f762b89b
--- /dev/null
+++ b/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/FilterScreenTest.kt
@@ -0,0 +1,191 @@
+package net.mullvad.mullvadvpn.compose.screen
+
+import androidx.compose.ui.test.junit4.createComposeRule
+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 kotlinx.coroutines.flow.MutableSharedFlow
+import net.mullvad.mullvadvpn.compose.setContentWithTheme
+import net.mullvad.mullvadvpn.compose.state.RelayFilterState
+import net.mullvad.mullvadvpn.model.Ownership
+import net.mullvad.mullvadvpn.relaylist.Provider
+import org.junit.Rule
+import org.junit.Test
+
+class FilterScreenTest {
+ @get:Rule val composeTestRule = createComposeRule()
+
+ fun setup() {
+ MockKAnnotations.init(this)
+ }
+
+ @Test
+ fun testDefaultState() {
+ composeTestRule.setContentWithTheme {
+ FilterScreen(
+ uiState =
+ RelayFilterState(
+ allProviders = DUMMY_RELAY_ALL_PROVIDERS,
+ selectedOwnership = null,
+ selectedProviders = DUMMY_SELECTED_PROVIDERS,
+ ),
+ uiCloseAction = MutableSharedFlow(),
+ onSelectedProviders = { _, _ -> }
+ )
+ }
+ composeTestRule.apply {
+ onNodeWithText("Ownership").assertExists()
+ onNodeWithText("Providers").assertExists()
+ }
+ }
+
+ @Test
+ fun testIsAnyCellShowing() {
+ composeTestRule.setContentWithTheme {
+ FilterScreen(
+ uiState =
+ RelayFilterState(
+ allProviders = DUMMY_RELAY_ALL_PROVIDERS,
+ selectedOwnership = null,
+ selectedProviders = DUMMY_SELECTED_PROVIDERS
+ ),
+ uiCloseAction = MutableSharedFlow(),
+ onSelectedProviders = { _, _ -> }
+ )
+ }
+ composeTestRule.apply {
+ onNodeWithText("Ownership").performClick()
+ onNodeWithText("Any").assertExists()
+ }
+ }
+
+ @Test
+ fun testIsMullvadCellShowing() {
+ composeTestRule.setContentWithTheme {
+ FilterScreen(
+ uiState =
+ RelayFilterState(
+ allProviders = DUMMY_RELAY_ALL_PROVIDERS,
+ selectedOwnership = Ownership.MullvadOwned,
+ selectedProviders = DUMMY_SELECTED_PROVIDERS
+ ),
+ uiCloseAction = MutableSharedFlow(),
+ onSelectedProviders = { _, _ -> }
+ )
+ }
+ composeTestRule.apply {
+ onNodeWithText("Ownership").performClick()
+ onNodeWithText("Mullvad owned only").assertExists()
+ }
+ }
+
+ @Test
+ fun testIsRentedCellShowing() {
+ composeTestRule.setContentWithTheme {
+ FilterScreen(
+ uiState =
+ RelayFilterState(
+ allProviders = DUMMY_RELAY_ALL_PROVIDERS,
+ selectedOwnership = Ownership.Rented,
+ selectedProviders = DUMMY_SELECTED_PROVIDERS
+ ),
+ uiCloseAction = MutableSharedFlow(),
+ onSelectedProviders = { _, _ -> }
+ )
+ }
+ composeTestRule.apply {
+ onNodeWithText("Ownership").performClick()
+ onNodeWithText("Rented only").assertExists()
+ }
+ }
+
+ @Test
+ fun testShowProviders() {
+ composeTestRule.setContentWithTheme {
+ FilterScreen(
+ uiState =
+ RelayFilterState(
+ allProviders = DUMMY_RELAY_ALL_PROVIDERS,
+ selectedOwnership = null,
+ selectedProviders = DUMMY_SELECTED_PROVIDERS
+ ),
+ uiCloseAction = MutableSharedFlow(),
+ onSelectedProviders = { _, _ -> }
+ )
+ }
+
+ composeTestRule.apply {
+ onNodeWithText("Providers").performClick()
+ onNodeWithText("Creanova").assertExists()
+ onNodeWithText("Creanova").assertExists()
+ onNodeWithText("100TB").assertExists()
+ }
+ }
+
+ @Test
+ fun testApplyButtonClick() {
+ val mockClickListener: () -> Unit = mockk(relaxed = true)
+ composeTestRule.setContentWithTheme {
+ FilterScreen(
+ uiState =
+ RelayFilterState(
+ allProviders = listOf(),
+ selectedOwnership = null,
+ selectedProviders = listOf(Provider("31173", true))
+ ),
+ uiCloseAction = MutableSharedFlow(),
+ onSelectedProviders = { _, _ -> },
+ onApplyClick = mockClickListener
+ )
+ }
+ composeTestRule.onNodeWithText("Apply").performClick()
+ verify { mockClickListener() }
+ }
+
+ companion object {
+
+ private val DUMMY_RELAY_ALL_PROVIDERS =
+ listOf(
+ Provider("31173", true),
+ Provider("100TB", false),
+ Provider("Blix", true),
+ Provider("Creanova", true),
+ Provider("DataPacket", false),
+ Provider("HostRoyale", false),
+ Provider("hostuniversal", false),
+ Provider("iRegister", false),
+ Provider("M247", false),
+ Provider("Makonix", false),
+ Provider("PrivateLayer", false),
+ Provider("ptisp", false),
+ Provider("Qnax", false),
+ Provider("Quadranet", false),
+ Provider("techfutures", false),
+ Provider("Tzulo", false),
+ Provider("xtom", false)
+ )
+
+ private val DUMMY_SELECTED_PROVIDERS =
+ listOf(
+ Provider("31173", true),
+ Provider("100TB", false),
+ Provider("Blix", true),
+ Provider("Creanova", true),
+ Provider("DataPacket", false),
+ Provider("HostRoyale", false),
+ Provider("hostuniversal", false),
+ Provider("iRegister", false),
+ Provider("M247", false),
+ Provider("Makonix", false),
+ Provider("PrivateLayer", false),
+ Provider("ptisp", false),
+ Provider("Qnax", false),
+ Provider("Quadranet", false),
+ Provider("techfutures", false),
+ Provider("Tzulo", false),
+ Provider("xtom", false)
+ )
+ }
+}