diff options
Diffstat (limited to 'android/app/src/androidTest')
2 files changed, 215 insertions, 5 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) + ) + } +} diff --git a/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/SelectLocationScreenTest.kt b/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/SelectLocationScreenTest.kt index 3b5da50d33..7e66bc24d9 100644 --- a/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/SelectLocationScreenTest.kt +++ b/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/SelectLocationScreenTest.kt @@ -56,7 +56,10 @@ class SelectLocationScreenTest { uiState = SelectLocationUiState.ShowData( countries = DUMMY_RELAY_COUNTRIES, - selectedRelay = null + selectedRelay = null, + selectedOwnership = null, + selectedProvidersCount = 0, + searchTerm = "" ), uiCloseAction = MutableSharedFlow(), enterTransitionEndAction = MutableSharedFlow<Unit>().asSharedFlow() @@ -93,7 +96,10 @@ class SelectLocationScreenTest { uiState = SelectLocationUiState.ShowData( countries = updatedDummyList, - selectedRelay = updatedDummyList[0].cities[0].relays[0] + selectedRelay = updatedDummyList[0].cities[0].relays[0], + selectedOwnership = null, + selectedProvidersCount = 0, + searchTerm = "" ), uiCloseAction = MutableSharedFlow(), enterTransitionEndAction = MutableSharedFlow<Unit>().asSharedFlow() @@ -118,7 +124,13 @@ class SelectLocationScreenTest { composeTestRule.setContentWithTheme { SelectLocationScreen( uiState = - SelectLocationUiState.ShowData(countries = emptyList(), selectedRelay = null), + SelectLocationUiState.ShowData( + countries = emptyList(), + selectedRelay = null, + selectedOwnership = null, + selectedProvidersCount = 0, + searchTerm = "" + ), uiCloseAction = MutableSharedFlow(), enterTransitionEndAction = MutableSharedFlow<Unit>().asSharedFlow(), onSearchTermInput = mockedSearchTermInput @@ -140,7 +152,14 @@ class SelectLocationScreenTest { val mockSearchString = "SEARCH" composeTestRule.setContentWithTheme { SelectLocationScreen( - uiState = SelectLocationUiState.NoSearchResultFound(searchTerm = mockSearchString), + uiState = + SelectLocationUiState.ShowData( + countries = emptyList(), + selectedRelay = null, + selectedOwnership = null, + selectedProvidersCount = 0, + searchTerm = mockSearchString + ), uiCloseAction = MutableSharedFlow(), enterTransitionEndAction = MutableSharedFlow<Unit>().asSharedFlow(), onSearchTermInput = mockedSearchTermInput @@ -187,7 +206,7 @@ class SelectLocationScreenTest { private val DUMMY_RELAY_COUNTRIES = RelayList( arrayListOf(DUMMY_RELAY_COUNTRY_1, DUMMY_RELAY_COUNTRY_2), - DUMMY_WIREGUARD_ENDPOINT_DATA + DUMMY_WIREGUARD_ENDPOINT_DATA, ) .toRelayCountries(ownership = Constraint.Any(), providers = Constraint.Any()) } |
