Move receipts and view/read syncs to new syncTasks system

Co-authored-by: Scott Nonnenberg <scott@signal.org>
This commit is contained in:
automated-signal 2024-06-17 19:36:57 -05:00 committed by GitHub
parent 949104c316
commit b95dd1a70f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
33 changed files with 1242 additions and 612 deletions

View file

@ -7,10 +7,13 @@ import { assert } from 'chai';
import { type AciString, generateAci } from '../types/ServiceId';
import type { MessageAttributesType } from '../model-types';
import { SendStatus } from '../messages/MessageSendState';
import {
type MessageReceiptAttributesType,
import type {
MessageReceiptAttributesType,
MessageReceiptType,
} from '../messageModifiers/MessageReceipts';
import {
onReceipt,
messageReceiptTypeSchema,
} from '../messageModifiers/MessageReceipts';
import { ReadStatus } from '../messages/MessageReadStatus';
@ -31,14 +34,16 @@ describe('MessageReceipts', () => {
): MessageReceiptAttributesType {
return {
envelopeId: uuid(),
messageSentAt,
receiptTimestamp: 1,
removeFromMessageReceiverCache: () => null,
sourceConversationId,
sourceDevice: 1,
sourceServiceId: generateAci(),
type,
wasSentEncrypted: true,
syncTaskId: uuid(),
receiptSync: {
messageSentAt,
receiptTimestamp: 1,
sourceConversationId,
sourceDevice: 1,
sourceServiceId: generateAci(),
type,
wasSentEncrypted: true,
},
};
}
it('processes all receipts in a batch', async () => {
@ -78,10 +83,18 @@ describe('MessageReceipts', () => {
});
await Promise.all([
onReceipt(generateReceipt('aaaa', sentAt, MessageReceiptType.Delivery)),
onReceipt(generateReceipt('bbbb', sentAt, MessageReceiptType.Delivery)),
onReceipt(generateReceipt('cccc', sentAt, MessageReceiptType.Read)),
onReceipt(generateReceipt('aaaa', sentAt, MessageReceiptType.Read)),
onReceipt(
generateReceipt('aaaa', sentAt, messageReceiptTypeSchema.enum.Delivery)
),
onReceipt(
generateReceipt('bbbb', sentAt, messageReceiptTypeSchema.enum.Delivery)
),
onReceipt(
generateReceipt('cccc', sentAt, messageReceiptTypeSchema.enum.Read)
),
onReceipt(
generateReceipt('aaaa', sentAt, messageReceiptTypeSchema.enum.Read)
),
]);
const messageFromDatabase = await window.Signal.Data.getMessageById(id);
@ -154,20 +167,48 @@ describe('MessageReceipts', () => {
await Promise.all([
// send receipts for original message
onReceipt(generateReceipt('aaaa', sentAt, MessageReceiptType.Delivery)),
onReceipt(generateReceipt('bbbb', sentAt, MessageReceiptType.Delivery)),
onReceipt(generateReceipt('cccc', sentAt, MessageReceiptType.Read)),
onReceipt(generateReceipt('aaaa', sentAt, MessageReceiptType.Read)),
onReceipt(
generateReceipt('aaaa', sentAt, messageReceiptTypeSchema.enum.Delivery)
),
onReceipt(
generateReceipt('bbbb', sentAt, messageReceiptTypeSchema.enum.Delivery)
),
onReceipt(
generateReceipt('cccc', sentAt, messageReceiptTypeSchema.enum.Read)
),
onReceipt(
generateReceipt('aaaa', sentAt, messageReceiptTypeSchema.enum.Read)
),
// and send receipts for edited message
onReceipt(
generateReceipt('aaaa', editedSentAt, MessageReceiptType.Delivery)
generateReceipt(
'aaaa',
editedSentAt,
messageReceiptTypeSchema.enum.Delivery
)
),
onReceipt(
generateReceipt('bbbb', editedSentAt, MessageReceiptType.Delivery)
generateReceipt(
'bbbb',
editedSentAt,
messageReceiptTypeSchema.enum.Delivery
)
),
onReceipt(
generateReceipt(
'cccc',
editedSentAt,
messageReceiptTypeSchema.enum.Read
)
),
onReceipt(
generateReceipt(
'bbbb',
editedSentAt,
messageReceiptTypeSchema.enum.Read
)
),
onReceipt(generateReceipt('cccc', editedSentAt, MessageReceiptType.Read)),
onReceipt(generateReceipt('bbbb', editedSentAt, MessageReceiptType.Read)),
]);
const messageFromDatabase = await window.Signal.Data.getMessageById(id);

View file

@ -7,6 +7,7 @@ import { v4 as generateUuid } from 'uuid';
import dataInterface from '../../sql/Client';
import { generateAci } from '../../types/ServiceId';
import { constantTimeEqual, getRandomBytes } from '../../Crypto';
import { singleProtoJobQueue } from '../../jobs/singleProtoJobQueue';
const {
_getAllSentProtoMessageIds,
@ -148,7 +149,7 @@ describe('sql/sendLog', () => {
assert.strictEqual(actual.timestamp, proto.timestamp);
await removeMessage(id);
await removeMessage(id, { singleProtoJobQueue });
assert.lengthOf(await getAllSentProtos(), 0);
});

View file

@ -11,6 +11,7 @@ import { SignalProtocolStore } from '../../SignalProtocolStore';
import type { ConversationModel } from '../../models/conversations';
import * as KeyChangeListener from '../../textsecure/KeyChangeListener';
import * as Bytes from '../../Bytes';
import { singleProtoJobQueue } from '../../jobs/singleProtoJobQueue';
describe('KeyChangeListener', () => {
let oldNumberId: string | undefined;
@ -69,6 +70,7 @@ describe('KeyChangeListener', () => {
afterEach(async () => {
await window.Signal.Data.removeMessagesInConversation(convo.id, {
logId: ourServiceIdWithKeyChange,
singleProtoJobQueue,
});
await window.Signal.Data.removeConversation(convo.id);
@ -106,6 +108,7 @@ describe('KeyChangeListener', () => {
afterEach(async () => {
await window.Signal.Data.removeMessagesInConversation(groupConvo.id, {
logId: ourServiceIdWithKeyChange,
singleProtoJobQueue,
});
await window.Signal.Data.removeConversation(groupConvo.id);
});