summaryrefslogtreecommitdiffhomepage
path: root/android/test/common/src
diff options
context:
space:
mode:
authorDavid Göransson <david.goransson@mullvad.net>2024-11-13 13:28:29 +0100
committerDavid Göransson <david.goransson@mullvad.net>2024-11-18 11:47:05 +0100
commitf90f1de0486ae41e4a2bf13ef3506f855044b39e (patch)
tree97fab1fb8bdd0f579cf9b5138dac6640caa4f53d /android/test/common/src
parent6167eceb3c9e750e18cc651c983a965b94117caa (diff)
downloadmullvadvpn-f90f1de0486ae41e4a2bf13ef3506f855044b39e.tar.xz
mullvadvpn-f90f1de0486ae41e4a2bf13ef3506f855044b39e.zip
Update ForgetAllVpnApps to handle hard-coded VPN profiles
Diffstat (limited to 'android/test/common/src')
-rw-r--r--android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/extension/UiAutomatorExtensions.kt3
-rw-r--r--android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/rule/ForgetAllVpnAppsInSettingsTestRule.kt36
2 files changed, 30 insertions, 9 deletions
diff --git a/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/extension/UiAutomatorExtensions.kt b/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/extension/UiAutomatorExtensions.kt
index 143f4355d3..ff17a9f497 100644
--- a/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/extension/UiAutomatorExtensions.kt
+++ b/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/extension/UiAutomatorExtensions.kt
@@ -17,6 +17,9 @@ fun UiObject2.findObjectByCaseInsensitiveText(text: String): UiObject2 {
return findObjectWithTimeout(By.text(Pattern.compile(text, Pattern.CASE_INSENSITIVE)))
}
+fun UiDevice.hasObjectWithTimeout(selector: BySelector, timeout: Long = DEFAULT_TIMEOUT): Boolean =
+ wait(Until.hasObject(selector), timeout)
+
fun UiDevice.findObjectWithTimeout(
selector: BySelector,
timeout: Long = DEFAULT_TIMEOUT,
diff --git a/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/rule/ForgetAllVpnAppsInSettingsTestRule.kt b/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/rule/ForgetAllVpnAppsInSettingsTestRule.kt
index eea44a7b98..c0acddc3da 100644
--- a/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/rule/ForgetAllVpnAppsInSettingsTestRule.kt
+++ b/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/rule/ForgetAllVpnAppsInSettingsTestRule.kt
@@ -5,11 +5,14 @@ import android.provider.Settings
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.uiautomator.By
import androidx.test.uiautomator.UiDevice
+import androidx.test.uiautomator.UiObject2
import java.util.regex.Pattern
import net.mullvad.mullvadvpn.test.common.extension.findObjectByCaseInsensitiveText
import net.mullvad.mullvadvpn.test.common.extension.findObjectWithTimeout
+import net.mullvad.mullvadvpn.test.common.extension.hasObjectWithTimeout
import org.junit.jupiter.api.extension.BeforeTestExecutionCallback
import org.junit.jupiter.api.extension.ExtensionContext
+import org.junit.jupiter.api.fail
class ForgetAllVpnAppsInSettingsTestRule : BeforeTestExecutionCallback {
override fun beforeTestExecution(context: ExtensionContext) {
@@ -22,20 +25,35 @@ class ForgetAllVpnAppsInSettingsTestRule : BeforeTestExecutionCallback {
)
val vpnSettingsButtons =
device.findObjects(By.res(SETTINGS_PACKAGE, VPN_SETTINGS_BUTTON_ID))
- vpnSettingsButtons.forEach { button ->
- button.click()
+ vpnSettingsButtons
+ .filter { !it.isHardcodedVpn() }
+ .forEach { button ->
+ button.click()
- try {
- device.findObjectWithTimeout(By.text(FORGET_VPN_VPN_BUTTON_TEXT)).click()
- device.findObjectByCaseInsensitiveText(FORGET_VPN_VPN_CONFIRM_BUTTON_TEXT).click()
- } catch (_: Exception) {
- device.findObjectWithTimeout(By.text(DELETE_VPN_PROFILE_TEXT)).click()
- device.findObjectWithTimeout(By.text(DELETE_VPN_CONFIRM_BUTTON_TEXT_REGEXP)).click()
+ if (device.hasObjectWithTimeout(By.text(FORGET_VPN_VPN_BUTTON_TEXT))) {
+ device.findObjectWithTimeout(By.text(FORGET_VPN_VPN_BUTTON_TEXT)).click()
+ device
+ .findObjectByCaseInsensitiveText(FORGET_VPN_VPN_CONFIRM_BUTTON_TEXT)
+ .click()
+ } else if (device.hasObjectWithTimeout(By.text(DELETE_VPN_PROFILE_TEXT))) {
+ device.findObjectWithTimeout(By.text(DELETE_VPN_PROFILE_TEXT)).click()
+ device
+ .findObjectWithTimeout(By.text(DELETE_VPN_CONFIRM_BUTTON_TEXT_REGEXP))
+ .click()
+ } else {
+ fail("Unable to find forget or delete button")
+ }
}
- }
}
+ private fun UiObject2.isHardcodedVpn(): Boolean =
+ parent.parent.children.any { uiObject ->
+ HARDCODED_VPN_PROFILE_NAMES.any { uiObject.hasObject(By.text(it)) }
+ }
+
companion object {
+ private val HARDCODED_VPN_PROFILE_NAMES = listOf("VPN by Google")
+
private const val FORGET_VPN_VPN_BUTTON_TEXT = "Forget VPN"
private const val DELETE_VPN_PROFILE_TEXT = "Delete VPN profile"
private const val FORGET_VPN_VPN_CONFIRM_BUTTON_TEXT = "Forget"