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