diff options
| author | Albin <albin@mullvad.net> | 2022-06-07 09:31:55 +0200 |
|---|---|---|
| committer | Albin <albin@mullvad.net> | 2022-06-15 10:25:32 +0200 |
| commit | 8064ca4de5adc5da6b4210d0dd6ea666f4dfe2f5 (patch) | |
| tree | 07cd2e5c7a364762a6c22d060ee0c4db4b59a2f9 /android | |
| parent | b73e95432206c3939493fb7a8b3d6f3892cdd9dc (diff) | |
| download | mullvadvpn-8064ca4de5adc5da6b4210d0dd6ea666f4dfe2f5.tar.xz mullvadvpn-8064ca4de5adc5da6b4210d0dd6ea666f4dfe2f5.zip | |
Add revoked ui tests
Diffstat (limited to 'android')
3 files changed, 107 insertions, 0 deletions
diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index afd32e22e7..c7baf5b7d0 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -120,6 +120,10 @@ android { packagingOptions { jniLibs.useLegacyPackaging = true + + // Fixes packaging error caused by: androidx.compose.ui:ui-test-junit4 + pickFirst("META-INF/AL2.0") + pickFirst("META-INF/LGPL2.1") } project.tasks.preBuild.dependsOn("ensureJniDirectoryExist") @@ -202,8 +206,10 @@ dependencies { // UI test dependencies debugImplementation(Dependencies.AndroidX.fragmentTestning) + debugImplementation(Dependencies.Compose.testManifest) androidTestImplementation(Dependencies.AndroidX.espressoContrib) androidTestImplementation(Dependencies.AndroidX.espressoCore) + androidTestImplementation(Dependencies.Compose.junit) androidTestImplementation(Dependencies.Koin.test) androidTestImplementation(Dependencies.Kotlin.test) androidTestImplementation(Dependencies.MockK.android) diff --git a/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/DeviceRevokedScreenTest.kt b/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/DeviceRevokedScreenTest.kt new file mode 100644 index 0000000000..1590dcc497 --- /dev/null +++ b/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/DeviceRevokedScreenTest.kt @@ -0,0 +1,99 @@ +package net.mullvad.mullvadvpn.compose.screen + +import androidx.compose.ui.test.junit4.createComposeRule +import androidx.compose.ui.test.onNodeWithText +import androidx.compose.ui.test.performClick +import io.mockk.MockKAnnotations +import io.mockk.Runs +import io.mockk.every +import io.mockk.impl.annotations.MockK +import io.mockk.just +import io.mockk.verify +import kotlinx.coroutines.flow.MutableStateFlow +import net.mullvad.mullvadvpn.compose.component.AppTheme +import net.mullvad.mullvadvpn.compose.state.DeviceRevokedUiState +import net.mullvad.mullvadvpn.viewmodel.DeviceRevokedViewModel +import org.junit.Before +import org.junit.Rule +import org.junit.Test + +class DeviceRevokedScreenTest { + @get:Rule + val composeTestRule = createComposeRule() + + @MockK + lateinit var mockedViewModel: DeviceRevokedViewModel + + @Before + fun setup() { + MockKAnnotations.init(this) + every { mockedViewModel.onGoToLoginClicked() } just Runs + } + + @Test + fun testUnblockWarningShowingWhenSecured() { + // Arrange + every { + mockedViewModel.uiState + } returns MutableStateFlow(DeviceRevokedUiState(isSecured = true)) + + // Act + composeTestRule.setContent { + AppTheme { + DeviceRevokedScreen(mockedViewModel) + } + } + + // Assert + composeTestRule + .onNodeWithText(UNBLOCK_WARNING) + .assertExists() + } + + @Test + fun testUnblockWarningNotShowingWhenNotSecured() { + // Arrange + every { + mockedViewModel.uiState + } returns MutableStateFlow(DeviceRevokedUiState(isSecured = false)) + + // Act + composeTestRule.setContent { + AppTheme { + DeviceRevokedScreen(mockedViewModel) + } + } + + // Assert + composeTestRule + .onNodeWithText(UNBLOCK_WARNING) + .assertDoesNotExist() + } + + @Test + fun testGoToLogin() { + // Arrange + every { + mockedViewModel.uiState + } returns MutableStateFlow(DeviceRevokedUiState(isSecured = false)) + composeTestRule.setContent { + AppTheme { + DeviceRevokedScreen(mockedViewModel) + } + } + + // Act + composeTestRule + .onNodeWithText(GO_TO_LOGIN_BUTTON_TEXT) + .performClick() + + // Assert + verify { mockedViewModel.onGoToLoginClicked() } + } + + companion object { + private const val GO_TO_LOGIN_BUTTON_TEXT = "Go to login" + private const val UNBLOCK_WARNING = + "Going to login will unblock the internet on this device." + } +} diff --git a/android/buildSrc/src/main/kotlin/Dependencies.kt b/android/buildSrc/src/main/kotlin/Dependencies.kt index dc5458f729..38d5b8ddbd 100644 --- a/android/buildSrc/src/main/kotlin/Dependencies.kt +++ b/android/buildSrc/src/main/kotlin/Dependencies.kt @@ -43,9 +43,11 @@ object Dependencies { const val constrainLayout = "androidx.constraintlayout:constraintlayout-compose:${Versions.Compose.constrainLayout}" const val foundation = "androidx.compose.foundation:foundation:${Versions.Compose.base}" + const val junit = "androidx.compose.ui:ui-test-junit4:${Versions.Compose.base}" const val viewModelLifecycle = "androidx.lifecycle:lifecycle-viewmodel-compose:${Versions.Compose.viewModelLifecycle}" const val material = "androidx.compose.material:material:${Versions.Compose.base}" + const val testManifest = "androidx.compose.ui:ui-test-manifest:${Versions.Compose.base}" const val uiController = "com.google.accompanist:accompanist-systemuicontroller:${Versions.Compose.uiController}" const val ui = "androidx.compose.ui:ui:${Versions.Compose.base}" |
