summaryrefslogtreecommitdiffhomepage
path: root/android/app/src/androidTest
diff options
context:
space:
mode:
Diffstat (limited to 'android/app/src/androidTest')
-rw-r--r--android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/AccountScreenTest.kt128
1 files changed, 128 insertions, 0 deletions
diff --git a/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/AccountScreenTest.kt b/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/AccountScreenTest.kt
new file mode 100644
index 0000000000..e616f67449
--- /dev/null
+++ b/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/AccountScreenTest.kt
@@ -0,0 +1,128 @@
+package net.mullvad.mullvadvpn.compose.screen
+
+import androidx.compose.material3.ExperimentalMaterial3Api
+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.mockk
+import io.mockk.verify
+import kotlinx.coroutines.flow.MutableSharedFlow
+import kotlinx.coroutines.flow.asSharedFlow
+import net.mullvad.mullvadvpn.compose.state.AccountUiState
+import net.mullvad.mullvadvpn.viewmodel.AccountViewModel
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+
+class AccountScreenTest {
+ @get:Rule val composeTestRule = createComposeRule()
+
+ @Before
+ fun setup() {
+ MockKAnnotations.init(this)
+ }
+
+ @OptIn(ExperimentalMaterial3Api::class)
+ @Test
+ fun testDefaultState() {
+ // Arrange
+ composeTestRule.setContent {
+ AccountScreen(
+ uiState =
+ AccountUiState(
+ deviceName = DUMMY_DEVICE_NAME,
+ accountNumber = DUMMY_ACCOUNT_NUMBER,
+ accountExpiry = null
+ ),
+ viewActions = MutableSharedFlow<AccountViewModel.ViewAction>().asSharedFlow()
+ )
+ }
+
+ // Assert
+ composeTestRule.apply {
+ onNodeWithText("Redeem voucher").assertExists()
+ onNodeWithText("Log out").assertExists()
+ }
+ }
+
+ @OptIn(ExperimentalMaterial3Api::class)
+ @Test
+ fun testManageAccountClick() {
+ // Arrange
+ val mockedClickHandler: () -> Unit = mockk(relaxed = true)
+ composeTestRule.setContent {
+ AccountScreen(
+ uiState =
+ AccountUiState(
+ deviceName = DUMMY_DEVICE_NAME,
+ accountNumber = DUMMY_ACCOUNT_NUMBER,
+ accountExpiry = null
+ ),
+ viewActions = MutableSharedFlow<AccountViewModel.ViewAction>().asSharedFlow(),
+ onManageAccountClick = mockedClickHandler
+ )
+ }
+
+ // Act
+ composeTestRule.onNodeWithText("Manage account").performClick()
+
+ // Assert
+ verify { mockedClickHandler.invoke() }
+ }
+
+ @OptIn(ExperimentalMaterial3Api::class)
+ @Test
+ fun testRedeemVoucherClick() {
+ // Arrange
+ val mockedClickHandler: () -> Unit = mockk(relaxed = true)
+ composeTestRule.setContent {
+ AccountScreen(
+ uiState =
+ AccountUiState(
+ deviceName = DUMMY_DEVICE_NAME,
+ accountNumber = DUMMY_ACCOUNT_NUMBER,
+ accountExpiry = null
+ ),
+ viewActions = MutableSharedFlow<AccountViewModel.ViewAction>().asSharedFlow(),
+ onRedeemVoucherClick = mockedClickHandler
+ )
+ }
+
+ // Act
+ composeTestRule.onNodeWithText("Redeem voucher").performClick()
+
+ // Assert
+ verify { mockedClickHandler.invoke() }
+ }
+
+ @OptIn(ExperimentalMaterial3Api::class)
+ @Test
+ fun testLogoutClick() {
+ // Arrange
+ val mockedClickHandler: () -> Unit = mockk(relaxed = true)
+ composeTestRule.setContent {
+ AccountScreen(
+ uiState =
+ AccountUiState(
+ deviceName = DUMMY_DEVICE_NAME,
+ accountNumber = DUMMY_ACCOUNT_NUMBER,
+ accountExpiry = null
+ ),
+ viewActions = MutableSharedFlow<AccountViewModel.ViewAction>().asSharedFlow(),
+ onLogoutClick = mockedClickHandler
+ )
+ }
+
+ // Act
+ composeTestRule.onNodeWithText("Log out").performClick()
+
+ // Assert
+ verify { mockedClickHandler.invoke() }
+ }
+
+ companion object {
+ private const val DUMMY_DEVICE_NAME = "fake_name"
+ private const val DUMMY_ACCOUNT_NUMBER = "fake_number"
+ }
+}