diff --git a/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/MessagingControllerImpl.kt b/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/MessagingControllerImpl.kt index b0b6c3586..c3bdb96ee 100644 --- a/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/MessagingControllerImpl.kt +++ b/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/MessagingControllerImpl.kt @@ -109,11 +109,11 @@ constructor( override fun deleteAllMessages(ctx: Context): Context { val contactId = ctx.getContactIdFromPathParam() try { - conversationManager.deleteAllMessages(contactId) + val result = conversationManager.deleteAllMessages(contactId) + return ctx.json(result.output()) } catch (e: NoSuchContactException) { throw NotFoundResponse() } - return ctx } override fun eventOccurred(e: Event) { diff --git a/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/OutputConversationMessage.kt b/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/OutputConversationMessage.kt index 3c42a39d0..487bcdbb0 100644 --- a/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/OutputConversationMessage.kt +++ b/briar-headless/src/main/java/org/briarproject/briar/headless/messaging/OutputConversationMessage.kt @@ -5,6 +5,7 @@ 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.briar.api.conversation.ConversationMessageHeader +import org.briarproject.briar.api.conversation.DeletionResult import org.briarproject.briar.api.messaging.PrivateMessage import org.briarproject.briar.api.messaging.PrivateMessageHeader import org.briarproject.briar.headless.json.JsonDict @@ -47,6 +48,15 @@ internal fun PrivateMessage.output(contactId: ContactId, text: String) = JsonDic "text" to text ) +internal fun DeletionResult.output() = JsonDict( + "allDeleted" to allDeleted(), + "hasIntroductionSessionInProgress" to hasIntroductionSessionInProgress(), + "hasInvitationSessionInProgress" to hasInvitationSessionInProgress(), + "hasNotAllIntroductionSelected" to hasNotAllIntroductionSelected(), + "hasNotAllInvitationSelected" to hasNotAllInvitationSelected(), + "hasNotFullyDownloaded" to hasNotFullyDownloaded() +) + internal fun MessagesAckedEvent.output() = JsonDict( "contactId" to contactId.int, "messageIds" to messageIds.toJson() diff --git a/briar-headless/src/test/java/org/briarproject/briar/headless/messaging/MessagingControllerImplTest.kt b/briar-headless/src/test/java/org/briarproject/briar/headless/messaging/MessagingControllerImplTest.kt index 2cecd7b1c..84c7c5ec2 100644 --- a/briar-headless/src/test/java/org/briarproject/briar/headless/messaging/MessagingControllerImplTest.kt +++ b/briar-headless/src/test/java/org/briarproject/briar/headless/messaging/MessagingControllerImplTest.kt @@ -33,6 +33,7 @@ import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertThrows import org.junit.jupiter.api.Test import org.spongycastle.util.encoders.Base64 +import kotlin.random.Random internal class MessagingControllerImplTest : ControllerTest() { @@ -346,8 +347,10 @@ internal class MessagingControllerImplTest : ControllerTest() { @Test fun testDeleteAllMessages() { + val result = DeletionResult() every { ctx.pathParam("contactId") } returns "1" - every { conversationManager.deleteAllMessages(ContactId(1)) } returns DeletionResult() + every { conversationManager.deleteAllMessages(ContactId(1)) } returns result + every { ctx.json(result.output()) } returns ctx controller.deleteAllMessages(ctx) } @@ -368,6 +371,27 @@ internal class MessagingControllerImplTest : ControllerTest() { } } + @Test + fun testOutputDeletionResult() { + val result = DeletionResult() + if (Random.nextBoolean()) result.addInvitationNotAllSelected() + if (Random.nextBoolean()) result.addInvitationSessionInProgress() + if (Random.nextBoolean()) result.addIntroductionNotAllSelected() + if (Random.nextBoolean()) result.addIntroductionSessionInProgress() + if (Random.nextBoolean()) result.addNotFullyDownloaded() + val json = """ + { + "allDeleted": ${result.allDeleted()}, + "hasIntroductionSessionInProgress": ${result.hasIntroductionSessionInProgress()}, + "hasInvitationSessionInProgress": ${result.hasInvitationSessionInProgress()}, + "hasNotAllIntroductionSelected": ${result.hasNotAllIntroductionSelected()}, + "hasNotAllInvitationSelected": ${result.hasNotAllInvitationSelected()}, + "hasNotFullyDownloaded": ${result.hasNotFullyDownloaded()} + } + """ + assertJsonEquals(json, result.output()) + } + private fun expectGetContact() { every { ctx.pathParam("contactId") } returns contact.id.int.toString() every { contactManager.getContact(contact.id) } returns contact