summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorsaber safavi <saber.safavi@codic.se>2023-12-28 14:26:36 +0100
committerAlbin <albin@mullvad.net>2024-01-05 10:43:47 +0100
commitb4e789c36efba733b2f267ffd34d7f6875623f76 (patch)
tree1adcd9a45df25c595f1c026f61e4f227b19d089a
parent2d0bad03c6e6ddf193e73fe7e17f582706b1d69d (diff)
downloadmullvadvpn-b4e789c36efba733b2f267ffd34d7f6875623f76.tar.xz
mullvadvpn-b4e789c36efba733b2f267ffd34d7f6875623f76.zip
Add automate logout ui tests
-rw-r--r--android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/interactor/AppInteractor.kt16
-rw-r--r--android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/EndToEndTest.kt8
-rw-r--r--android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/LoginTest.kt17
-rw-r--r--android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/LogoutTest.kt42
4 files changed, 63 insertions, 20 deletions
diff --git a/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/interactor/AppInteractor.kt b/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/interactor/AppInteractor.kt
index 2909b4edd0..74bc7703d5 100644
--- a/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/interactor/AppInteractor.kt
+++ b/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/interactor/AppInteractor.kt
@@ -49,6 +49,14 @@ class AppInteractor(private val device: UiDevice, private val targetContext: Con
ensureLoggedIn()
}
+ fun launchAndCreateAccount() {
+ launch()
+ device.clickAgreeOnPrivacyDisclaimer()
+ device.clickAllowOnNotificationPermissionPromptIfApiLevel33AndAbove()
+ attemptCreateAccount()
+ ensureAccountCreated()
+ }
+
fun attemptLogin(accountToken: String) {
val loginObject =
device.findObjectWithTimeout(By.clazz("android.widget.EditText")).apply {
@@ -57,6 +65,14 @@ class AppInteractor(private val device: UiDevice, private val targetContext: Con
loginObject.parent.findObject(By.clazz(Button::class.java)).click()
}
+ private fun attemptCreateAccount() {
+ device.findObjectWithTimeout(By.text("Create account")).click()
+ }
+
+ private fun ensureAccountCreated() {
+ device.findObjectWithTimeout(By.text("Congrats!"), LOGIN_TIMEOUT)
+ }
+
fun ensureLoggedIn() {
device.findObjectWithTimeout(By.text("UNSECURED CONNECTION"), LOGIN_TIMEOUT)
}
diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/EndToEndTest.kt b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/EndToEndTest.kt
index e18690a385..c9226993b8 100644
--- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/EndToEndTest.kt
+++ b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/EndToEndTest.kt
@@ -24,14 +24,14 @@ abstract class EndToEndTest {
@Rule
@JvmField
- val permissionRule: GrantPermissionRule =
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
- GrantPermissionRule.grant(Manifest.permission.READ_MEDIA_IMAGES)
- } else {
+ val permissionRule: GrantPermissionRule? =
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
GrantPermissionRule.grant(
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE
)
+ } else {
+ null
}
lateinit var device: UiDevice
diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/LoginTest.kt b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/LoginTest.kt
index 685cff8b53..ab3ef54fb1 100644
--- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/LoginTest.kt
+++ b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/LoginTest.kt
@@ -2,7 +2,6 @@ package net.mullvad.mullvadvpn.test.e2e
import androidx.test.runner.AndroidJUnit4
import androidx.test.uiautomator.By
-import junit.framework.Assert.assertNotNull
import net.mullvad.mullvadvpn.test.common.constant.LOGIN_FAILURE_TIMEOUT
import net.mullvad.mullvadvpn.test.common.extension.clickAgreeOnPrivacyDisclaimer
import net.mullvad.mullvadvpn.test.common.extension.clickAllowOnNotificationPermissionPromptIfApiLevel33AndAbove
@@ -30,7 +29,7 @@ class LoginTest : EndToEndTest() {
app.attemptLogin(invalidDummyAccountToken)
// Then
- device.findObjectWithTimeout(By.text("Login failed"), LOGIN_FAILURE_TIMEOUT)
+ device.findObjectWithTimeout(By.text("Invalid account number"), LOGIN_FAILURE_TIMEOUT)
}
@Test
@@ -44,18 +43,4 @@ class LoginTest : EndToEndTest() {
// Then
app.ensureLoggedIn()
}
-
- @Test
- fun testLogout() {
- // Given
- app.launchAndEnsureLoggedIn(validTestAccountToken)
-
- // When
- app.clickSettingsCog()
- app.clickListItemByText("Account")
- app.clickActionButtonByText("Log out")
-
- // Then
- assertNotNull(device.findObjectWithTimeout(By.text("Login")))
- }
}
diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/LogoutTest.kt b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/LogoutTest.kt
new file mode 100644
index 0000000000..8552b8a238
--- /dev/null
+++ b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/LogoutTest.kt
@@ -0,0 +1,42 @@
+package net.mullvad.mullvadvpn.test.e2e
+
+import androidx.test.runner.AndroidJUnit4
+import androidx.test.uiautomator.By
+import junit.framework.Assert.assertNotNull
+import net.mullvad.mullvadvpn.test.common.extension.findObjectWithTimeout
+import net.mullvad.mullvadvpn.test.e2e.misc.CleanupAccountTestRule
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+class LogoutTest : EndToEndTest() {
+
+ @Rule @JvmField val cleanupAccountTestRule = CleanupAccountTestRule()
+
+ @Test
+ fun testLogout() {
+ // Given
+ app.launchAndEnsureLoggedIn(validTestAccountToken)
+
+ // When
+ app.clickAccountCog()
+ app.clickActionButtonByText("Log out")
+
+ // Then
+ assertNotNull(device.findObjectWithTimeout(By.text("Login")))
+ }
+
+ @Test
+ fun testCreateAccountAndLogout() {
+ // Given
+ app.launchAndCreateAccount()
+
+ // When
+ app.clickAccountCog()
+ app.clickActionButtonByText("Log out")
+
+ // Then
+ assertNotNull(device.findObjectWithTimeout(By.text("Login")))
+ }
+}