From 0e061a388609e9d9b82fe8bd840a3c2640320384 Mon Sep 17 00:00:00 2001 From: saber safavi Date: Fri, 29 Dec 2023 11:03:00 +0100 Subject: [PATCH] Add automate logout ui tests using mockApi --- .../test/common/interactor/AppInteractor.kt | 4 ++ .../test/mockapi/LogoutMockApiTest.kt | 40 +++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/LogoutMockApiTest.kt 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 85f90d227032..2909b4edd001 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 @@ -73,6 +73,10 @@ class AppInteractor(private val device: UiDevice, private val targetContext: Con device.findObjectWithTimeout(By.res(SETTINGS_COG_ID)).click() } + fun clickAccountCog() { + device.findObjectWithTimeout(By.res("top_bar_account_button")).click() + } + fun clickListItemByText(text: String) { device.findObjectWithTimeout(By.text(text)).click() } diff --git a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/LogoutMockApiTest.kt b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/LogoutMockApiTest.kt new file mode 100644 index 000000000000..e13a72829677 --- /dev/null +++ b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/LogoutMockApiTest.kt @@ -0,0 +1,40 @@ +package net.mullvad.mullvadvpn.test.mockapi + +import androidx.test.runner.AndroidJUnit4 +import androidx.test.uiautomator.By +import junit.framework.TestCase.assertNotNull +import net.mullvad.mullvadvpn.test.common.extension.clickAgreeOnPrivacyDisclaimer +import net.mullvad.mullvadvpn.test.common.extension.clickAllowOnNotificationPermissionPromptIfApiLevel33AndAbove +import net.mullvad.mullvadvpn.test.common.extension.dismissChangelogDialogIfShown +import net.mullvad.mullvadvpn.test.common.extension.findObjectWithTimeout +import net.mullvad.mullvadvpn.test.mockapi.util.currentUtcTimeWithOffsetZero +import org.junit.Test +import org.junit.runner.RunWith + +@RunWith(AndroidJUnit4::class) +class LogoutMockApiTest : MockApiTest() { + + @Test + fun testLoginWithValidCredentialsToUnexpiredAccountAndLogout() { + // Arrange + val validAccountToken = "1234123412341234" + apiDispatcher.apply { + expectedAccountToken = validAccountToken + accountExpiry = currentUtcTimeWithOffsetZero().plusMonths(1) + } + + // Act + app.launch(endpoint) + device.clickAgreeOnPrivacyDisclaimer() + device.clickAllowOnNotificationPermissionPromptIfApiLevel33AndAbove() + device.dismissChangelogDialogIfShown() + app.waitForLoginPrompt() + app.attemptLogin(validAccountToken) + device.findObjectWithTimeout(By.text("UNSECURED CONNECTION")) + app.clickAccountCog() + app.clickActionButtonByText("Log out") + + // Assert + assertNotNull(device.findObjectWithTimeout(By.text("Login"))) + } +}