Test reply and edit message

This commit is contained in:
Benoit Marty 2023-02-09 15:19:32 +01:00
parent 059d8ec6ce
commit e4722f43d3
3 changed files with 77 additions and 2 deletions

View file

@ -25,7 +25,9 @@ import app.cash.turbine.test
import com.google.common.truth.Truth.assertThat
import io.element.android.libraries.core.data.StableCharSequence
import io.element.android.libraries.matrixtest.core.A_ROOM_ID
import io.element.android.libraries.matrixtest.room.ANOTHER_MESSAGE
import io.element.android.libraries.matrixtest.room.A_MESSAGE
import io.element.android.libraries.matrixtest.room.A_REPLY
import io.element.android.libraries.matrixtest.room.FakeMatrixRoom
import io.element.android.libraries.matrixtest.timeline.AN_EVENT_ID
import io.element.android.libraries.matrixtest.timeline.A_SENDER_NAME
@ -183,6 +185,67 @@ class MessageComposerPresenterTest {
}
}
@Test
fun `present - edit message`() = runTest {
val fakeMatrixRoom = FakeMatrixRoom(A_ROOM_ID)
val presenter = MessageComposerPresenter(
this,
fakeMatrixRoom
)
moleculeFlow(RecompositionClock.Immediate) {
presenter.present()
}.test {
val initialState = awaitItem()
assertThat(initialState.text).isEqualTo(StableCharSequence(""))
val mode = anEditMode()
initialState.eventSink.invoke(MessageComposerEvents.SetMode(mode))
skipItems(1)
val withMessageState = awaitItem()
assertThat(withMessageState.mode).isEqualTo(mode)
assertThat(withMessageState.text).isEqualTo(StableCharSequence(A_MESSAGE))
assertThat(withMessageState.isSendButtonVisible).isTrue()
withMessageState.eventSink.invoke(MessageComposerEvents.UpdateText(ANOTHER_MESSAGE))
val withEditedMessageState = awaitItem()
assertThat(withEditedMessageState.text).isEqualTo(StableCharSequence(ANOTHER_MESSAGE))
withEditedMessageState.eventSink.invoke(MessageComposerEvents.SendMessage(ANOTHER_MESSAGE))
skipItems(1)
val messageSentState = awaitItem()
assertThat(messageSentState.text).isEqualTo(StableCharSequence(""))
assertThat(messageSentState.isSendButtonVisible).isFalse()
assertThat(fakeMatrixRoom.editMessageParameter).isEqualTo(ANOTHER_MESSAGE)
}
}
@Test
fun `present - reply message`() = runTest {
val fakeMatrixRoom = FakeMatrixRoom(A_ROOM_ID)
val presenter = MessageComposerPresenter(
this,
fakeMatrixRoom
)
moleculeFlow(RecompositionClock.Immediate) {
presenter.present()
}.test {
val initialState = awaitItem()
assertThat(initialState.text).isEqualTo(StableCharSequence(""))
val mode = aReplyMode()
initialState.eventSink.invoke(MessageComposerEvents.SetMode(mode))
var state = awaitItem()
assertThat(state.mode).isEqualTo(mode)
assertThat(state.text).isEqualTo(StableCharSequence(""))
assertThat(state.isSendButtonVisible).isFalse()
initialState.eventSink.invoke(MessageComposerEvents.UpdateText(A_REPLY))
val withMessageState = awaitItem()
assertThat(withMessageState.text).isEqualTo(StableCharSequence(A_REPLY))
assertThat(withMessageState.isSendButtonVisible).isTrue()
withMessageState.eventSink.invoke(MessageComposerEvents.SendMessage(A_REPLY))
skipItems(1)
val messageSentState = awaitItem()
assertThat(messageSentState.text).isEqualTo(StableCharSequence(""))
assertThat(messageSentState.isSendButtonVisible).isFalse()
assertThat(fakeMatrixRoom.replyMessageParameter).isEqualTo(A_REPLY)
}
}
}
fun anEditMode() = MessageComposerMode.Edit(AN_EVENT_ID, A_MESSAGE)

View file

@ -56,12 +56,22 @@ class FakeMatrixRoom(
return Result.success(Unit)
}
var editMessageParameter: String? = null
private set
override suspend fun editMessage(originalEventId: EventId, message: String): Result<Unit> {
TODO("Not yet implemented")
editMessageParameter = message
delay(100)
return Result.success(Unit)
}
var replyMessageParameter: String? = null
private set
override suspend fun replyMessage(eventId: EventId, message: String): Result<Unit> {
TODO("Not yet implemented")
replyMessageParameter = message
delay(100)
return Result.success(Unit)
}
override suspend fun redactEvent(eventId: EventId, reason: String?): Result<Unit> {

View file

@ -23,6 +23,8 @@ import io.element.android.libraries.matrixtest.core.A_ROOM_ID
const val A_ROOM_NAME = "aRoomName"
const val A_MESSAGE = "Hello world!"
const val A_REPLY = "OK, I'll be there!"
const val ANOTHER_MESSAGE = "Hello universe!"
fun aRoomSummaryFilled(
roomId: RoomId = A_ROOM_ID,