summaryrefslogtreecommitdiffhomepage
path: root/android/app/src/androidTest
diff options
context:
space:
mode:
authorAlbin <albin@mullvad.net>2023-11-27 17:23:12 +0100
committerAlbin <albin@mullvad.net>2023-11-27 17:23:12 +0100
commit3b093e0ee4afd159412d9921d8707478874d2392 (patch)
treecf499ed6dc34f582cb70181f8ee84c58389370b0 /android/app/src/androidTest
parent851b1343afa7dfd93547e7836d90e6eb73330d3a (diff)
parent836a7937974141aa4ad55750556e5d607c956665 (diff)
downloadmullvadvpn-3b093e0ee4afd159412d9921d8707478874d2392.tar.xz
mullvadvpn-3b093e0ee4afd159412d9921d8707478874d2392.zip
Merge branch 'fix-clipboard-copypaste-bug-on-voucherredeemdialog-when-it-droid-402'
Diffstat (limited to 'android/app/src/androidTest')
-rw-r--r--android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/RedeemVoucherDialogTest.kt149
1 files changed, 149 insertions, 0 deletions
diff --git a/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/RedeemVoucherDialogTest.kt b/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/RedeemVoucherDialogTest.kt
new file mode 100644
index 0000000000..c07cb1aa6b
--- /dev/null
+++ b/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/RedeemVoucherDialogTest.kt
@@ -0,0 +1,149 @@
+package net.mullvad.mullvadvpn.compose.screen
+
+import androidx.compose.ui.test.junit4.createComposeRule
+import androidx.compose.ui.test.onNodeWithTag
+import androidx.compose.ui.test.onNodeWithText
+import androidx.compose.ui.test.performClick
+import androidx.compose.ui.test.performTextInput
+import io.mockk.mockk
+import io.mockk.mockkObject
+import io.mockk.verify
+import net.mullvad.mullvadvpn.compose.setContentWithTheme
+import net.mullvad.mullvadvpn.compose.state.VoucherDialogState
+import net.mullvad.mullvadvpn.compose.state.VoucherDialogUiState
+import net.mullvad.mullvadvpn.compose.test.VOUCHER_INPUT_TEST_TAG
+import net.mullvad.mullvadvpn.util.VoucherRegexHelper
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+
+class RedeemVoucherDialogTest {
+ @get:Rule val composeTestRule = createComposeRule()
+
+ @Before
+ fun setup() {
+ mockkObject(VoucherRegexHelper)
+ }
+
+ @Test
+ fun testDismissDialog() {
+ // Arrange
+ val mockedClickHandler: (Boolean) -> Unit = mockk(relaxed = true)
+ composeTestRule.setContentWithTheme {
+ RedeemVoucherDialogScreen(
+ uiState = VoucherDialogUiState.INITIAL,
+ onVoucherInputChange = {},
+ onRedeem = {},
+ onDismiss = mockedClickHandler
+ )
+ }
+
+ // Act
+ composeTestRule.onNodeWithText(CANCEL_BUTTON_TEXT).performClick()
+
+ // Assert
+ verify { mockedClickHandler.invoke(false) }
+ }
+
+ @Test
+ fun testDismissDialogAfterSuccessfulRedeem() {
+ // Arrange
+ val mockedClickHandler: (Boolean) -> Unit = mockk(relaxed = true)
+ composeTestRule.setContentWithTheme {
+ RedeemVoucherDialogScreen(
+ uiState =
+ VoucherDialogUiState(voucherViewModelState = VoucherDialogState.Success(0)),
+ onVoucherInputChange = {},
+ onRedeem = {},
+ onDismiss = mockedClickHandler
+ )
+ }
+
+ // Act
+ composeTestRule.onNodeWithText(GOT_IT_BUTTON_TEXT).performClick()
+
+ // Assert
+ verify { mockedClickHandler.invoke(true) }
+ }
+
+ @Test
+ fun testInsertVoucher() {
+ // Arrange
+ val mockedClickHandler: (String) -> Unit = mockk(relaxed = true)
+ composeTestRule.setContentWithTheme {
+ RedeemVoucherDialogScreen(
+ uiState = VoucherDialogUiState(),
+ onVoucherInputChange = mockedClickHandler,
+ onRedeem = {},
+ onDismiss = {}
+ )
+ }
+
+ // Act
+ composeTestRule.onNodeWithTag(VOUCHER_INPUT_TEST_TAG).performTextInput(DUMMY_VOUCHER)
+
+ // Assert
+ verify { mockedClickHandler.invoke(DUMMY_VOUCHER) }
+ }
+
+ @Test
+ fun testVerifyingState() {
+ // Arrange
+ composeTestRule.setContentWithTheme {
+ RedeemVoucherDialogScreen(
+ uiState =
+ VoucherDialogUiState(voucherViewModelState = VoucherDialogState.Verifying),
+ onVoucherInputChange = {},
+ onRedeem = {},
+ onDismiss = {}
+ )
+ }
+
+ // Assert
+ composeTestRule.onNodeWithText("Verifying voucher…").assertExists()
+ }
+
+ @Test
+ fun testSuccessState() {
+ // Arrange
+ composeTestRule.setContentWithTheme {
+ RedeemVoucherDialogScreen(
+ uiState =
+ VoucherDialogUiState(voucherViewModelState = VoucherDialogState.Success(0)),
+ onVoucherInputChange = {},
+ onRedeem = {},
+ onDismiss = {}
+ )
+ }
+
+ // Assert
+ composeTestRule.onNodeWithText("Voucher was successfully redeemed.").assertExists()
+ }
+
+ @Test
+ fun testErrorState() {
+ // Arrange
+ composeTestRule.setContentWithTheme {
+ RedeemVoucherDialogScreen(
+ uiState =
+ VoucherDialogUiState(
+ voucherViewModelState = VoucherDialogState.Error(ERROR_MESSAGE)
+ ),
+ onVoucherInputChange = {},
+ onRedeem = {},
+ onDismiss = {}
+ )
+ }
+
+ // Assert
+ composeTestRule.onNodeWithText(ERROR_MESSAGE).assertExists()
+ }
+
+ companion object {
+ private const val REDEEM_BUTTON_TEXT = "Redeem"
+ private const val CANCEL_BUTTON_TEXT = "Cancel"
+ private const val GOT_IT_BUTTON_TEXT = "Got it!"
+ private const val DUMMY_VOUCHER = "DUMMY____VOUCHER"
+ private const val ERROR_MESSAGE = "error_message"
+ }
+}