EditRoomAddressEvents -> EditRoomAddressEvent

This commit is contained in:
Benoit Marty
2026-08-25 10:23:12 +02:00
parent b8b6dc1df6
commit deb08a3a6c
7 changed files with 36 additions and 36 deletions
@@ -8,8 +8,8 @@
package io.element.android.features.securityandprivacy.impl.editroomaddress package io.element.android.features.securityandprivacy.impl.editroomaddress
sealed interface EditRoomAddressEvents { sealed interface EditRoomAddressEvent {
data object Save : EditRoomAddressEvents data object Save : EditRoomAddressEvent
data object DismissError : EditRoomAddressEvents data object DismissError : EditRoomAddressEvent
data class RoomAddressChanged(val roomAddress: String) : EditRoomAddressEvents data class RoomAddressChanged(val roomAddress: String) : EditRoomAddressEvent
} }
@@ -63,17 +63,17 @@ class EditRoomAddressPresenter(
) )
} }
fun handleEvent(event: EditRoomAddressEvents) { fun handleEvent(event: EditRoomAddressEvent) {
when (event) { when (event) {
EditRoomAddressEvents.Save -> coroutineScope.save( EditRoomAddressEvent.Save -> coroutineScope.save(
saveAction = saveAction, saveAction = saveAction,
serverName = homeserverName, serverName = homeserverName,
newRoomAddress = newRoomAddress newRoomAddress = newRoomAddress
) )
is EditRoomAddressEvents.RoomAddressChanged -> { is EditRoomAddressEvent.RoomAddressChanged -> {
newRoomAddress = event.roomAddress newRoomAddress = event.roomAddress
} }
EditRoomAddressEvents.DismissError -> { EditRoomAddressEvent.DismissError -> {
saveAction.value = AsyncAction.Uninitialized saveAction.value = AsyncAction.Uninitialized
} }
} }
@@ -16,7 +16,7 @@ data class EditRoomAddressState(
val roomAddress: String, val roomAddress: String,
val roomAddressValidity: RoomAddressValidity, val roomAddressValidity: RoomAddressValidity,
val saveAction: AsyncAction<Unit>, val saveAction: AsyncAction<Unit>,
val eventSink: (EditRoomAddressEvents) -> Unit val eventSink: (EditRoomAddressEvent) -> Unit
) { ) {
val canBeSaved = roomAddressValidity == RoomAddressValidity.Valid val canBeSaved = roomAddressValidity == RoomAddressValidity.Valid
} }
@@ -28,7 +28,7 @@ fun anEditRoomAddressState(
roomAddressValidity: RoomAddressValidity = RoomAddressValidity.Unknown, roomAddressValidity: RoomAddressValidity = RoomAddressValidity.Unknown,
homeserverName: String = ":myserver.org", homeserverName: String = ":myserver.org",
saveAction: AsyncAction<Unit> = AsyncAction.Uninitialized, saveAction: AsyncAction<Unit> = AsyncAction.Uninitialized,
eventSink: (EditRoomAddressEvents) -> Unit = {} eventSink: (EditRoomAddressEvent) -> Unit = {}
) = EditRoomAddressState( ) = EditRoomAddressState(
roomAddress = roomAddress, roomAddress = roomAddress,
roomAddressValidity = roomAddressValidity, roomAddressValidity = roomAddressValidity,
@@ -46,7 +46,7 @@ fun EditRoomAddressView(
isSaveActionEnabled = state.canBeSaved, isSaveActionEnabled = state.canBeSaved,
onBackClick = onBackClick, onBackClick = onBackClick,
onSaveClick = { onSaveClick = {
state.eventSink(EditRoomAddressEvents.Save) state.eventSink(EditRoomAddressEvent.Save)
}, },
) )
} }
@@ -63,7 +63,7 @@ fun EditRoomAddressView(
homeserverName = state.homeserverName, homeserverName = state.homeserverName,
addressValidity = state.roomAddressValidity, addressValidity = state.roomAddressValidity,
onAddressChange = { onAddressChange = {
state.eventSink(EditRoomAddressEvents.RoomAddressChanged(it)) state.eventSink(EditRoomAddressEvent.RoomAddressChanged(it))
}, },
label = stringResource(R.string.screen_edit_room_address_title), label = stringResource(R.string.screen_edit_room_address_title),
supportingText = stringResource(R.string.screen_edit_room_address_room_address_section_footer), supportingText = stringResource(R.string.screen_edit_room_address_room_address_section_footer),
@@ -81,8 +81,8 @@ fun EditRoomAddressView(
}, },
onSuccess = {}, onSuccess = {},
errorMessage = { stringResource(CommonStrings.error_unknown) }, errorMessage = { stringResource(CommonStrings.error_unknown) },
onRetry = { state.eventSink(EditRoomAddressEvents.Save) }, onRetry = { state.eventSink(EditRoomAddressEvent.Save) },
onErrorDismiss = { state.eventSink(EditRoomAddressEvents.DismissError) }, onErrorDismiss = { state.eventSink(EditRoomAddressEvent.DismissError) },
) )
} }
} }
@@ -97,7 +97,7 @@ class EditRoomAddressPresenterTest {
val presenter = createEditRoomAddressPresenter(roomAliasHelper = roomAliasHelper) val presenter = createEditRoomAddressPresenter(roomAliasHelper = roomAliasHelper)
presenter.test { presenter.test {
with(awaitItem()) { with(awaitItem()) {
eventSink(EditRoomAddressEvents.RoomAddressChanged("invalid")) eventSink(EditRoomAddressEvent.RoomAddressChanged("invalid"))
} }
with(awaitItem()) { with(awaitItem()) {
assertThat(roomAddress).isEqualTo("invalid") assertThat(roomAddress).isEqualTo("invalid")
@@ -115,7 +115,7 @@ class EditRoomAddressPresenterTest {
val presenter = createEditRoomAddressPresenter() val presenter = createEditRoomAddressPresenter()
presenter.test { presenter.test {
with(awaitItem()) { with(awaitItem()) {
eventSink(EditRoomAddressEvents.RoomAddressChanged("valid")) eventSink(EditRoomAddressEvent.RoomAddressChanged("valid"))
} }
with(awaitItem()) { with(awaitItem()) {
assertThat(roomAddress).isEqualTo("valid") assertThat(roomAddress).isEqualTo("valid")
@@ -134,7 +134,7 @@ class EditRoomAddressPresenterTest {
val presenter = createEditRoomAddressPresenter(client = client) val presenter = createEditRoomAddressPresenter(client = client)
presenter.test { presenter.test {
with(awaitItem()) { with(awaitItem()) {
eventSink(EditRoomAddressEvents.RoomAddressChanged("valid")) eventSink(EditRoomAddressEvent.RoomAddressChanged("valid"))
} }
with(awaitItem()) { with(awaitItem()) {
assertThat(roomAddress).isEqualTo("valid") assertThat(roomAddress).isEqualTo("valid")
@@ -163,13 +163,13 @@ class EditRoomAddressPresenterTest {
val presenter = createEditRoomAddressPresenter(room = room, navigator = navigator) val presenter = createEditRoomAddressPresenter(room = room, navigator = navigator)
presenter.test { presenter.test {
with(awaitItem()) { with(awaitItem()) {
eventSink(EditRoomAddressEvents.RoomAddressChanged("valid")) eventSink(EditRoomAddressEvent.RoomAddressChanged("valid"))
} }
skipItems(1) skipItems(1)
with(awaitItem()) { with(awaitItem()) {
assertThat(roomAddressValidity).isEqualTo(RoomAddressValidity.Valid) assertThat(roomAddressValidity).isEqualTo(RoomAddressValidity.Valid)
assertThat(canBeSaved).isTrue() assertThat(canBeSaved).isTrue()
eventSink(EditRoomAddressEvents.Save) eventSink(EditRoomAddressEvent.Save)
} }
with(awaitItem()) { with(awaitItem()) {
assertThat(saveAction).isEqualTo(AsyncAction.Loading) assertThat(saveAction).isEqualTo(AsyncAction.Loading)
@@ -212,13 +212,13 @@ class EditRoomAddressPresenterTest {
val presenter = createEditRoomAddressPresenter(room = room, navigator = navigator) val presenter = createEditRoomAddressPresenter(room = room, navigator = navigator)
presenter.test { presenter.test {
with(awaitItem()) { with(awaitItem()) {
eventSink(EditRoomAddressEvents.RoomAddressChanged("valid")) eventSink(EditRoomAddressEvent.RoomAddressChanged("valid"))
} }
skipItems(1) skipItems(1)
with(awaitItem()) { with(awaitItem()) {
assertThat(roomAddressValidity).isEqualTo(RoomAddressValidity.Valid) assertThat(roomAddressValidity).isEqualTo(RoomAddressValidity.Valid)
assertThat(canBeSaved).isTrue() assertThat(canBeSaved).isTrue()
eventSink(EditRoomAddressEvents.Save) eventSink(EditRoomAddressEvent.Save)
} }
with(awaitItem()) { with(awaitItem()) {
assertThat(saveAction).isEqualTo(AsyncAction.Loading) assertThat(saveAction).isEqualTo(AsyncAction.Loading)
@@ -263,13 +263,13 @@ class EditRoomAddressPresenterTest {
val presenter = createEditRoomAddressPresenter(room = room, navigator = navigator) val presenter = createEditRoomAddressPresenter(room = room, navigator = navigator)
presenter.test { presenter.test {
with(awaitItem()) { with(awaitItem()) {
eventSink(EditRoomAddressEvents.RoomAddressChanged("valid")) eventSink(EditRoomAddressEvent.RoomAddressChanged("valid"))
} }
skipItems(1) skipItems(1)
with(awaitItem()) { with(awaitItem()) {
assertThat(roomAddressValidity).isEqualTo(RoomAddressValidity.Valid) assertThat(roomAddressValidity).isEqualTo(RoomAddressValidity.Valid)
assertThat(canBeSaved).isTrue() assertThat(canBeSaved).isTrue()
eventSink(EditRoomAddressEvents.Save) eventSink(EditRoomAddressEvent.Save)
} }
with(awaitItem()) { with(awaitItem()) {
assertThat(saveAction).isEqualTo(AsyncAction.Loading) assertThat(saveAction).isEqualTo(AsyncAction.Loading)
@@ -309,13 +309,13 @@ class EditRoomAddressPresenterTest {
) )
presenter.test { presenter.test {
with(awaitItem()) { with(awaitItem()) {
eventSink(EditRoomAddressEvents.RoomAddressChanged("valid")) eventSink(EditRoomAddressEvent.RoomAddressChanged("valid"))
} }
skipItems(1) skipItems(1)
with(awaitItem()) { with(awaitItem()) {
assertThat(roomAddressValidity).isEqualTo(RoomAddressValidity.Valid) assertThat(roomAddressValidity).isEqualTo(RoomAddressValidity.Valid)
assertThat(canBeSaved).isTrue() assertThat(canBeSaved).isTrue()
eventSink(EditRoomAddressEvents.Save) eventSink(EditRoomAddressEvent.Save)
} }
with(awaitItem()) { with(awaitItem()) {
assertThat(saveAction).isEqualTo(AsyncAction.Loading) assertThat(saveAction).isEqualTo(AsyncAction.Loading)
@@ -339,12 +339,12 @@ class EditRoomAddressPresenterTest {
) )
presenter.test { presenter.test {
with(awaitItem()) { with(awaitItem()) {
eventSink(EditRoomAddressEvents.Save) eventSink(EditRoomAddressEvent.Save)
} }
assertThat(awaitItem().saveAction).isInstanceOf(AsyncAction.Loading::class.java) assertThat(awaitItem().saveAction).isInstanceOf(AsyncAction.Loading::class.java)
with(awaitItem()) { with(awaitItem()) {
assertThat(saveAction).isInstanceOf(AsyncAction.Failure::class.java) assertThat(saveAction).isInstanceOf(AsyncAction.Failure::class.java)
eventSink(EditRoomAddressEvents.DismissError) eventSink(EditRoomAddressEvent.DismissError)
} }
with(awaitItem()) { with(awaitItem()) {
assertThat(saveAction).isEqualTo(AsyncAction.Uninitialized) assertThat(saveAction).isEqualTo(AsyncAction.Uninitialized)
@@ -39,7 +39,7 @@ class EditRoomAddressViewTest : RobolectricTest() {
@Test @Test
fun `click on disabled save doesn't emit event`() = runAndroidComposeUiTest { fun `click on disabled save doesn't emit event`() = runAndroidComposeUiTest {
val recorder = EventsRecorder<EditRoomAddressEvents>(expectEvents = false) val recorder = EventsRecorder<EditRoomAddressEvent>(expectEvents = false)
val state = anEditRoomAddressState(eventSink = recorder) val state = anEditRoomAddressState(eventSink = recorder)
setEditRoomAddressView(state) setEditRoomAddressView(state)
clickOn(CommonStrings.action_save) clickOn(CommonStrings.action_save)
@@ -48,7 +48,7 @@ class EditRoomAddressViewTest : RobolectricTest() {
@Test @Test
fun `click on enabled save emits the expected event`() = runAndroidComposeUiTest { fun `click on enabled save emits the expected event`() = runAndroidComposeUiTest {
val recorder = EventsRecorder<EditRoomAddressEvents>() val recorder = EventsRecorder<EditRoomAddressEvent>()
val state = anEditRoomAddressState( val state = anEditRoomAddressState(
roomAddress = "room", roomAddress = "room",
roomAddressValidity = RoomAddressValidity.Valid, roomAddressValidity = RoomAddressValidity.Valid,
@@ -56,12 +56,12 @@ class EditRoomAddressViewTest : RobolectricTest() {
) )
setEditRoomAddressView(state) setEditRoomAddressView(state)
clickOn(CommonStrings.action_save) clickOn(CommonStrings.action_save)
recorder.assertSingle(EditRoomAddressEvents.Save) recorder.assertSingle(EditRoomAddressEvent.Save)
} }
@Test @Test
fun `text changes on text field emits the expected event`() = runAndroidComposeUiTest { fun `text changes on text field emits the expected event`() = runAndroidComposeUiTest {
val recorder = EventsRecorder<EditRoomAddressEvents>() val recorder = EventsRecorder<EditRoomAddressEvent>()
val state = anEditRoomAddressState( val state = anEditRoomAddressState(
roomAddress = "", roomAddress = "",
eventSink = recorder eventSink = recorder
@@ -69,12 +69,12 @@ class EditRoomAddressViewTest : RobolectricTest() {
setEditRoomAddressView(state) setEditRoomAddressView(state)
onNodeWithTag(TestTags.roomAddressField.value).performTextInput("alias") onNodeWithTag(TestTags.roomAddressField.value).performTextInput("alias")
recorder.assertSingle(EditRoomAddressEvents.RoomAddressChanged("alias")) recorder.assertSingle(EditRoomAddressEvent.RoomAddressChanged("alias"))
} }
@Test @Test
fun `click on dismiss error emits the expected event`() = runAndroidComposeUiTest { fun `click on dismiss error emits the expected event`() = runAndroidComposeUiTest {
val recorder = EventsRecorder<EditRoomAddressEvents>() val recorder = EventsRecorder<EditRoomAddressEvent>()
val state = anEditRoomAddressState( val state = anEditRoomAddressState(
roomAddress = "", roomAddress = "",
saveAction = AsyncAction.Failure(IllegalStateException()), saveAction = AsyncAction.Failure(IllegalStateException()),
@@ -82,12 +82,12 @@ class EditRoomAddressViewTest : RobolectricTest() {
) )
setEditRoomAddressView(state) setEditRoomAddressView(state)
clickOn(CommonStrings.action_cancel) clickOn(CommonStrings.action_cancel)
recorder.assertSingle(EditRoomAddressEvents.DismissError) recorder.assertSingle(EditRoomAddressEvent.DismissError)
} }
@Test @Test
fun `click on retry error emits the expected event`() = runAndroidComposeUiTest { fun `click on retry error emits the expected event`() = runAndroidComposeUiTest {
val recorder = EventsRecorder<EditRoomAddressEvents>() val recorder = EventsRecorder<EditRoomAddressEvent>()
val state = anEditRoomAddressState( val state = anEditRoomAddressState(
roomAddress = "", roomAddress = "",
saveAction = AsyncAction.Failure(IllegalStateException()), saveAction = AsyncAction.Failure(IllegalStateException()),
@@ -95,7 +95,7 @@ class EditRoomAddressViewTest : RobolectricTest() {
) )
setEditRoomAddressView(state) setEditRoomAddressView(state)
clickOn(CommonStrings.action_retry) clickOn(CommonStrings.action_retry)
recorder.assertSingle(EditRoomAddressEvents.Save) recorder.assertSingle(EditRoomAddressEvent.Save)
} }
} }