mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-11-02 21:05:28 +00:00
ReportRoomEvents -> ReportRoomEvent
This commit is contained in:
+5
-5
@@ -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
|
||||
}
|
||||
+5
-5
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -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()
|
||||
}
|
||||
|
||||
+1
-1
@@ -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,
|
||||
|
||||
+5
-5
@@ -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()
|
||||
|
||||
+8
-8
@@ -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)
|
||||
|
||||
+8
-8
@@ -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!"))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user