diff options
| author | Jonatan Rhodin <jonatan.rhodin@mullvad.net> | 2024-01-31 15:28:57 +0100 |
|---|---|---|
| committer | Jonatan Rhodin <jonatan.rhodin@mullvad.net> | 2024-01-31 15:28:57 +0100 |
| commit | d64b92c30aeca95752bb5f35249c8e227b49da44 (patch) | |
| tree | a98d33e995a02020d15dbadaa9fd8079f2168419 /android | |
| parent | 5d9f8470a857855dcec276a90926d0a9b8ce4cf0 (diff) | |
| parent | 1f85f3a1ffd5fe3ba05c5c545f5a116134041670 (diff) | |
| download | mullvadvpn-d64b92c30aeca95752bb5f35249c8e227b49da44.tar.xz mullvadvpn-d64b92c30aeca95752bb5f35249c8e227b49da44.zip | |
Merge branch 'automate-expiry-tests-using-mockapi-droid-588'
Diffstat (limited to 'android')
5 files changed, 110 insertions, 3 deletions
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/OutOfTimeScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/OutOfTimeScreen.kt index d0d0c7460d..00cd339c09 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/OutOfTimeScreen.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/OutOfTimeScreen.kt @@ -18,6 +18,7 @@ import androidx.compose.runtime.collectAsState import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalUriHandler +import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview @@ -42,6 +43,7 @@ import net.mullvad.mullvadvpn.compose.destinations.SettingsDestination import net.mullvad.mullvadvpn.compose.destinations.VerificationPendingDialogDestination import net.mullvad.mullvadvpn.compose.extensions.createOpenAccountPageHook import net.mullvad.mullvadvpn.compose.state.OutOfTimeUiState +import net.mullvad.mullvadvpn.compose.test.OUT_OF_TIME_SCREEN_TITLE_TEST_TAG import net.mullvad.mullvadvpn.compose.transitions.HomeTransition import net.mullvad.mullvadvpn.lib.payment.model.ProductId import net.mullvad.mullvadvpn.lib.theme.AppTheme @@ -220,7 +222,9 @@ fun OutOfTimeScreen( text = stringResource(id = R.string.out_of_time), style = MaterialTheme.typography.headlineLarge, color = MaterialTheme.colorScheme.onPrimary, - modifier = Modifier.padding(horizontal = Dimens.sideMargin) + modifier = + Modifier.padding(horizontal = Dimens.sideMargin) + .testTag(OUT_OF_TIME_SCREEN_TITLE_TEST_TAG) ) Text( text = 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 98c63ac9b9..996f610404 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 @@ -39,3 +39,6 @@ const val LOGIN_INPUT_TEST_TAG = "login_input_test_tag" // VoucherDialog const val VOUCHER_INPUT_TEST_TAG = "voucher_input_test_tag" + +// OutOfTimeScreen +const val OUT_OF_TIME_SCREEN_TITLE_TEST_TAG = "out_of_time_screen_title_test_tag" 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 ef52a7ef55..c875c13afa 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 @@ -88,6 +88,14 @@ class AppInteractor( device.findObjectWithTimeout(By.text("UNSECURED CONNECTION"), LOGIN_TIMEOUT) } + fun ensureOutOfTime() { + device.findObjectWithTimeout(By.res("out_of_time_screen_title_test_tag")) + } + + fun ensureAccountScreen() { + device.findObjectWithTimeout(By.text("Account")) + } + fun extractIpAddress(): String { device.findObjectWithTimeout(By.res("location_info_test_tag")).click() return device diff --git a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/AccountExpiryMockApiTest.kt b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/AccountExpiryMockApiTest.kt new file mode 100644 index 0000000000..469040c4c4 --- /dev/null +++ b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/AccountExpiryMockApiTest.kt @@ -0,0 +1,93 @@ +package net.mullvad.mullvadvpn.test.mockapi + +import androidx.test.uiautomator.By +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.constant.DEFAULT_DEVICE_LIST +import net.mullvad.mullvadvpn.test.mockapi.constant.DUMMY_DEVICE_NAME_2 +import net.mullvad.mullvadvpn.test.mockapi.constant.DUMMY_ID_2 +import net.mullvad.mullvadvpn.test.mockapi.util.currentUtcTimeWithOffsetZero +import net.mullvad.mullvadvpn.util.toExpiryDateString +import org.junit.jupiter.api.Disabled +import org.junit.jupiter.api.Test + +class AccountExpiryMockApiTest : MockApiTest() { + + @Test + fun testAccountExpiryDateUpdated() { + // Arrange + val validAccountToken = "1234123412341234" + val oldAccountExpiry = currentUtcTimeWithOffsetZero().plusMonths(1) + apiDispatcher.apply { + expectedAccountToken = validAccountToken + accountExpiry = oldAccountExpiry + devices = DEFAULT_DEVICE_LIST.toMutableMap() + devicePendingToGetCreated = DUMMY_ID_2 to DUMMY_DEVICE_NAME_2 + } + + // Act + app.launch(endpoint) + device.clickAgreeOnPrivacyDisclaimer() + device.clickAllowOnNotificationPermissionPromptIfApiLevel33AndAbove() + device.dismissChangelogDialogIfShown() + app.waitForLoginPrompt() + app.attemptLogin(validAccountToken) + + // Assert logged in + app.ensureLoggedIn() + + // Add one month to the account expiry + val newAccountExpiry = oldAccountExpiry.plusMonths(1) + apiDispatcher.accountExpiry = newAccountExpiry + + // Go to account page to update the account expiry + app.clickAccountCog() + + app.ensureAccountScreen() + device.findObjectWithTimeout(By.text(newAccountExpiry.toExpiryDateString())) + } + + @Test + @Disabled( + "Disabled since we have a bug in the app that makes it unstable. " + + "We can restore it after the bug has been fixed" + ) + fun testAccountTimeExpiredWhileUsingTheAppShouldShowOutOfTimeScreen() { + // Arrange + val validAccountToken = "1234123412341234" + val oldAccountExpiry = currentUtcTimeWithOffsetZero().plusMonths(1) + apiDispatcher.apply { + expectedAccountToken = validAccountToken + accountExpiry = oldAccountExpiry + devices = DEFAULT_DEVICE_LIST.toMutableMap() + devicePendingToGetCreated = DUMMY_ID_2 to DUMMY_DEVICE_NAME_2 + } + + // Act + app.launch(endpoint) + device.clickAgreeOnPrivacyDisclaimer() + device.clickAllowOnNotificationPermissionPromptIfApiLevel33AndAbove() + device.dismissChangelogDialogIfShown() + app.waitForLoginPrompt() + app.attemptLogin(validAccountToken) + + // Assert logged in + app.ensureLoggedIn() + + // Set account time as expired + val newAccountExpiry = oldAccountExpiry.minusMonths(2) + apiDispatcher.accountExpiry = newAccountExpiry + + // Go to account page to update the account expiry + app.clickAccountCog() + app.ensureAccountScreen() + + // Go back to the main screen + device.pressBack() + + // Assert that we show the out of time screen + app.ensureOutOfTime() + } +} diff --git a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/LoginMockApiTest.kt b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/LoginMockApiTest.kt index 0dcbc308dc..6b03a65020 100644 --- a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/LoginMockApiTest.kt +++ b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/LoginMockApiTest.kt @@ -7,7 +7,6 @@ import net.mullvad.mullvadvpn.test.common.constant.DEFAULT_INTERACTION_TIMEOUT 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.constant.DEFAULT_DEVICE_LIST import net.mullvad.mullvadvpn.test.mockapi.constant.DUMMY_DEVICE_NAME_2 import net.mullvad.mullvadvpn.test.mockapi.constant.DUMMY_ID_2 @@ -85,6 +84,6 @@ class LoginMockApiTest : MockApiTest() { app.attemptLogin(validAccountToken) // Assert - device.findObjectWithTimeout(By.text("Out of time")) + app.ensureOutOfTime() } } |
