diff options
| author | Jonatan Rhodin <jonatan.rhodin@mullvad.net> | 2024-01-10 15:14:02 +0100 |
|---|---|---|
| committer | Jonatan Rhodin <jonatan.rhodin@mullvad.net> | 2024-01-11 09:51:39 +0100 |
| commit | 3e52ec0eb3d4c2cda68cba3596bced1060ba808f (patch) | |
| tree | 792c59aa493ed3a853fea3e4348cc66c8f334b42 | |
| parent | edbe8c521dd879ba4f100089216d32f853c89f74 (diff) | |
| download | mullvadvpn-3e52ec0eb3d4c2cda68cba3596bced1060ba808f.tar.xz mullvadvpn-3e52ec0eb3d4c2cda68cba3596bced1060ba808f.zip | |
Migrate e2e tests to junit5
7 files changed, 47 insertions, 35 deletions
diff --git a/android/test/e2e/build.gradle.kts b/android/test/e2e/build.gradle.kts index 8e24974fcd..946e8effa9 100644 --- a/android/test/e2e/build.gradle.kts +++ b/android/test/e2e/build.gradle.kts @@ -4,6 +4,7 @@ import java.util.Properties plugins { id(Dependencies.Plugin.androidTestId) id(Dependencies.Plugin.kotlinAndroidId) + id(Dependencies.Plugin.junit5) version Versions.Plugin.junit5 } android { @@ -14,6 +15,8 @@ android { minSdk = Versions.Android.minSdkVersion testApplicationId = "net.mullvad.mullvadvpn.test.e2e" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + testInstrumentationRunnerArguments["runnerBuilder"] = + "de.mannodermaus.junit5.AndroidJUnit5Builder" targetProjectPath = ":app" missingDimensionStrategy(FlavorDimensions.BILLING, Flavors.OSS) @@ -62,6 +65,17 @@ android { abortOnError = true warningsAsErrors = true } + + packaging { + resources { + pickFirsts += + setOf( + // Fixes packaging error caused by: jetified-junit-* + "META-INF/LICENSE.md", + "META-INF/LICENSE-notice.md" + ) + } + } } configure<org.owasp.dependencycheck.gradle.extension.DependencyCheckExtension> { @@ -83,6 +97,10 @@ dependencies { implementation(Dependencies.AndroidX.testRules) implementation(Dependencies.AndroidX.testUiAutomator) implementation(Dependencies.androidVolley) + implementation(Dependencies.junitAndroidTestExtensions) + implementation(Dependencies.junitApi) + implementation(Dependencies.junitAndroidTestCore) + implementation(Dependencies.junitAndroidTestRunner) implementation(Dependencies.Kotlin.stdlib) androidTestUtil(Dependencies.AndroidX.testOrchestrator) diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/ConnectionTest.kt b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/ConnectionTest.kt index 488162b08c..bbecb037f3 100644 --- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/ConnectionTest.kt +++ b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/ConnectionTest.kt @@ -1,20 +1,22 @@ package net.mullvad.mullvadvpn.test.e2e import androidx.test.uiautomator.By -import junit.framework.Assert.assertEquals import net.mullvad.mullvadvpn.test.common.extension.findObjectWithTimeout import net.mullvad.mullvadvpn.test.common.rule.ForgetAllVpnAppsInSettingsTestRule import net.mullvad.mullvadvpn.test.e2e.misc.CleanupAccountTestRule import net.mullvad.mullvadvpn.test.e2e.misc.ConnCheckState import net.mullvad.mullvadvpn.test.e2e.misc.SimpleMullvadHttpClient -import org.junit.Rule -import org.junit.Test +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.extension.RegisterExtension class ConnectionTest : EndToEndTest() { - @Rule @JvmField val cleanupAccountTestRule = CleanupAccountTestRule() + @RegisterExtension @JvmField val cleanupAccountTestRule = CleanupAccountTestRule() - @Rule @JvmField val forgetAllVpnAppsInSettingsTestRule = ForgetAllVpnAppsInSettingsTestRule() + @RegisterExtension + @JvmField + val forgetAllVpnAppsInSettingsTestRule = ForgetAllVpnAppsInSettingsTestRule() @Test fun testConnectAndVerifyWithConnectionCheck() { 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 c9226993b8..2cf8ba712d 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 @@ -4,35 +4,32 @@ import android.Manifest import android.content.Context import android.os.Build import androidx.test.platform.app.InstrumentationRegistry -import androidx.test.rule.GrantPermissionRule -import androidx.test.runner.AndroidJUnit4 import androidx.test.uiautomator.UiDevice +import de.mannodermaus.junit5.extensions.GrantPermissionExtension import net.mullvad.mullvadvpn.test.common.interactor.AppInteractor import net.mullvad.mullvadvpn.test.common.rule.CaptureScreenshotOnFailedTestRule import net.mullvad.mullvadvpn.test.e2e.constant.INVALID_TEST_ACCOUNT_TOKEN_ARGUMENT_KEY import net.mullvad.mullvadvpn.test.e2e.constant.LOG_TAG import net.mullvad.mullvadvpn.test.e2e.constant.VALID_TEST_ACCOUNT_TOKEN_ARGUMENT_KEY import net.mullvad.mullvadvpn.test.e2e.extension.getRequiredArgument -import org.junit.Before -import org.junit.Rule -import org.junit.runner.RunWith +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.extension.RegisterExtension -@RunWith(AndroidJUnit4::class) abstract class EndToEndTest { - @Rule @JvmField val rule = CaptureScreenshotOnFailedTestRule(LOG_TAG) + @RegisterExtension @JvmField val rule = CaptureScreenshotOnFailedTestRule(LOG_TAG) - @Rule @JvmField - val permissionRule: GrantPermissionRule? = - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { - GrantPermissionRule.grant( + @RegisterExtension + val extension = + (if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { + GrantPermissionExtension.grant( Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE ) } else { - null - } + GrantPermissionExtension.grant() + }) lateinit var device: UiDevice lateinit var targetContext: Context @@ -40,7 +37,7 @@ abstract class EndToEndTest { lateinit var validTestAccountToken: String lateinit var invalidTestAccountToken: String - @Before + @BeforeEach fun setup() { device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()) targetContext = InstrumentationRegistry.getInstrumentation().targetContext diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/LaunchAppTest.kt b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/LaunchAppTest.kt index 64f534990c..f68df92854 100644 --- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/LaunchAppTest.kt +++ b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/LaunchAppTest.kt @@ -1,10 +1,7 @@ package net.mullvad.mullvadvpn.test.e2e -import androidx.test.runner.AndroidJUnit4 -import org.junit.Test -import org.junit.runner.RunWith +import org.junit.jupiter.api.Test -@RunWith(AndroidJUnit4::class) class LaunchAppTest : EndToEndTest() { @Test fun testLaunchApp() { 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 ab3ef54fb1..792c63f1a1 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 @@ -1,20 +1,17 @@ package net.mullvad.mullvadvpn.test.e2e -import androidx.test.runner.AndroidJUnit4 import androidx.test.uiautomator.By 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 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 +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.extension.RegisterExtension -@RunWith(AndroidJUnit4::class) class LoginTest : EndToEndTest() { - @Rule @JvmField val cleanupAccountTestRule = CleanupAccountTestRule() + @RegisterExtension @JvmField val cleanupAccountTestRule = CleanupAccountTestRule() @Test fun testLoginWithInvalidCredentials() { diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/WebLinkTest.kt b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/WebLinkTest.kt index ac3997c372..5e72305efe 100644 --- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/WebLinkTest.kt +++ b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/WebLinkTest.kt @@ -5,7 +5,7 @@ import net.mullvad.mullvadvpn.test.common.constant.WEB_TIMEOUT import net.mullvad.mullvadvpn.test.common.extension.clickAgreeOnPrivacyDisclaimer import net.mullvad.mullvadvpn.test.common.extension.clickAllowOnNotificationPermissionPromptIfApiLevel33AndAbove import net.mullvad.mullvadvpn.test.common.extension.findObjectWithTimeout -import org.junit.Test +import org.junit.jupiter.api.Test class WebLinkTest : EndToEndTest() { @Test diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/misc/CleanupAccountTestRule.kt b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/misc/CleanupAccountTestRule.kt index 2e19cb42fe..ba42862397 100644 --- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/misc/CleanupAccountTestRule.kt +++ b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/misc/CleanupAccountTestRule.kt @@ -6,12 +6,13 @@ import net.mullvad.mullvadvpn.test.e2e.constant.LOG_TAG import net.mullvad.mullvadvpn.test.e2e.constant.VALID_TEST_ACCOUNT_TOKEN_ARGUMENT_KEY import net.mullvad.mullvadvpn.test.e2e.extension.getRequiredArgument import net.mullvad.mullvadvpn.test.e2e.interactor.MullvadAccountInteractor -import org.junit.rules.TestWatcher -import org.junit.runner.Description +import org.junit.jupiter.api.extension.BeforeEachCallback +import org.junit.jupiter.api.extension.ExtensionContext -class CleanupAccountTestRule : TestWatcher() { - override fun starting(description: Description) { - Log.d(LOG_TAG, "Cleaning up account before test: ${description.methodName}") +class CleanupAccountTestRule : BeforeEachCallback { + + override fun beforeEach(context: ExtensionContext) { + Log.d(LOG_TAG, "Cleaning up account before test: ${context.requiredTestMethod.name}") val targetContext = InstrumentationRegistry.getInstrumentation().targetContext val validTestAccountToken = InstrumentationRegistry.getArguments() |
