Browse Source

Create extension to cleanup LogoutViewTest

pull/2433/head
Benoit Marty 7 months ago
parent
commit
0f97f76089
  1. 136
      features/logout/impl/src/test/kotlin/io/element/android/features/logout/impl/LogoutViewTest.kt

136
features/logout/impl/src/test/kotlin/io/element/android/features/logout/impl/LogoutViewTest.kt

@ -17,6 +17,7 @@
package io.element.android.features.logout.impl 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.createAndroidComposeRule import androidx.compose.ui.test.junit4.createAndroidComposeRule
import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.ext.junit.runners.AndroidJUnit4
import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.AsyncAction
@ -32,6 +33,7 @@ import io.element.android.tests.testutils.pressBack
import io.element.android.tests.testutils.pressTag 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.runner.RunWith import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class) @RunWith(AndroidJUnit4::class)
@ -41,16 +43,11 @@ class LogoutViewTest {
@Test @Test
fun `clicking on logout sends a LogoutEvents`() { fun `clicking on logout sends a LogoutEvents`() {
val eventsRecorder = EventsRecorder<LogoutEvents>() val eventsRecorder = EventsRecorder<LogoutEvents>()
rule.setContent { rule.setLogoutView(
LogoutView( aLogoutState(
aLogoutState( eventSink = eventsRecorder
eventSink = eventsRecorder ),
), )
onChangeRecoveryKeyClicked = EnsureNeverCalled(),
onBackClicked = EnsureNeverCalled(),
onSuccessLogout = EnsureNeverCalledWithParam(),
)
}
rule.clickOn(CommonStrings.action_signout) rule.clickOn(CommonStrings.action_signout)
eventsRecorder.assertSingle(LogoutEvents.Logout(false)) eventsRecorder.assertSingle(LogoutEvents.Logout(false))
} }
@ -58,17 +55,12 @@ class LogoutViewTest {
@Test @Test
fun `confirming logout sends a LogoutEvents`() { fun `confirming logout sends a LogoutEvents`() {
val eventsRecorder = EventsRecorder<LogoutEvents>() val eventsRecorder = EventsRecorder<LogoutEvents>()
rule.setContent { rule.setLogoutView(
LogoutView( aLogoutState(
aLogoutState( logoutAction = AsyncAction.Confirming,
logoutAction = AsyncAction.Confirming, eventSink = eventsRecorder
eventSink = eventsRecorder ),
), )
onChangeRecoveryKeyClicked = EnsureNeverCalled(),
onBackClicked = EnsureNeverCalled(),
onSuccessLogout = EnsureNeverCalledWithParam(),
)
}
rule.pressTag(TestTags.dialogPositive.value) rule.pressTag(TestTags.dialogPositive.value)
eventsRecorder.assertSingle(LogoutEvents.Logout(false)) eventsRecorder.assertSingle(LogoutEvents.Logout(false))
} }
@ -77,16 +69,12 @@ class LogoutViewTest {
fun `clicking on back invoke back callback`() { fun `clicking on back invoke back callback`() {
val eventsRecorder = EventsRecorder<LogoutEvents>(expectEvents = false) val eventsRecorder = EventsRecorder<LogoutEvents>(expectEvents = false)
ensureCalledOnce { callback -> ensureCalledOnce { callback ->
rule.setContent { rule.setLogoutView(
LogoutView( aLogoutState(
aLogoutState( eventSink = eventsRecorder
eventSink = eventsRecorder ),
), onBackClicked = callback,
onChangeRecoveryKeyClicked = EnsureNeverCalled(), )
onBackClicked = callback,
onSuccessLogout = EnsureNeverCalledWithParam(),
)
}
rule.pressBack() rule.pressBack()
} }
} }
@ -94,17 +82,12 @@ class LogoutViewTest {
@Test @Test
fun `clicking on confirm after error sends a LogoutEvents`() { fun `clicking on confirm after error sends a LogoutEvents`() {
val eventsRecorder = EventsRecorder<LogoutEvents>() val eventsRecorder = EventsRecorder<LogoutEvents>()
rule.setContent { rule.setLogoutView(
LogoutView( aLogoutState(
aLogoutState( logoutAction = AsyncAction.Failure(Exception("Failed to logout")),
logoutAction = AsyncAction.Failure(Exception("Failed to logout")), eventSink = eventsRecorder
eventSink = eventsRecorder ),
), )
onChangeRecoveryKeyClicked = EnsureNeverCalled(),
onBackClicked = EnsureNeverCalled(),
onSuccessLogout = EnsureNeverCalledWithParam(),
)
}
rule.clickOn(CommonStrings.action_signout_anyway) rule.clickOn(CommonStrings.action_signout_anyway)
eventsRecorder.assertSingle(LogoutEvents.Logout(true)) eventsRecorder.assertSingle(LogoutEvents.Logout(true))
} }
@ -112,17 +95,12 @@ class LogoutViewTest {
@Test @Test
fun `clicking on cancel after error sends a LogoutEvents`() { fun `clicking on cancel after error sends a LogoutEvents`() {
val eventsRecorder = EventsRecorder<LogoutEvents>() val eventsRecorder = EventsRecorder<LogoutEvents>()
rule.setContent { rule.setLogoutView(
LogoutView( aLogoutState(
aLogoutState( logoutAction = AsyncAction.Failure(Exception("Failed to logout")),
logoutAction = AsyncAction.Failure(Exception("Failed to logout")), eventSink = eventsRecorder
eventSink = eventsRecorder ),
), )
onChangeRecoveryKeyClicked = EnsureNeverCalled(),
onBackClicked = EnsureNeverCalled(),
onSuccessLogout = EnsureNeverCalledWithParam(),
)
}
rule.clickOn(CommonStrings.action_cancel) rule.clickOn(CommonStrings.action_cancel)
eventsRecorder.assertSingle(LogoutEvents.CloseDialogs) eventsRecorder.assertSingle(LogoutEvents.CloseDialogs)
} }
@ -132,17 +110,13 @@ class LogoutViewTest {
val data = "data" val data = "data"
val eventsRecorder = EventsRecorder<LogoutEvents>(expectEvents = false) val eventsRecorder = EventsRecorder<LogoutEvents>(expectEvents = false)
ensureCalledOnceWithParam<String?>(data) { callback -> ensureCalledOnceWithParam<String?>(data) { callback ->
rule.setContent { rule.setLogoutView(
LogoutView( aLogoutState(
aLogoutState( logoutAction = AsyncAction.Success(data),
logoutAction = AsyncAction.Success(data), eventSink = eventsRecorder
eventSink = eventsRecorder ),
), onSuccessLogout = callback,
onChangeRecoveryKeyClicked = EnsureNeverCalled(), )
onBackClicked = EnsureNeverCalled(),
onSuccessLogout = callback,
)
}
} }
} }
@ -150,18 +124,30 @@ class LogoutViewTest {
fun `last session setting button invoke onChangeRecoveryKeyClicked`() { fun `last session setting button invoke onChangeRecoveryKeyClicked`() {
val eventsRecorder = EventsRecorder<LogoutEvents>(expectEvents = false) val eventsRecorder = EventsRecorder<LogoutEvents>(expectEvents = false)
ensureCalledOnce { callback -> ensureCalledOnce { callback ->
rule.setContent { rule.setLogoutView(
LogoutView( aLogoutState(
aLogoutState( isLastDevice = true,
isLastDevice = true, eventSink = eventsRecorder
eventSink = eventsRecorder ),
), onChangeRecoveryKeyClicked = callback,
onChangeRecoveryKeyClicked = callback, )
onBackClicked = EnsureNeverCalled(),
onSuccessLogout = EnsureNeverCalledWithParam(),
)
}
rule.clickOn(CommonStrings.common_settings) rule.clickOn(CommonStrings.common_settings)
} }
} }
} }
private fun <R : TestRule> AndroidComposeTestRule<R, ComponentActivity>.setLogoutView(
state: LogoutState,
onChangeRecoveryKeyClicked: () -> Unit = EnsureNeverCalled(),
onBackClicked: () -> Unit = EnsureNeverCalled(),
onSuccessLogout: (logoutUrlResult: String?) -> Unit = EnsureNeverCalledWithParam()
) {
setContent {
LogoutView(
state = state,
onChangeRecoveryKeyClicked = onChangeRecoveryKeyClicked,
onBackClicked = onBackClicked,
onSuccessLogout = onSuccessLogout,
)
}
}

Loading…
Cancel
Save