ReportRoomEvents -> ReportRoomEvent

This commit is contained in:
Benoit Marty
2026-08-25 10:14:32 +02:00
parent 859b0e1b60
commit fc8d3b3065
7 changed files with 33 additions and 33 deletions
@@ -8,9 +8,9 @@
package io.element.android.features.reportroom.impl
sealed interface ReportRoomEvents {
data class UpdateReason(val reason: String) : ReportRoomEvents
data object ToggleLeaveRoom : ReportRoomEvents
data object Report : ReportRoomEvents
data object ClearReportAction : ReportRoomEvents
sealed interface ReportRoomEvent {
data class UpdateReason(val reason: String) : ReportRoomEvent
data object ToggleLeaveRoom : ReportRoomEvent
data object Report : ReportRoomEvent
data object ClearReportAction : ReportRoomEvent
}
@@ -44,16 +44,16 @@ class ReportRoomPresenter(
val coroutineScope = rememberCoroutineScope()
fun handleEvent(event: ReportRoomEvents) {
fun handleEvent(event: ReportRoomEvent) {
when (event) {
ReportRoomEvents.Report -> coroutineScope.reportRoom(reason, leaveRoom, reportAction)
ReportRoomEvents.ToggleLeaveRoom -> {
ReportRoomEvent.Report -> coroutineScope.reportRoom(reason, leaveRoom, reportAction)
ReportRoomEvent.ToggleLeaveRoom -> {
leaveRoom = !leaveRoom
}
is ReportRoomEvents.UpdateReason -> {
is ReportRoomEvent.UpdateReason -> {
reason = event.reason
}
ReportRoomEvents.ClearReportAction -> {
ReportRoomEvent.ClearReportAction -> {
reportAction.value = AsyncAction.Uninitialized
}
}
@@ -14,7 +14,7 @@ data class ReportRoomState(
val reason: String,
val leaveRoom: Boolean,
val reportAction: AsyncAction<Unit>,
val eventSink: (ReportRoomEvents) -> Unit
val eventSink: (ReportRoomEvent) -> Unit
) {
val canReport: Boolean = reason.isNotBlank()
}
@@ -30,7 +30,7 @@ fun aReportRoomState(
reason: String = "",
leaveRoom: Boolean = false,
reportAction: AsyncAction<Unit> = AsyncAction.Uninitialized,
eventSink: (ReportRoomEvents) -> Unit = {}
eventSink: (ReportRoomEvent) -> Unit = {}
) = ReportRoomState(
reason = reason,
leaveRoom = leaveRoom,
@@ -66,9 +66,9 @@ fun ReportRoomView(
}
},
onRetry = {
state.eventSink(ReportRoomEvents.Report)
state.eventSink(ReportRoomEvent.Report)
},
onErrorDismiss = { state.eventSink(ReportRoomEvents.ClearReportAction) }
onErrorDismiss = { state.eventSink(ReportRoomEvent.ClearReportAction) }
)
Scaffold(
@@ -93,7 +93,7 @@ fun ReportRoomView(
) {
TextField(
value = state.reason,
onValueChange = { state.eventSink(ReportRoomEvents.UpdateReason(it)) },
onValueChange = { state.eventSink(ReportRoomEvent.UpdateReason(it)) },
placeholder = stringResource(R.string.screen_report_room_reason_placeholder),
minLines = 3,
enabled = !isReporting,
@@ -112,7 +112,7 @@ fun ReportRoomView(
Text(text = stringResource(CommonStrings.action_leave_room))
},
onClick = {
state.eventSink(ReportRoomEvents.ToggleLeaveRoom)
state.eventSink(ReportRoomEvent.ToggleLeaveRoom)
},
trailingContent = ListItemContent.Switch(checked = state.leaveRoom)
)
@@ -126,7 +126,7 @@ fun ReportRoomView(
showProgress = isReporting,
onClick = {
focusManager.clearFocus(force = true)
state.eventSink(ReportRoomEvents.Report)
state.eventSink(ReportRoomEvent.Report)
},
modifier = Modifier
.fillMaxWidth()
@@ -43,13 +43,13 @@ class ReportRoomPresenterTest {
assertThat(state.reason).isEmpty()
assertThat(state.canReport).isFalse()
assertThat(state.leaveRoom).isFalse()
state.eventSink(ReportRoomEvents.UpdateReason("Spam"))
state.eventSink(ReportRoomEvent.UpdateReason("Spam"))
}
awaitItem().also { state ->
assertThat(state.reason).isEqualTo("Spam")
assertThat(state.canReport).isTrue()
assertThat(state.leaveRoom).isFalse()
state.eventSink(ReportRoomEvents.ToggleLeaveRoom)
state.eventSink(ReportRoomEvent.ToggleLeaveRoom)
}
awaitItem().also { state ->
assertThat(state.leaveRoom).isTrue()
@@ -68,8 +68,8 @@ class ReportRoomPresenterTest {
)
val presenter = createReportRoomPresenter(roomId = roomId, reportRoom = reportRoom)
presenter.test {
awaitItem().eventSink(ReportRoomEvents.ToggleLeaveRoom)
awaitItem().eventSink(ReportRoomEvents.Report)
awaitItem().eventSink(ReportRoomEvent.ToggleLeaveRoom)
awaitItem().eventSink(ReportRoomEvent.Report)
awaitItem().also { state ->
assertThat(state.reportAction).isInstanceOf(AsyncAction.Loading::class.java)
}
@@ -93,7 +93,7 @@ class ReportRoomPresenterTest {
)
val presenter = createReportRoomPresenter(roomId = roomId, reportRoom = reportRoom)
presenter.test {
awaitItem().eventSink(ReportRoomEvents.Report)
awaitItem().eventSink(ReportRoomEvent.Report)
awaitItem().also { state ->
assertThat(state.reportAction).isInstanceOf(AsyncAction.Loading::class.java)
}
@@ -117,14 +117,14 @@ class ReportRoomPresenterTest {
)
val presenter = createReportRoomPresenter(roomId = roomId, reportRoom = reportRoom)
presenter.test {
awaitItem().eventSink(ReportRoomEvents.ToggleLeaveRoom)
awaitItem().eventSink(ReportRoomEvents.Report)
awaitItem().eventSink(ReportRoomEvent.ToggleLeaveRoom)
awaitItem().eventSink(ReportRoomEvent.Report)
awaitItem().also { state ->
assertThat(state.reportAction).isInstanceOf(AsyncAction.Loading::class.java)
}
awaitItem().also { state ->
assertThat(state.reportAction).isInstanceOf(AsyncAction.Failure::class.java)
state.eventSink(ReportRoomEvents.Report)
state.eventSink(ReportRoomEvent.Report)
}
awaitItem().also { state ->
assertThat(state.reportAction).isInstanceOf(AsyncAction.Loading::class.java)
@@ -28,7 +28,7 @@ import org.junit.Test
class ReportRoomViewTest : RobolectricTest() {
@Test
fun `clicking on back invoke the expected callback`() = runAndroidComposeUiTest {
val eventsRecorder = EventsRecorder<ReportRoomEvents>(expectEvents = false)
val eventsRecorder = EventsRecorder<ReportRoomEvent>(expectEvents = false)
ensureCalledOnce {
setReportRoomView(
aReportRoomState(
@@ -42,7 +42,7 @@ class ReportRoomViewTest : RobolectricTest() {
@Test
fun `clicking on report when enabled emits the expected event`() = runAndroidComposeUiTest {
val eventsRecorder = EventsRecorder<ReportRoomEvents>()
val eventsRecorder = EventsRecorder<ReportRoomEvent>()
setReportRoomView(
aReportRoomState(
reason = "Spam",
@@ -50,12 +50,12 @@ class ReportRoomViewTest : RobolectricTest() {
),
)
clickOn(CommonStrings.action_report)
eventsRecorder.assertSingle(ReportRoomEvents.Report)
eventsRecorder.assertSingle(ReportRoomEvent.Report)
}
@Test
fun `clicking on decline when disabled does not emit event`() = runAndroidComposeUiTest {
val eventsRecorder = EventsRecorder<ReportRoomEvents>(expectEvents = false)
val eventsRecorder = EventsRecorder<ReportRoomEvent>(expectEvents = false)
setReportRoomView(
aReportRoomState(eventSink = eventsRecorder),
)
@@ -64,17 +64,17 @@ class ReportRoomViewTest : RobolectricTest() {
@Test
fun `clicking on leave room option emits the expected event`() = runAndroidComposeUiTest {
val eventsRecorder = EventsRecorder<ReportRoomEvents>()
val eventsRecorder = EventsRecorder<ReportRoomEvent>()
setReportRoomView(
aReportRoomState(eventSink = eventsRecorder),
)
clickOn(CommonStrings.action_leave_room)
eventsRecorder.assertSingle(ReportRoomEvents.ToggleLeaveRoom)
eventsRecorder.assertSingle(ReportRoomEvent.ToggleLeaveRoom)
}
@Test
fun `typing text in the reason field emits the expected Event`() = runAndroidComposeUiTest {
val eventsRecorder = EventsRecorder<ReportRoomEvents>()
val eventsRecorder = EventsRecorder<ReportRoomEvent>()
setReportRoomView(
aReportRoomState(
eventSink = eventsRecorder,
@@ -82,7 +82,7 @@ class ReportRoomViewTest : RobolectricTest() {
),
)
onNodeWithText("").performTextInput("Spam!")
eventsRecorder.assertSingle(ReportRoomEvents.UpdateReason("Spam!"))
eventsRecorder.assertSingle(ReportRoomEvent.UpdateReason("Spam!"))
}
}