KnockRequestsBannerEvents -> KnockRequestsBannerEvent

This commit is contained in:
Benoit Marty
2026-08-25 09:58:15 +02:00
parent 19221a8042
commit 7da820464f
7 changed files with 19 additions and 19 deletions
@@ -8,7 +8,7 @@
package io.element.android.features.knockrequests.impl.banner package io.element.android.features.knockrequests.impl.banner
sealed interface KnockRequestsBannerEvents { sealed interface KnockRequestsBannerEvent {
data object AcceptSingleRequest : KnockRequestsBannerEvents data object AcceptSingleRequest : KnockRequestsBannerEvent
data object Dismiss : KnockRequestsBannerEvents data object Dismiss : KnockRequestsBannerEvent
} }
@@ -53,15 +53,15 @@ class KnockRequestsBannerPresenter(
} }
} }
fun handleEvent(event: KnockRequestsBannerEvents) { fun handleEvent(event: KnockRequestsBannerEvent) {
when (event) { when (event) {
is KnockRequestsBannerEvents.AcceptSingleRequest -> { is KnockRequestsBannerEvent.AcceptSingleRequest -> {
sessionCoroutineScope.acceptSingleKnockRequest( sessionCoroutineScope.acceptSingleKnockRequest(
knockRequests = knockRequests, knockRequests = knockRequests,
displayAcceptError = showAcceptError, displayAcceptError = showAcceptError,
) )
} }
is KnockRequestsBannerEvents.Dismiss -> { is KnockRequestsBannerEvent.Dismiss -> {
sessionCoroutineScope.launch { sessionCoroutineScope.launch {
knockRequestsService.markAllKnockRequestsAsSeen() knockRequestsService.markAllKnockRequestsAsSeen()
} }
@@ -20,7 +20,7 @@ data class KnockRequestsBannerState(
val knockRequests: ImmutableList<KnockRequestPresentable>, val knockRequests: ImmutableList<KnockRequestPresentable>,
val displayAcceptError: Boolean, val displayAcceptError: Boolean,
val canAccept: Boolean, val canAccept: Boolean,
val eventSink: (KnockRequestsBannerEvents) -> Unit, val eventSink: (KnockRequestsBannerEvent) -> Unit,
) { ) {
val subtitle = knockRequests.singleOrNull()?.userId?.value val subtitle = knockRequests.singleOrNull()?.userId?.value
val reason = knockRequests.singleOrNull()?.reason val reason = knockRequests.singleOrNull()?.reason
@@ -64,7 +64,7 @@ fun aKnockRequestsBannerState(
displayAcceptError: Boolean = false, displayAcceptError: Boolean = false,
canAccept: Boolean = true, canAccept: Boolean = true,
isVisible: Boolean = true, isVisible: Boolean = true,
eventSink: (KnockRequestsBannerEvents) -> Unit = {} eventSink: (KnockRequestsBannerEvent) -> Unit = {}
) = KnockRequestsBannerState( ) = KnockRequestsBannerState(
knockRequests = knockRequests.toImmutableList(), knockRequests = knockRequests.toImmutableList(),
displayAcceptError = displayAcceptError, displayAcceptError = displayAcceptError,
@@ -109,11 +109,11 @@ private fun KnockRequestsBannerContent(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
) { ) {
fun onDismissClick() { fun onDismissClick() {
state.eventSink(KnockRequestsBannerEvents.Dismiss) state.eventSink(KnockRequestsBannerEvent.Dismiss)
} }
fun onAcceptClick() { fun onAcceptClick() {
state.eventSink(KnockRequestsBannerEvents.AcceptSingleRequest) state.eventSink(KnockRequestsBannerEvent.AcceptSingleRequest)
} }
Column( Column(
@@ -146,7 +146,7 @@ import org.junit.Test
presenter.test { presenter.test {
skipItems(2) skipItems(2)
awaitItem().also { state -> awaitItem().also { state ->
state.eventSink(KnockRequestsBannerEvents.AcceptSingleRequest) state.eventSink(KnockRequestsBannerEvent.AcceptSingleRequest)
} }
awaitItem().also { state -> awaitItem().also { state ->
assertThat(state.isVisible).isFalse() assertThat(state.isVisible).isFalse()
@@ -182,7 +182,7 @@ import org.junit.Test
skipItems(2) skipItems(2)
awaitItem().also { state -> awaitItem().also { state ->
assertThat(state.knockRequests).hasSize(1) assertThat(state.knockRequests).hasSize(1)
state.eventSink(KnockRequestsBannerEvents.AcceptSingleRequest) state.eventSink(KnockRequestsBannerEvent.AcceptSingleRequest)
} }
awaitItem().also { state -> awaitItem().also { state ->
assertThat(state.isVisible).isFalse() assertThat(state.isVisible).isFalse()
@@ -206,7 +206,7 @@ import org.junit.Test
presenter.test { presenter.test {
skipItems(2) skipItems(2)
awaitItem().also { state -> awaitItem().also { state ->
state.eventSink(KnockRequestsBannerEvents.Dismiss) state.eventSink(KnockRequestsBannerEvent.Dismiss)
} }
advanceUntilIdle() advanceUntilIdle()
assert(markAsSeenLambda).isCalledExactly(3) assert(markAsSeenLambda).isCalledExactly(3)
@@ -29,7 +29,7 @@ import org.junit.Test
class KnockRequestsBannerViewTest : RobolectricTest() { class KnockRequestsBannerViewTest : RobolectricTest() {
@Test @Test
fun `clicking on view on single request invoke the expected callback`() = runAndroidComposeUiTest { fun `clicking on view on single request invoke the expected callback`() = runAndroidComposeUiTest {
val eventsRecorder = EventsRecorder<KnockRequestsBannerEvents>(expectEvents = false) val eventsRecorder = EventsRecorder<KnockRequestsBannerEvent>(expectEvents = false)
ensureCalledOnce { ensureCalledOnce {
setKnockRequestsBannerView( setKnockRequestsBannerView(
state = aKnockRequestsBannerState( state = aKnockRequestsBannerState(
@@ -43,7 +43,7 @@ class KnockRequestsBannerViewTest : RobolectricTest() {
@Test @Test
fun `clicking on view all when multiple requests invoke the expected callback`() = runAndroidComposeUiTest { fun `clicking on view all when multiple requests invoke the expected callback`() = runAndroidComposeUiTest {
val eventsRecorder = EventsRecorder<KnockRequestsBannerEvents>(expectEvents = false) val eventsRecorder = EventsRecorder<KnockRequestsBannerEvent>(expectEvents = false)
ensureCalledOnce { ensureCalledOnce {
setKnockRequestsBannerView( setKnockRequestsBannerView(
state = aKnockRequestsBannerState( state = aKnockRequestsBannerState(
@@ -62,19 +62,19 @@ class KnockRequestsBannerViewTest : RobolectricTest() {
@Test @Test
fun `clicking on accept on a single request emit the expected event`() = runAndroidComposeUiTest { fun `clicking on accept on a single request emit the expected event`() = runAndroidComposeUiTest {
val eventsRecorder = EventsRecorder<KnockRequestsBannerEvents>() val eventsRecorder = EventsRecorder<KnockRequestsBannerEvent>()
setKnockRequestsBannerView( setKnockRequestsBannerView(
state = aKnockRequestsBannerState( state = aKnockRequestsBannerState(
eventSink = eventsRecorder, eventSink = eventsRecorder,
), ),
) )
clickOn(CommonStrings.action_accept) clickOn(CommonStrings.action_accept)
eventsRecorder.assertSingle(KnockRequestsBannerEvents.AcceptSingleRequest) eventsRecorder.assertSingle(KnockRequestsBannerEvent.AcceptSingleRequest)
} }
@Test @Test
fun `clicking on dismiss emit the expected event`() = runAndroidComposeUiTest { fun `clicking on dismiss emit the expected event`() = runAndroidComposeUiTest {
val eventsRecorder = EventsRecorder<KnockRequestsBannerEvents>() val eventsRecorder = EventsRecorder<KnockRequestsBannerEvent>()
setKnockRequestsBannerView( setKnockRequestsBannerView(
state = aKnockRequestsBannerState( state = aKnockRequestsBannerState(
eventSink = eventsRecorder, eventSink = eventsRecorder,
@@ -82,7 +82,7 @@ class KnockRequestsBannerViewTest : RobolectricTest() {
) )
val close = activity!!.getString(CommonStrings.action_close) val close = activity!!.getString(CommonStrings.action_close)
onNodeWithContentDescription(close).performClick() onNodeWithContentDescription(close).performClick()
eventsRecorder.assertSingle(KnockRequestsBannerEvents.Dismiss) eventsRecorder.assertSingle(KnockRequestsBannerEvent.Dismiss)
} }
} }