summaryrefslogtreecommitdiffhomepage
path: root/android/e2e/src
diff options
context:
space:
mode:
authorAlbin <albin@mullvad.net>2022-03-07 11:02:40 +0100
committerAlbin <albin@mullvad.net>2022-04-20 17:52:30 +0200
commitbb549db6c6e203e1d76abb7f858e04490822ad65 (patch)
treee4f2ffc8964a1e3c31af732e676ffb38321ccc64 /android/e2e/src
parent19cacfbd013fed75af0408492999fc031d2330d4 (diff)
downloadmullvadvpn-bb549db6c6e203e1d76abb7f858e04490822ad65.tar.xz
mullvadvpn-bb549db6c6e203e1d76abb7f858e04490822ad65.zip
Add basic Android e2e login tests
Diffstat (limited to 'android/e2e/src')
-rw-r--r--android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/LoginTest.kt58
-rw-r--r--android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/constant/TimeoutConstants.kt2
-rw-r--r--android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/interactor/AppInteractor.kt23
3 files changed, 83 insertions, 0 deletions
diff --git a/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/LoginTest.kt b/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/LoginTest.kt
new file mode 100644
index 0000000000..4919fb823f
--- /dev/null
+++ b/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/LoginTest.kt
@@ -0,0 +1,58 @@
+package net.mullvad.mullvadvpn.e2e
+
+import androidx.test.runner.AndroidJUnit4
+import androidx.test.uiautomator.By
+import junit.framework.Assert.assertNotNull
+import net.mullvad.mullvadvpn.e2e.constant.LOGIN_FAILURE_TIMEOUT
+import net.mullvad.mullvadvpn.e2e.extension.findObjectWithTimeout
+import net.mullvad.mullvadvpn.e2e.misc.CleanupAccountTestRule
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+class LoginTest : EndToEndTest() {
+
+ @Rule
+ @JvmField
+ val cleanupAccountTestRule = CleanupAccountTestRule()
+
+ @Test
+ fun testLoginWithInvalidCredentials() {
+ // Given
+ val invalidDummyAccountToken = invalidTestAccountToken
+
+ // When
+ app.launch()
+ app.attemptLogin(invalidDummyAccountToken)
+
+ // Then
+ device.findObjectWithTimeout(By.text("Login failed"), LOGIN_FAILURE_TIMEOUT)
+ }
+
+ @Test
+ fun testLoginWithValidCredentials() {
+ // Given
+ val token = validTestAccountToken
+
+ // When
+ app.launchAndEnsureLoggedIn(token)
+
+ // Then
+ app.ensureLoggedIn()
+ }
+
+ @Test
+ fun testLogout() {
+ // Given
+ app.launchAndEnsureLoggedIn()
+
+ // When
+ app.clickSettingsCog()
+ app.clickListItemByText("Account")
+ app.clickActionButtonByText("Log out")
+
+ // Then
+ assertNotNull(device.findObjectWithTimeout(By.text("Login")))
+ }
+}
diff --git a/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/constant/TimeoutConstants.kt b/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/constant/TimeoutConstants.kt
index 09b2986ea1..bda07c1067 100644
--- a/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/constant/TimeoutConstants.kt
+++ b/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/constant/TimeoutConstants.kt
@@ -2,3 +2,5 @@ package net.mullvad.mullvadvpn.e2e.constant
const val APP_LAUNCH_TIMEOUT = 5000L
const val DEFAULT_INTERACTION_TIMEOUT = 3000L
+const val LOGIN_TIMEOUT = 30000L
+const val LOGIN_FAILURE_TIMEOUT = 60000L
diff --git a/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/interactor/AppInteractor.kt b/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/interactor/AppInteractor.kt
index 69af7f1952..2ecbe748c5 100644
--- a/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/interactor/AppInteractor.kt
+++ b/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/interactor/AppInteractor.kt
@@ -2,10 +2,12 @@ package net.mullvad.mullvadvpn.e2e.interactor
import android.content.Context
import android.content.Intent
+import android.widget.ImageButton
import androidx.test.uiautomator.By
import androidx.test.uiautomator.UiDevice
import androidx.test.uiautomator.Until
import net.mullvad.mullvadvpn.e2e.constant.APP_LAUNCH_TIMEOUT
+import net.mullvad.mullvadvpn.e2e.constant.LOGIN_TIMEOUT
import net.mullvad.mullvadvpn.e2e.constant.MULLVAD_PACKAGE
import net.mullvad.mullvadvpn.e2e.constant.SETTINGS_COG_ID
import net.mullvad.mullvadvpn.e2e.extension.findObjectWithTimeout
@@ -35,6 +37,23 @@ class AppInteractor(
)
}
+ fun attemptLogin(accountToken: String = validTestAccountToken) {
+ device.findObjectWithTimeout(By.text("Login"))
+ val loginObject = device.findObjectWithTimeout(By.clazz("android.widget.EditText"))
+ .apply { text = accountToken }
+ loginObject.parent.findObject(By.clazz(ImageButton::class.java)).click()
+ }
+
+ fun ensureLoggedIn() {
+ device.findObjectWithTimeout(By.text("UNSECURED CONNECTION"), LOGIN_TIMEOUT)
+ }
+
+ fun launchAndEnsureLoggedIn(accountToken: String = validTestAccountToken) {
+ launch()
+ attemptLogin(accountToken)
+ ensureLoggedIn()
+ }
+
fun clickSettingsCog() {
device.findObjectWithTimeout(By.res(SETTINGS_COG_ID)).click()
}
@@ -42,4 +61,8 @@ class AppInteractor(
fun clickListItemByText(text: String) {
device.findObjectWithTimeout(By.text(text)).click()
}
+
+ fun clickActionButtonByText(text: String) {
+ device.findObjectWithTimeout(By.text(text)).click()
+ }
}