diff options
| author | David Göransson <david.goransson@mullvad.net> | 2024-11-13 13:28:29 +0100 |
|---|---|---|
| committer | David Göransson <david.goransson@mullvad.net> | 2024-11-18 11:47:05 +0100 |
| commit | f90f1de0486ae41e4a2bf13ef3506f855044b39e (patch) | |
| tree | 97fab1fb8bdd0f579cf9b5138dac6640caa4f53d /android/test/common/src | |
| parent | 6167eceb3c9e750e18cc651c983a965b94117caa (diff) | |
| download | mullvadvpn-f90f1de0486ae41e4a2bf13ef3506f855044b39e.tar.xz mullvadvpn-f90f1de0486ae41e4a2bf13ef3506f855044b39e.zip | |
Update ForgetAllVpnApps to handle hard-coded VPN profiles
Diffstat (limited to 'android/test/common/src')
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" |
