diff options
| author | Jonatan Rhodin <jonatan.rhodin@mullvad.net> | 2024-01-12 10:49:51 +0100 |
|---|---|---|
| committer | Jonatan Rhodin <jonatan.rhodin@mullvad.net> | 2024-01-15 10:51:14 +0100 |
| commit | 05c4ae0248be7f147a09b21188d3b05b3513540f (patch) | |
| tree | cf7d271c9a57802e123e360e0ffc05816e94e737 /android | |
| parent | f653cde11460cd86ac48232fba78b8ed433d7a96 (diff) | |
| download | mullvadvpn-05c4ae0248be7f147a09b21188d3b05b3513540f.tar.xz mullvadvpn-05c4ae0248be7f147a09b21188d3b05b3513540f.zip | |
Add mockapi tests for successful and failed account creation
Diffstat (limited to 'android')
6 files changed, 82 insertions, 3 deletions
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 6921e6b362..1608f28bcf 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 @@ -10,6 +10,7 @@ import net.mullvad.mullvadvpn.lib.endpoint.CustomApiEndpointConfiguration import net.mullvad.mullvadvpn.lib.endpoint.putApiEndpointConfigurationExtra import net.mullvad.mullvadvpn.test.common.constant.APP_LAUNCH_TIMEOUT import net.mullvad.mullvadvpn.test.common.constant.CONNECTION_TIMEOUT +import net.mullvad.mullvadvpn.test.common.constant.DEFAULT_INTERACTION_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 @@ -62,12 +63,22 @@ class AppInteractor(private val device: UiDevice, private val targetContext: Con loginObject.parent.findObject(By.clazz(Button::class.java)).click() } - private fun attemptCreateAccount() { + fun attemptCreateAccount() { device.findObjectWithTimeout(By.text("Create account")).click() } - private fun ensureAccountCreated() { - device.findObjectWithTimeout(By.text("Congrats!"), LOGIN_TIMEOUT) + fun ensureAccountCreated(accountToken: String? = null) { + device.findObjectWithTimeout(By.text("Congrats!"), DEFAULT_INTERACTION_TIMEOUT) + accountToken?.let { + device.findObjectWithTimeout(By.text(accountToken), DEFAULT_INTERACTION_TIMEOUT) + } + } + + fun ensureAccountCreationFailed() { + device.findObjectWithTimeout( + By.text("Failed to create account"), + DEFAULT_INTERACTION_TIMEOUT + ) } fun ensureLoggedIn() { diff --git a/android/test/mockapi/build.gradle.kts b/android/test/mockapi/build.gradle.kts index e5d20d3d50..3fea2d5d60 100644 --- a/android/test/mockapi/build.gradle.kts +++ b/android/test/mockapi/build.gradle.kts @@ -63,6 +63,7 @@ configure<org.owasp.dependencycheck.gradle.extension.DependencyCheckExtension> { dependencies { implementation(project(Projects.testCommon)) + implementation(project(Dependencies.Mullvad.commonLib)) implementation(project(Dependencies.Mullvad.endpointLib)) implementation(Dependencies.AndroidX.testCore) diff --git a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/CreateAccountMockApiTest.kt b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/CreateAccountMockApiTest.kt new file mode 100644 index 0000000000..a07a9e5abb --- /dev/null +++ b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/CreateAccountMockApiTest.kt @@ -0,0 +1,43 @@ +package net.mullvad.mullvadvpn.test.mockapi + +import net.mullvad.mullvadvpn.lib.common.util.groupWithSpaces +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 org.junit.jupiter.api.Test + +class CreateAccountMockApiTest : MockApiTest() { + @Test + fun testCreateAccountSuccessful() { + // Arrange + val createdAccountToken = "1234123412341234" + apiDispatcher.apply { expectedAccountToken = createdAccountToken } + app.launch(endpoint) + + // Act + device.clickAgreeOnPrivacyDisclaimer() + device.clickAllowOnNotificationPermissionPromptIfApiLevel33AndAbove() + device.dismissChangelogDialogIfShown() + app.waitForLoginPrompt() + app.attemptCreateAccount() + + // Assert + app.ensureAccountCreated(createdAccountToken.groupWithSpaces()) + } + + @Test + fun testCreateAccountFailed() { + // Arrange + app.launch(endpoint) + + // Act + device.clickAgreeOnPrivacyDisclaimer() + device.clickAllowOnNotificationPermissionPromptIfApiLevel33AndAbove() + device.dismissChangelogDialogIfShown() + app.waitForLoginPrompt() + app.attemptCreateAccount() + + // Assert + app.ensureAccountCreationFailed() + } +} diff --git a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/MockApiDispatcher.kt b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/MockApiDispatcher.kt index 6a604bb09f..74214501a1 100644 --- a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/MockApiDispatcher.kt +++ b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/MockApiDispatcher.kt @@ -3,12 +3,14 @@ package net.mullvad.mullvadvpn.test.mockapi import android.util.Log import net.mullvad.mullvadvpn.test.mockapi.constant.ACCOUNT_URL_PATH import net.mullvad.mullvadvpn.test.mockapi.constant.AUTH_TOKEN_URL_PATH +import net.mullvad.mullvadvpn.test.mockapi.constant.CREATE_ACCOUNT_URL_PATH import net.mullvad.mullvadvpn.test.mockapi.constant.DEVICES_URL_PATH import net.mullvad.mullvadvpn.test.mockapi.constant.DUMMY_ACCESS_TOKEN import net.mullvad.mullvadvpn.test.mockapi.constant.DUMMY_DEVICE_NAME import net.mullvad.mullvadvpn.test.mockapi.constant.DUMMY_ID import net.mullvad.mullvadvpn.test.mockapi.constant.LOG_TAG import net.mullvad.mullvadvpn.test.mockapi.util.accessTokenJsonResponse +import net.mullvad.mullvadvpn.test.mockapi.util.accountCreationJson import net.mullvad.mullvadvpn.test.mockapi.util.accountInfoJson import net.mullvad.mullvadvpn.test.mockapi.util.currentUtcTimeWithOffsetZero import net.mullvad.mullvadvpn.test.mockapi.util.deviceJson @@ -41,6 +43,7 @@ class MockApiDispatcher : Dispatcher() { } "$DEVICES_URL_PATH/$DUMMY_ID" -> handleDeviceInfoRequest() ACCOUNT_URL_PATH -> handleAccountInfoRequest() + CREATE_ACCOUNT_URL_PATH -> handleAccountCreationRequest() else -> MockResponse().setResponseCode(404) }.also { response -> Log.d(LOG_TAG, "Response: $response (body=${response.getBody()?.peek()?.readUtf8()})") @@ -139,4 +142,21 @@ class MockApiDispatcher : Dispatcher() { } ?: MockResponse().setResponseCode(400) } + + private fun handleAccountCreationRequest(): MockResponse { + return expectedAccountToken?.let { expiry -> + MockResponse() + .setResponseCode(201) + .addJsonHeader() + .setBody( + accountCreationJson( + id = DUMMY_ID, + expiry = DateTime(), + accountToken = expectedAccountToken!! + ) + .toString() + ) + } + ?: MockResponse().setResponseCode(400) + } } diff --git a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/constant/Constants.kt b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/constant/Constants.kt index ba1ecad36e..16123a8e1a 100644 --- a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/constant/Constants.kt +++ b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/constant/Constants.kt @@ -5,6 +5,7 @@ const val LOG_TAG = "mullvad-mockapi" const val AUTH_TOKEN_URL_PATH = "/auth/v1/token" const val DEVICES_URL_PATH = "/accounts/v1/devices" const val ACCOUNT_URL_PATH = "/accounts/v1/accounts/me" +const val CREATE_ACCOUNT_URL_PATH = "/accounts/v1/accounts" const val DUMMY_ID = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" const val DUMMY_DEVICE_NAME = "mole mole" diff --git a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/util/JsonUtils.kt b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/util/JsonUtils.kt index 2ccae9499e..eea4f3e973 100644 --- a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/util/JsonUtils.kt +++ b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/util/JsonUtils.kt @@ -11,6 +11,9 @@ fun accountInfoJson(id: String, expiry: DateTime) = put("can_add_devices", true) } +fun accountCreationJson(id: String, accountToken: String, expiry: DateTime) = + accountInfoJson(id, expiry).apply { put("number", accountToken) } + fun deviceJson(id: String, name: String, publicKey: String, creationDate: DateTime) = JSONObject().apply { put("id", id) |
