Merge pull request #3481 from element-hq/feature/bma/testAccounteDeactivationView
Add tests on AccountDeactivationView
This commit is contained in:
commit
406c000ecd
3 changed files with 105 additions and 1 deletions
|
|
@ -33,6 +33,7 @@ dependencies {
|
||||||
implementation(projects.libraries.architecture)
|
implementation(projects.libraries.architecture)
|
||||||
implementation(projects.libraries.matrix.api)
|
implementation(projects.libraries.matrix.api)
|
||||||
implementation(projects.libraries.designsystem)
|
implementation(projects.libraries.designsystem)
|
||||||
|
implementation(projects.libraries.testtags)
|
||||||
implementation(projects.libraries.uiStrings)
|
implementation(projects.libraries.uiStrings)
|
||||||
api(projects.features.deactivation.api)
|
api(projects.features.deactivation.api)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -65,6 +65,8 @@ import io.element.android.libraries.designsystem.theme.components.Text
|
||||||
import io.element.android.libraries.designsystem.theme.components.TopAppBar
|
import io.element.android.libraries.designsystem.theme.components.TopAppBar
|
||||||
import io.element.android.libraries.designsystem.theme.components.autofill
|
import io.element.android.libraries.designsystem.theme.components.autofill
|
||||||
import io.element.android.libraries.designsystem.theme.components.onTabOrEnterKeyFocusNext
|
import io.element.android.libraries.designsystem.theme.components.onTabOrEnterKeyFocusNext
|
||||||
|
import io.element.android.libraries.testtags.TestTags
|
||||||
|
import io.element.android.libraries.testtags.testTag
|
||||||
import io.element.android.libraries.ui.strings.CommonStrings
|
import io.element.android.libraries.ui.strings.CommonStrings
|
||||||
import kotlinx.collections.immutable.persistentListOf
|
import kotlinx.collections.immutable.persistentListOf
|
||||||
|
|
||||||
|
|
@ -277,6 +279,7 @@ private fun Content(
|
||||||
.padding(top = 8.dp)
|
.padding(top = 8.dp)
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.onTabOrEnterKeyFocusNext(focusManager)
|
.onTabOrEnterKeyFocusNext(focusManager)
|
||||||
|
.testTag(TestTags.loginPassword)
|
||||||
.autofill(
|
.autofill(
|
||||||
autofillTypes = listOf(AutofillType.Password),
|
autofillTypes = listOf(AutofillType.Password),
|
||||||
onFill = {
|
onFill = {
|
||||||
|
|
|
||||||
|
|
@ -10,15 +10,26 @@ package io.element.android.features.logout.impl
|
||||||
import androidx.activity.ComponentActivity
|
import androidx.activity.ComponentActivity
|
||||||
import androidx.compose.ui.test.junit4.AndroidComposeTestRule
|
import androidx.compose.ui.test.junit4.AndroidComposeTestRule
|
||||||
import androidx.compose.ui.test.junit4.createAndroidComposeRule
|
import androidx.compose.ui.test.junit4.createAndroidComposeRule
|
||||||
|
import androidx.compose.ui.test.onNodeWithTag
|
||||||
|
import androidx.compose.ui.test.performTextInput
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||||
|
import io.element.android.features.deactivation.impl.R
|
||||||
|
import io.element.android.libraries.architecture.AsyncAction
|
||||||
|
import io.element.android.libraries.matrix.test.AN_EXCEPTION
|
||||||
|
import io.element.android.libraries.matrix.test.A_PASSWORD
|
||||||
|
import io.element.android.libraries.testtags.TestTags
|
||||||
|
import io.element.android.libraries.ui.strings.CommonStrings
|
||||||
import io.element.android.tests.testutils.EnsureNeverCalled
|
import io.element.android.tests.testutils.EnsureNeverCalled
|
||||||
import io.element.android.tests.testutils.EventsRecorder
|
import io.element.android.tests.testutils.EventsRecorder
|
||||||
|
import io.element.android.tests.testutils.clickOn
|
||||||
import io.element.android.tests.testutils.ensureCalledOnce
|
import io.element.android.tests.testutils.ensureCalledOnce
|
||||||
import io.element.android.tests.testutils.pressBack
|
import io.element.android.tests.testutils.pressBack
|
||||||
|
import io.element.android.tests.testutils.pressTag
|
||||||
import org.junit.Rule
|
import org.junit.Rule
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import org.junit.rules.TestRule
|
import org.junit.rules.TestRule
|
||||||
import org.junit.runner.RunWith
|
import org.junit.runner.RunWith
|
||||||
|
import org.robolectric.annotation.Config
|
||||||
|
|
||||||
@RunWith(AndroidJUnit4::class)
|
@RunWith(AndroidJUnit4::class)
|
||||||
class AccountDeactivationViewTest {
|
class AccountDeactivationViewTest {
|
||||||
|
|
@ -36,7 +47,96 @@ class AccountDeactivationViewTest {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO Add more tests
|
@Config(qualifiers = "h1024dp")
|
||||||
|
@Test
|
||||||
|
fun `clicking on Deactivate emits the expected Event`() {
|
||||||
|
val eventsRecorder = EventsRecorder<AccountDeactivationEvents>()
|
||||||
|
rule.setAccountDeactivationView(
|
||||||
|
state = anAccountDeactivationState(
|
||||||
|
deactivateFormState = aDeactivateFormState(
|
||||||
|
password = A_PASSWORD,
|
||||||
|
),
|
||||||
|
eventSink = eventsRecorder,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
rule.clickOn(CommonStrings.action_deactivate)
|
||||||
|
eventsRecorder.assertSingle(AccountDeactivationEvents.DeactivateAccount(false))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `clicking on Deactivate on the confirmation dialog emits the expected Event`() {
|
||||||
|
val eventsRecorder = EventsRecorder<AccountDeactivationEvents>()
|
||||||
|
rule.setAccountDeactivationView(
|
||||||
|
state = anAccountDeactivationState(
|
||||||
|
deactivateFormState = aDeactivateFormState(
|
||||||
|
password = A_PASSWORD,
|
||||||
|
),
|
||||||
|
accountDeactivationAction = AsyncAction.Confirming,
|
||||||
|
eventSink = eventsRecorder,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
rule.pressTag(TestTags.dialogPositive.value)
|
||||||
|
eventsRecorder.assertSingle(AccountDeactivationEvents.DeactivateAccount(false))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `clicking on retry on the confirmation dialog emits the expected Event`() {
|
||||||
|
val eventsRecorder = EventsRecorder<AccountDeactivationEvents>()
|
||||||
|
rule.setAccountDeactivationView(
|
||||||
|
state = anAccountDeactivationState(
|
||||||
|
deactivateFormState = aDeactivateFormState(
|
||||||
|
password = A_PASSWORD,
|
||||||
|
),
|
||||||
|
accountDeactivationAction = AsyncAction.Failure(AN_EXCEPTION),
|
||||||
|
eventSink = eventsRecorder,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
rule.clickOn(CommonStrings.action_retry)
|
||||||
|
eventsRecorder.assertSingle(AccountDeactivationEvents.DeactivateAccount(true))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `switching on the erase all switch emits the expected Event`() {
|
||||||
|
val eventsRecorder = EventsRecorder<AccountDeactivationEvents>()
|
||||||
|
rule.setAccountDeactivationView(
|
||||||
|
state = anAccountDeactivationState(
|
||||||
|
eventSink = eventsRecorder,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
rule.clickOn(R.string.screen_deactivate_account_delete_all_messages)
|
||||||
|
eventsRecorder.assertSingle(AccountDeactivationEvents.SetEraseData(true))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `switching off the erase all switch emits the expected Event`() {
|
||||||
|
val eventsRecorder = EventsRecorder<AccountDeactivationEvents>()
|
||||||
|
rule.setAccountDeactivationView(
|
||||||
|
state = anAccountDeactivationState(
|
||||||
|
deactivateFormState = aDeactivateFormState(
|
||||||
|
eraseData = true,
|
||||||
|
),
|
||||||
|
eventSink = eventsRecorder,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
rule.clickOn(R.string.screen_deactivate_account_delete_all_messages)
|
||||||
|
eventsRecorder.assertSingle(AccountDeactivationEvents.SetEraseData(false))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Config(qualifiers = "h1024dp")
|
||||||
|
@Test
|
||||||
|
fun `typing text in the password field emits the expected Event`() {
|
||||||
|
val eventsRecorder = EventsRecorder<AccountDeactivationEvents>()
|
||||||
|
rule.setAccountDeactivationView(
|
||||||
|
state = anAccountDeactivationState(
|
||||||
|
deactivateFormState = aDeactivateFormState(
|
||||||
|
password = A_PASSWORD,
|
||||||
|
),
|
||||||
|
eventSink = eventsRecorder,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
rule.onNodeWithTag(TestTags.loginPassword.value).performTextInput("A")
|
||||||
|
eventsRecorder.assertSingle(AccountDeactivationEvents.SetPassword("A$A_PASSWORD"))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun <R : TestRule> AndroidComposeTestRule<R, ComponentActivity>.setAccountDeactivationView(
|
private fun <R : TestRule> AndroidComposeTestRule<R, ComponentActivity>.setAccountDeactivationView(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue