mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-06-29 10:35:52 +01:00
Fix IndividualSendJobV2 edit message timestamps.
This commit is contained in:
committed by
Cody Henthorne
parent
2b17868797
commit
33619fe463
@@ -195,7 +195,7 @@ class IndividualSendJobV2 private constructor(parameters: Parameters, private va
|
||||
Log.i(TAG, "${logPrefix(message.sentTimeMillis)} Sending message. Recipient: ${message.threadRecipient.id}, Thread: $threadId, Attachments: ${buildAttachmentString(message.attachments)}, Editing: ${originalEditedMessage?.dateSent ?: "N/A"}")
|
||||
SignalLocalMetrics.IndividualMessageSend.onDeliveryStarted(messageId, message.sentTimeMillis)
|
||||
|
||||
return sendMessage(recipient, dataMessage, originalEditedMessage?.timestamp).fold(
|
||||
return sendMessage(recipient, dataMessage, originalEditedMessage?.dateSent).fold(
|
||||
ifRight = { success ->
|
||||
val content = success.envelopeContent.content.get()
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ import androidx.test.core.app.ApplicationProvider
|
||||
import arrow.core.left
|
||||
import arrow.core.right
|
||||
import assertk.assertThat
|
||||
import assertk.assertions.isEqualTo
|
||||
import assertk.assertions.isTrue
|
||||
import io.mockk.coEvery
|
||||
import io.mockk.coVerify
|
||||
@@ -19,6 +20,7 @@ import io.mockk.mockk
|
||||
import io.mockk.mockkObject
|
||||
import io.mockk.mockkStatic
|
||||
import io.mockk.runs
|
||||
import io.mockk.slot
|
||||
import io.mockk.unmockkAll
|
||||
import io.mockk.verify
|
||||
import org.junit.After
|
||||
@@ -425,6 +427,45 @@ class IndividualSendJobV2Test {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `Given an edit of an already-edited message, when run, then target the edited revision's dateSent`() {
|
||||
val editTargetMessageId = messageId + 1
|
||||
val editRevisionSentTime = sentTime + 10_000L
|
||||
// An edit revision inherits the original message's dateReceived, so getTimestamp() returns a value
|
||||
// that is not the revision's actual sent timestamp. The edit target must use dateSent.
|
||||
val inheritedTimestamp = sentTime - 2L
|
||||
|
||||
every { outgoingMessage.messageToEdit } returns editTargetMessageId
|
||||
|
||||
val editTargetRecord: MessageRecord = mockk(relaxed = true)
|
||||
every { editTargetRecord.dateSent } returns editRevisionSentTime
|
||||
every { editTargetRecord.timestamp } returns inheritedTimestamp
|
||||
every { editTargetRecord.expireStarted } returns 0L
|
||||
every { messages.getMessageRecordOrNull(editTargetMessageId) } returns editTargetRecord
|
||||
|
||||
val contentSlot = slot<EnvelopeContent>()
|
||||
coEvery {
|
||||
messageService.sendMessage(
|
||||
serviceId = any(),
|
||||
envelopeContent = capture(contentSlot),
|
||||
timestamp = any(),
|
||||
sealedSenderAccess = any(),
|
||||
story = any(),
|
||||
isOnline = any(),
|
||||
urgent = any(),
|
||||
onEncrypted = any()
|
||||
)
|
||||
} returns MessageService.SendSuccess(
|
||||
envelopeContent = EnvelopeContent.encrypted(Content(dataMessage = dataMessage), ContentHint.RESENDABLE, Optional.empty()),
|
||||
sentSealedSender = false,
|
||||
devices = listOf(1)
|
||||
).right()
|
||||
|
||||
createAndRunJob()
|
||||
|
||||
assertThat(contentSlot.captured.content.get().editMessage!!.targetSentTimestamp).isEqualTo(editRevisionSentTime)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `Given a send needs PNI signature, when send succeeds, then write a pending PNI signature record`() {
|
||||
every { recipient.needsPniSignature } returns true
|
||||
|
||||
Reference in New Issue
Block a user