BlockedUsersEvents -> BlockedUsersEvent

This commit is contained in:
Benoit Marty
2026-08-25 10:08:17 +02:00
parent e6be199d4a
commit d8e7031709
7 changed files with 35 additions and 35 deletions
@@ -10,9 +10,9 @@ package io.element.android.features.preferences.impl.blockedusers
import io.element.android.libraries.matrix.api.core.UserId
sealed interface BlockedUsersEvents {
data class Unblock(val userId: UserId) : BlockedUsersEvents
data class CopyToClipboard(val userId: UserId) : BlockedUsersEvents
data object ConfirmUnblock : BlockedUsersEvents
data object Cancel : BlockedUsersEvents
sealed interface BlockedUsersEvent {
data class Unblock(val userId: UserId) : BlockedUsersEvent
data class CopyToClipboard(val userId: UserId) : BlockedUsersEvent
data object ConfirmUnblock : BlockedUsersEvent
data object Cancel : BlockedUsersEvent
}
@@ -74,23 +74,23 @@ class BlockedUsersPresenter(
val snackbarMessage by snackbarDispatcher.collectSnackbarMessageAsState()
fun handleEvent(event: BlockedUsersEvents) {
fun handleEvent(event: BlockedUsersEvent) {
when (event) {
is BlockedUsersEvents.Unblock -> {
is BlockedUsersEvent.Unblock -> {
pendingUserToUnblock = event.userId
unblockUserAction.value = AsyncAction.ConfirmingNoParams
}
is BlockedUsersEvents.CopyToClipboard -> {
is BlockedUsersEvent.CopyToClipboard -> {
clipboardHelper.copyPlainText(event.userId.value)
snackbarDispatcher.post(SnackbarMessage(CommonStrings.common_copied_to_clipboard))
}
BlockedUsersEvents.ConfirmUnblock -> {
BlockedUsersEvent.ConfirmUnblock -> {
pendingUserToUnblock?.let {
coroutineScope.unblockUser(it, unblockUserAction)
pendingUserToUnblock = null
}
}
BlockedUsersEvents.Cancel -> {
BlockedUsersEvent.Cancel -> {
pendingUserToUnblock = null
unblockUserAction.value = AsyncAction.Uninitialized
}
@@ -17,5 +17,5 @@ data class BlockedUsersState(
val blockedUsers: ImmutableList<MatrixUser>,
val unblockUserAction: AsyncAction<Unit>,
val snackbarMessage: SnackbarMessage?,
val eventSink: (BlockedUsersEvents) -> Unit,
val eventSink: (BlockedUsersEvent) -> Unit,
)
@@ -32,7 +32,7 @@ internal fun aBlockedUsersState(
blockedUsers: List<MatrixUser> = aMatrixUserList(),
unblockUserAction: AsyncAction<Unit> = AsyncAction.Uninitialized,
snackbarMessage: SnackbarMessage? = null,
eventSink: (BlockedUsersEvents) -> Unit = {},
eventSink: (BlockedUsersEvent) -> Unit = {},
): BlockedUsersState {
return BlockedUsersState(
blockedUsers = blockedUsers.toImmutableList(),
@@ -64,8 +64,8 @@ fun BlockedUsersView(
items(state.blockedUsers) { matrixUser ->
BlockedUserItem(
matrixUser = matrixUser,
onClick = { state.eventSink(BlockedUsersEvents.Unblock(it)) },
onLongClick = { state.eventSink(BlockedUsersEvents.CopyToClipboard(it)) },
onClick = { state.eventSink(BlockedUsersEvent.Unblock(it)) },
onLongClick = { state.eventSink(BlockedUsersEvent.CopyToClipboard(it)) },
)
}
}
@@ -99,8 +99,8 @@ fun BlockedUsersView(
title = stringResource(R.string.screen_blocked_users_unblock_alert_title),
content = stringResource(R.string.screen_blocked_users_unblock_alert_description),
submitText = stringResource(R.string.screen_blocked_users_unblock_alert_action),
onSubmitClick = { state.eventSink(BlockedUsersEvents.ConfirmUnblock) },
onDismiss = { state.eventSink(BlockedUsersEvents.Cancel) }
onSubmitClick = { state.eventSink(BlockedUsersEvent.ConfirmUnblock) },
onDismiss = { state.eventSink(BlockedUsersEvent.Cancel) }
)
}
else -> Unit
@@ -33,7 +33,7 @@ import org.junit.Test
class BlockedUserViewTest : RobolectricTest() {
@Test
fun `clicking on back invokes back callback`() = runAndroidComposeUiTest {
val eventsRecorder = EventsRecorder<BlockedUsersEvents>(expectEvents = false)
val eventsRecorder = EventsRecorder<BlockedUsersEvent>(expectEvents = false)
ensureCalledOnce { callback ->
setBlockedUsersView(
aBlockedUsersState(
@@ -47,7 +47,7 @@ class BlockedUserViewTest : RobolectricTest() {
@Test
fun `clicking on a user emits the expected Event`() = runAndroidComposeUiTest {
val eventsRecorder = EventsRecorder<BlockedUsersEvents>()
val eventsRecorder = EventsRecorder<BlockedUsersEvent>()
val userList = aMatrixUserList()
setBlockedUsersView(
aBlockedUsersState(
@@ -56,12 +56,12 @@ class BlockedUserViewTest : RobolectricTest() {
),
)
onNodeWithText(userList.first().displayName.orEmpty()).performClick()
eventsRecorder.assertSingle(BlockedUsersEvents.Unblock(userList.first().userId))
eventsRecorder.assertSingle(BlockedUsersEvent.Unblock(userList.first().userId))
}
@Test
fun `long clicking on a user emits the expected Event`() = runAndroidComposeUiTest {
val eventsRecorder = EventsRecorder<BlockedUsersEvents>()
val eventsRecorder = EventsRecorder<BlockedUsersEvent>()
val userList = aMatrixUserList()
setBlockedUsersView(
aBlockedUsersState(
@@ -70,12 +70,12 @@ class BlockedUserViewTest : RobolectricTest() {
),
)
onNodeWithText(userList.first().displayName.orEmpty()).performTouchInput { longClick() }
eventsRecorder.assertSingle(BlockedUsersEvents.CopyToClipboard(userList.first().userId))
eventsRecorder.assertSingle(BlockedUsersEvent.CopyToClipboard(userList.first().userId))
}
@Test
fun `clicking on cancel sends a BlockedUsersEvents`() = runAndroidComposeUiTest {
val eventsRecorder = EventsRecorder<BlockedUsersEvents>()
fun `clicking on cancel sends a BlockedUsersEvent`() = runAndroidComposeUiTest {
val eventsRecorder = EventsRecorder<BlockedUsersEvent>()
setBlockedUsersView(
aBlockedUsersState(
unblockUserAction = AsyncAction.ConfirmingNoParams,
@@ -83,12 +83,12 @@ class BlockedUserViewTest : RobolectricTest() {
),
)
clickOn(CommonStrings.action_cancel)
eventsRecorder.assertSingle(BlockedUsersEvents.Cancel)
eventsRecorder.assertSingle(BlockedUsersEvent.Cancel)
}
@Test
fun `clicking on confirm sends a BlockedUsersEvents`() = runAndroidComposeUiTest {
val eventsRecorder = EventsRecorder<BlockedUsersEvents>()
fun `clicking on confirm sends a BlockedUsersEvent`() = runAndroidComposeUiTest {
val eventsRecorder = EventsRecorder<BlockedUsersEvent>()
setBlockedUsersView(
aBlockedUsersState(
unblockUserAction = AsyncAction.ConfirmingNoParams,
@@ -96,7 +96,7 @@ class BlockedUserViewTest : RobolectricTest() {
),
)
clickOn(R.string.screen_blocked_users_unblock_alert_action)
eventsRecorder.assertSingle(BlockedUsersEvents.ConfirmUnblock)
eventsRecorder.assertSingle(BlockedUsersEvent.ConfirmUnblock)
}
}
@@ -118,10 +118,10 @@ class BlockedUsersPresenterTest {
presenter.present()
}.test {
val initialState = awaitItem()
initialState.eventSink(BlockedUsersEvents.Unblock(A_USER_ID))
initialState.eventSink(BlockedUsersEvent.Unblock(A_USER_ID))
assertThat(awaitItem().unblockUserAction).isInstanceOf(AsyncAction.Confirming::class.java)
initialState.eventSink(BlockedUsersEvents.ConfirmUnblock)
initialState.eventSink(BlockedUsersEvent.ConfirmUnblock)
assertThat(awaitItem().unblockUserAction).isInstanceOf(AsyncAction.Loading::class.java)
assertThat(awaitItem().unblockUserAction).isInstanceOf(AsyncAction.Success::class.java)
@@ -141,10 +141,10 @@ class BlockedUsersPresenterTest {
presenter.present()
}.test {
val initialState = awaitItem()
initialState.eventSink(BlockedUsersEvents.Unblock(A_USER_ID))
initialState.eventSink(BlockedUsersEvent.Unblock(A_USER_ID))
assertThat(awaitItem().unblockUserAction).isInstanceOf(AsyncAction.Confirming::class.java)
initialState.eventSink(BlockedUsersEvents.ConfirmUnblock)
initialState.eventSink(BlockedUsersEvent.ConfirmUnblock)
assertThat(awaitItem().unblockUserAction).isInstanceOf(AsyncAction.Loading::class.java)
assertThat(awaitItem().unblockUserAction).isInstanceOf(AsyncAction.Failure::class.java)
@@ -163,10 +163,10 @@ class BlockedUsersPresenterTest {
presenter.present()
}.test {
val initialState = awaitItem()
initialState.eventSink(BlockedUsersEvents.Unblock(A_USER_ID))
initialState.eventSink(BlockedUsersEvent.Unblock(A_USER_ID))
assertThat(awaitItem().unblockUserAction).isInstanceOf(AsyncAction.Confirming::class.java)
initialState.eventSink(BlockedUsersEvents.Cancel)
initialState.eventSink(BlockedUsersEvent.Cancel)
assertThat(awaitItem().unblockUserAction).isEqualTo(AsyncAction.Uninitialized)
}
@@ -187,7 +187,7 @@ class BlockedUsersPresenterTest {
}.test {
val initialState = awaitItem()
assertThat(initialState.snackbarMessage).isNull()
initialState.eventSink(BlockedUsersEvents.CopyToClipboard(A_USER_ID))
initialState.eventSink(BlockedUsersEvent.CopyToClipboard(A_USER_ID))
assertThat(clipboardHelper.clipboardContents).isEqualTo(A_USER_ID.value)
assertThat(awaitItem().snackbarMessage?.messageResId).isEqualTo(CommonStrings.common_copied_to_clipboard)
@@ -201,7 +201,7 @@ class BlockedUsersPresenterTest {
moleculeFlow(RecompositionMode.Immediate) {
presenter.present()
}.test {
awaitItem().eventSink(BlockedUsersEvents.ConfirmUnblock)
awaitItem().eventSink(BlockedUsersEvent.ConfirmUnblock)
ensureAllEventsConsumed()
}
}