diff options
| author | Albin <albin@mullvad.net> | 2023-11-27 17:23:12 +0100 |
|---|---|---|
| committer | Albin <albin@mullvad.net> | 2023-11-27 17:23:12 +0100 |
| commit | 3b093e0ee4afd159412d9921d8707478874d2392 (patch) | |
| tree | cf499ed6dc34f582cb70181f8ee84c58389370b0 /android/app/src/androidTest | |
| parent | 851b1343afa7dfd93547e7836d90e6eb73330d3a (diff) | |
| parent | 836a7937974141aa4ad55750556e5d607c956665 (diff) | |
| download | mullvadvpn-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.kt | 149 |
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" + } +} |
