summaryrefslogtreecommitdiffhomepage
path: root/android
diff options
context:
space:
mode:
authorAlbin <albin@mullvad.net>2022-06-07 09:31:55 +0200
committerAlbin <albin@mullvad.net>2022-06-15 10:25:32 +0200
commit8064ca4de5adc5da6b4210d0dd6ea666f4dfe2f5 (patch)
tree07cd2e5c7a364762a6c22d060ee0c4db4b59a2f9 /android
parentb73e95432206c3939493fb7a8b3d6f3892cdd9dc (diff)
downloadmullvadvpn-8064ca4de5adc5da6b4210d0dd6ea666f4dfe2f5.tar.xz
mullvadvpn-8064ca4de5adc5da6b4210d0dd6ea666f4dfe2f5.zip
Add revoked ui tests
Diffstat (limited to 'android')
-rw-r--r--android/app/build.gradle.kts6
-rw-r--r--android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/DeviceRevokedScreenTest.kt99
-rw-r--r--android/buildSrc/src/main/kotlin/Dependencies.kt2
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}"