android: add message action state machine core
Some checks failed
CI / test (push) Has been cancelled

This commit is contained in:
Codex
2026-03-09 13:40:46 +03:00
parent d8916d6738
commit e992f1e26d
5 changed files with 246 additions and 7 deletions

View File

@@ -0,0 +1,74 @@
package ru.daemonlord.messenger.ui.chat
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Test
import ru.daemonlord.messenger.domain.message.model.MessageItem
class MessageActionStateTest {
@Test
fun selectSingle_setsSingleModeAndIntents() {
val message = message(id = 1L)
val state = MessageActionState().selectSingle(
message = message,
canEdit = true,
canDeleteForAll = true,
)
assertEquals(MessageSelectionMode.SINGLE, state.mode)
assertEquals(setOf(1L), state.selectedMessageIds)
assertEquals(1L, state.focusedMessageId)
assertTrue(state.availableIntents.contains(MessageActionIntent.REPLY))
assertTrue(state.availableIntents.contains(MessageActionIntent.EDIT))
assertTrue(state.availableIntents.contains(MessageActionIntent.DELETE_FOR_ALL))
}
@Test
fun selectMulti_setsMultiModeAndBulkIntent() {
val state = MessageActionState().selectMulti(
selectedIds = setOf(10L, 11L),
focusedMessageId = 11L,
)
assertEquals(MessageSelectionMode.MULTI, state.mode)
assertEquals(2, state.selectedCount)
assertEquals(11L, state.focusedMessageId)
assertTrue(state.availableIntents.contains(MessageActionIntent.FORWARD_BULK))
assertTrue(state.availableIntents.contains(MessageActionIntent.DELETE_FOR_ME))
}
@Test
fun clearSelection_resetsState() {
val state = MessageActionState(
mode = MessageSelectionMode.MULTI,
selectedMessageIds = setOf(1L, 2L),
focusedMessageId = 2L,
availableIntents = setOf(MessageActionIntent.FORWARD_BULK),
).clearSelection()
assertEquals(MessageSelectionMode.NONE, state.mode)
assertTrue(state.selectedMessageIds.isEmpty())
assertEquals(null, state.focusedMessageId)
assertTrue(state.availableIntents.isEmpty())
}
private fun message(id: Long): MessageItem {
return MessageItem(
id = id,
chatId = 1L,
senderId = 1L,
senderDisplayName = null,
type = "text",
text = "hi",
createdAt = "2026-03-09T10:00:00Z",
updatedAt = null,
isOutgoing = true,
status = "sent",
replyToMessageId = null,
forwardedFromMessageId = null,
attachmentWaveform = null,
attachments = emptyList(),
)
}
}