diff options
| author | Albin <albin@mullvad.net> | 2022-03-07 11:02:40 +0100 |
|---|---|---|
| committer | Albin <albin@mullvad.net> | 2022-04-20 17:52:30 +0200 |
| commit | bb549db6c6e203e1d76abb7f858e04490822ad65 (patch) | |
| tree | e4f2ffc8964a1e3c31af732e676ffb38321ccc64 /android/e2e/src | |
| parent | 19cacfbd013fed75af0408492999fc031d2330d4 (diff) | |
| download | mullvadvpn-bb549db6c6e203e1d76abb7f858e04490822ad65.tar.xz mullvadvpn-bb549db6c6e203e1d76abb7f858e04490822ad65.zip | |
Add basic Android e2e login tests
Diffstat (limited to 'android/e2e/src')
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() + } } |
