summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/LocationInfo.kt9
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/test/ComposeTestTagConstants.kt1
-rw-r--r--android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/interactor/AppInteractor.kt30
-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
6 files changed, 77 insertions, 30 deletions
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/LocationInfo.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/LocationInfo.kt
index cd96bae05d..97602ed592 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/LocationInfo.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/LocationInfo.kt
@@ -10,10 +10,12 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha
import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.platform.testTag
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.tooling.preview.Preview
import net.mullvad.mullvadvpn.R
+import net.mullvad.mullvadvpn.compose.test.LOCATION_INFO_CONNECTION_OUT_TEST_TAG
import net.mullvad.mullvadvpn.lib.theme.AppTheme
import net.mullvad.mullvadvpn.lib.theme.Dimens
import net.mullvad.mullvadvpn.lib.theme.color.AlphaInactive
@@ -111,9 +113,10 @@ fun LocationInfo(
color = colorExpanded,
style = MaterialTheme.typography.labelMedium,
modifier =
- Modifier.alpha(
- if (isExpanded && outAddress.isNotEmpty()) AlphaVisible else AlphaInvisible
- )
+ Modifier.testTag(LOCATION_INFO_CONNECTION_OUT_TEST_TAG)
+ .alpha(
+ if (isExpanded && outAddress.isNotEmpty()) AlphaVisible else AlphaInvisible
+ )
)
}
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/test/ComposeTestTagConstants.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/test/ComposeTestTagConstants.kt
index ff5bbf43cc..98c63ac9b9 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/test/ComposeTestTagConstants.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/test/ComposeTestTagConstants.kt
@@ -25,6 +25,7 @@ const val SELECT_LOCATION_BUTTON_TEST_TAG = "select_location_button_test_tag"
const val CONNECT_BUTTON_TEST_TAG = "connect_button_test_tag"
const val RECONNECT_BUTTON_TEST_TAG = "reconnect_button_test_tag"
const val LOCATION_INFO_TEST_TAG = "location_info_test_tag"
+const val LOCATION_INFO_CONNECTION_OUT_TEST_TAG = "location_info_connection_out_test_tag"
// ConnectScreen - Notification banner
const val NOTIFICATION_BANNER = "notification_banner"
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..6921e6b362 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
@@ -13,9 +13,6 @@ import net.mullvad.mullvadvpn.test.common.constant.CONNECTION_TIMEOUT
import net.mullvad.mullvadvpn.test.common.constant.LOGIN_PROMPT_TIMEOUT
import net.mullvad.mullvadvpn.test.common.constant.LOGIN_TIMEOUT
import net.mullvad.mullvadvpn.test.common.constant.MULLVAD_PACKAGE
-import net.mullvad.mullvadvpn.test.common.constant.SETTINGS_COG_ID
-import net.mullvad.mullvadvpn.test.common.constant.TUNNEL_INFO_ID
-import net.mullvad.mullvadvpn.test.common.constant.TUNNEL_OUT_ADDRESS_ID
import net.mullvad.mullvadvpn.test.common.extension.clickAgreeOnPrivacyDisclaimer
import net.mullvad.mullvadvpn.test.common.extension.clickAllowOnNotificationPermissionPromptIfApiLevel33AndAbove
import net.mullvad.mullvadvpn.test.common.extension.findObjectWithTimeout
@@ -49,6 +46,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,20 +62,31 @@ 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)
}
fun extractIpAddress(): String {
- device.findObjectWithTimeout(By.res(TUNNEL_INFO_ID)).click()
+ device.findObjectWithTimeout(By.res("location_info_test_tag")).click()
return device
- .findObjectWithTimeout(By.res(TUNNEL_OUT_ADDRESS_ID), CONNECTION_TIMEOUT)
+ .findObjectWithTimeout(
+ By.res("location_info_connection_out_test_tag"),
+ CONNECTION_TIMEOUT
+ )
.text
.extractIpAddress()
}
fun clickSettingsCog() {
- device.findObjectWithTimeout(By.res(SETTINGS_COG_ID)).click()
+ device.findObjectWithTimeout(By.res("top_bar_settings_button")).click()
}
fun clickAccountCog() {
@@ -90,6 +106,6 @@ class AppInteractor(private val device: UiDevice, private val targetContext: Con
}
private fun String.extractIpAddress(): String {
- return split(" ")[1].split(" ")[0]
+ return split(" ")[1].split(" ")[0]
}
}
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")))
+ }
+}