Expose message delivery state changes to websockets API

We already indicate whether a message was sent/acked, but we don't
inform about updates.

Needed for briar-gtk#69.

Fixes #1779
This commit is contained in:
Nico Alt
2020-09-25 13:51:28 +02:00
parent 54b852db70
commit 63d3a78dda
4 changed files with 135 additions and 1 deletions

View File

@@ -10,11 +10,13 @@ import org.briarproject.bramble.api.db.NoSuchContactException
import org.briarproject.bramble.api.identity.AuthorInfo
import org.briarproject.bramble.api.identity.AuthorInfo.Status.UNVERIFIED
import org.briarproject.bramble.api.identity.AuthorInfo.Status.VERIFIED
import org.briarproject.bramble.api.sync.MessageId
import org.briarproject.bramble.api.sync.event.MessagesAckedEvent
import org.briarproject.bramble.api.sync.event.MessagesSentEvent
import org.briarproject.bramble.test.ImmediateExecutor
import org.briarproject.bramble.test.TestUtils.getRandomId
import org.briarproject.bramble.util.StringUtils.getRandomString
import org.briarproject.briar.api.client.SessionId
import org.briarproject.briar.api.conversation.ConversationManager
import org.briarproject.briar.api.introduction.IntroductionRequest
import org.briarproject.briar.api.messaging.MessagingConstants.MAX_PRIVATE_MESSAGE_TEXT_LENGTH
import org.briarproject.briar.api.messaging.MessagingManager
@@ -100,6 +102,40 @@ internal class MessagingControllerImplTest : ControllerTest() {
testInvalidContactId { controller.list(ctx) }
}
@Test
fun testMessagesAckedEvent() {
val messageId1 = MessageId(getRandomId())
val messageId2 = MessageId(getRandomId())
val messageIds = listOf(messageId1, messageId2)
val event = MessagesAckedEvent(contact.id, messageIds)
every {
webSocketController.sendEvent(
EVENT_MESSAGES_ACKED,
event.output()
)
} just runs
controller.eventOccurred(event)
}
@Test
fun testMessagesSentEvent() {
val messageId1 = MessageId(getRandomId())
val messageId2 = MessageId(getRandomId())
val messageIds = listOf(messageId1, messageId2)
val event = MessagesSentEvent(contact.id, messageIds)
every {
webSocketController.sendEvent(
EVENT_MESSAGES_SENT,
event.output()
)
} just runs
controller.eventOccurred(event)
}
@Test
fun listNonexistentContactId() {
testNonexistentContactId { controller.list(ctx) }
@@ -177,6 +213,43 @@ internal class MessagingControllerImplTest : ControllerTest() {
controller.eventOccurred(event)
}
@Test
fun testOutputMessagesAckedEvent() {
val messageId1 = MessageId(getRandomId())
val messageId2 = MessageId(getRandomId())
val messageIds = listOf(messageId1, messageId2)
val event = MessagesAckedEvent(contact.id, messageIds)
val json = """
{
"contactId": ${contact.id.int},
"messageIds": [
${toJson(messageId1.bytes)},
${toJson(messageId2.bytes)}
]
}
"""
assertJsonEquals(json, event.output())
}
@Test
fun testOutputMessagesSentEvent() {
val messageId1 = MessageId(getRandomId())
val messageId2 = MessageId(getRandomId())
val messageIds = listOf(messageId1, messageId2)
val event = MessagesSentEvent(contact.id, messageIds)
val json = """
{
"contactId": ${contact.id.int},
"messageIds": [
${toJson(messageId1.bytes)},
${toJson(messageId2.bytes)}
]
}
"""
assertJsonEquals(json, event.output())
}
@Test
fun testOutputPrivateMessageHeader() {
val json = """