summaryrefslogtreecommitdiffhomepage
path: root/android
diff options
context:
space:
mode:
Diffstat (limited to 'android')
-rw-r--r--android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/OutOfTimeScreenTest.kt172
1 files changed, 172 insertions, 0 deletions
diff --git a/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/OutOfTimeScreenTest.kt b/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/OutOfTimeScreenTest.kt
new file mode 100644
index 0000000000..a97e587c8c
--- /dev/null
+++ b/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/OutOfTimeScreenTest.kt
@@ -0,0 +1,172 @@
+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.mockk
+import io.mockk.verify
+import kotlinx.coroutines.flow.MutableSharedFlow
+import kotlinx.coroutines.flow.MutableStateFlow
+import net.mullvad.mullvadvpn.compose.state.OutOfTimeUiState
+import net.mullvad.mullvadvpn.model.TunnelState
+import net.mullvad.mullvadvpn.viewmodel.OutOfTimeViewModel
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+
+class OutOfTimeScreenTest {
+ @get:Rule val composeTestRule = createComposeRule()
+
+ @Before
+ fun setup() {
+ MockKAnnotations.init(this)
+ }
+
+ @Test
+ fun testDisableSitePayment() {
+ // Arrange
+ composeTestRule.setContent {
+ OutOfTimeScreen(
+ showSitePayment = false,
+ uiState = OutOfTimeUiState(),
+ viewActions = MutableSharedFlow(),
+ onSitePaymentClick = {},
+ onRedeemVoucherClick = {},
+ onSettingsClick = {},
+ onAccountClick = {},
+ openConnectScreen = {},
+ onDisconnectClick = {}
+ )
+ }
+
+ // Assert
+ composeTestRule.apply {
+ onNodeWithText(
+ "Either buy credit on our website or redeem a voucher.",
+ substring = true
+ )
+ .assertDoesNotExist()
+ onNodeWithText("Buy credit").assertDoesNotExist()
+ }
+ }
+
+ @Test
+ fun testOpenAccountView() {
+ // Arrange
+ composeTestRule.setContent {
+ OutOfTimeScreen(
+ showSitePayment = true,
+ uiState = OutOfTimeUiState(),
+ viewActions =
+ MutableStateFlow(OutOfTimeViewModel.ViewAction.OpenAccountView("222")),
+ onSitePaymentClick = {},
+ onRedeemVoucherClick = {},
+ onSettingsClick = {},
+ onAccountClick = {},
+ openConnectScreen = {},
+ onDisconnectClick = {}
+ )
+ }
+
+ // Assert
+ composeTestRule.apply { onNodeWithText("Congrats!").assertDoesNotExist() }
+ }
+
+ @Test
+ fun testOpenConnectScreen() {
+ // Arrange
+ val mockClickListener: () -> Unit = mockk(relaxed = true)
+ composeTestRule.setContent {
+ OutOfTimeScreen(
+ showSitePayment = true,
+ uiState = OutOfTimeUiState(),
+ viewActions = MutableStateFlow(OutOfTimeViewModel.ViewAction.OpenConnectScreen),
+ onSitePaymentClick = {},
+ onRedeemVoucherClick = {},
+ onSettingsClick = {},
+ onAccountClick = {},
+ openConnectScreen = mockClickListener,
+ onDisconnectClick = {}
+ )
+ }
+
+ // Assert
+ verify(exactly = 1) { mockClickListener.invoke() }
+ }
+
+ @Test
+ fun testClickSitePaymentButton() {
+ // Arrange
+ val mockClickListener: () -> Unit = mockk(relaxed = true)
+ composeTestRule.setContent {
+ OutOfTimeScreen(
+ showSitePayment = true,
+ uiState = OutOfTimeUiState(),
+ viewActions = MutableSharedFlow(),
+ onSitePaymentClick = mockClickListener,
+ onRedeemVoucherClick = {},
+ onSettingsClick = {},
+ onAccountClick = {},
+ openConnectScreen = {},
+ onDisconnectClick = {}
+ )
+ }
+
+ // Act
+ composeTestRule.apply { onNodeWithText("Buy credit").performClick() }
+
+ // Assert
+ verify(exactly = 1) { mockClickListener.invoke() }
+ }
+
+ @Test
+ fun testClickRedeemVoucher() {
+ // Arrange
+ val mockClickListener: () -> Unit = mockk(relaxed = true)
+ composeTestRule.setContent {
+ OutOfTimeScreen(
+ showSitePayment = true,
+ uiState = OutOfTimeUiState(),
+ viewActions = MutableSharedFlow(),
+ onSitePaymentClick = {},
+ onRedeemVoucherClick = mockClickListener,
+ onSettingsClick = {},
+ onAccountClick = {},
+ openConnectScreen = {},
+ onDisconnectClick = {}
+ )
+ }
+
+ // Act
+ composeTestRule.apply { onNodeWithText("Redeem voucher").performClick() }
+
+ // Assert
+ verify(exactly = 1) { mockClickListener.invoke() }
+ }
+
+ @Test
+ fun testClickDisconnect() {
+ // Arrange
+ val mockClickListener: () -> Unit = mockk(relaxed = true)
+ composeTestRule.setContent {
+ OutOfTimeScreen(
+ showSitePayment = true,
+ uiState = OutOfTimeUiState(tunnelState = TunnelState.Connecting(null, null)),
+ viewActions = MutableSharedFlow(),
+ onSitePaymentClick = {},
+ onRedeemVoucherClick = {},
+ onSettingsClick = {},
+ onAccountClick = {},
+ openConnectScreen = {},
+ onDisconnectClick = mockClickListener
+ )
+ }
+
+ // Act
+ composeTestRule.apply { onNodeWithText("Disconnect").performClick() }
+
+ // Assert
+ verify(exactly = 1) { mockClickListener.invoke() }
+ }
+}