Import/export gift badges, other fields
Co-authored-by: Fedor Indutny <79877362+indutny-signal@users.noreply.github.com>
This commit is contained in:
parent
ab41aa1942
commit
d426109734
10 changed files with 536 additions and 55 deletions
|
@ -5,6 +5,7 @@ import { v4 as generateGuid } from 'uuid';
|
|||
|
||||
import { SendStatus } from '../../messages/MessageSendState';
|
||||
import type { ConversationModel } from '../../models/conversations';
|
||||
import { GiftBadgeStates } from '../../components/conversation/Message';
|
||||
|
||||
import Data from '../../sql/Client';
|
||||
import { generateAci } from '../../types/ServiceId';
|
||||
|
@ -15,6 +16,15 @@ import { setupBasics, symmetricRoundtripHarness, OUR_ACI } from './helpers';
|
|||
|
||||
const CONTACT_A = generateAci();
|
||||
|
||||
const BADGE_RECEIPT =
|
||||
'AEpyZxbRBT+T5PQw9Wcx1QE2aFvL7LoLir9V4UF09Kk9qiP4SpIlHdlWHrAICy6F' +
|
||||
'6WdbdCj45fY6cadDKbBmkw+abohRTJnItrFhyKurnA5X+mZHZv4OvS+aZFmAYS6J' +
|
||||
'W+hpkbI+Fk7Gu3mEix7Pgz1I2EwGFlUBpm7/nuD5A0cKLrUJAMM142fnOEervePV' +
|
||||
'bf0c6Sw5X5aCsBw9J+dxFUGAAAAAAAAAAMH58UUeUj2oH1jfqc0Hb2RUtdA3ee8X' +
|
||||
'0Pp83WT8njwFw5rNGSHeKqOvBZzfAhMGJoiz7l1XfIfsPIreaFb/tA9aq2bOAdDl' +
|
||||
'5OYlxxl6DnjQ3+g3k9ycpl0elkaQnPW2Ai7yjeJ/96K1qssR2a/2b7xi10dmTRGg' +
|
||||
'gebhZnroYYgIgK22ZgAAAABkAAAAAAAAAD9j4f77Xo2Ox5tVyrV2DUo=';
|
||||
|
||||
describe('backup/bubble messages', () => {
|
||||
let contactA: ConversationModel;
|
||||
|
||||
|
@ -48,6 +58,7 @@ describe('backup/bubble messages', () => {
|
|||
body: 'd',
|
||||
readStatus: ReadStatus.Unread,
|
||||
seenStatus: SeenStatus.Unseen,
|
||||
unidentifiedDeliveryReceived: true,
|
||||
editMessageTimestamp: 5,
|
||||
editMessageReceivedAtMs: 5,
|
||||
editHistory: [
|
||||
|
@ -89,6 +100,7 @@ describe('backup/bubble messages', () => {
|
|||
status: SendStatus.Delivered,
|
||||
},
|
||||
},
|
||||
unidentifiedDeliveries: [CONTACT_A],
|
||||
timestamp: 3,
|
||||
editMessageTimestamp: 5,
|
||||
editMessageReceivedAtMs: 5,
|
||||
|
@ -131,4 +143,224 @@ describe('backup/bubble messages', () => {
|
|||
},
|
||||
]);
|
||||
});
|
||||
|
||||
it.skip('roundtrips unopened gift badge', async () => {
|
||||
await symmetricRoundtripHarness([
|
||||
{
|
||||
conversationId: contactA.id,
|
||||
id: generateGuid(),
|
||||
type: 'incoming',
|
||||
received_at: 3,
|
||||
received_at_ms: 3,
|
||||
sent_at: 3,
|
||||
sourceServiceId: CONTACT_A,
|
||||
readStatus: ReadStatus.Unread,
|
||||
seenStatus: SeenStatus.Unseen,
|
||||
unidentifiedDeliveryReceived: true,
|
||||
timestamp: 3,
|
||||
giftBadge: {
|
||||
id: undefined,
|
||||
level: 100,
|
||||
expiration: 1723248000000,
|
||||
receiptCredentialPresentation: BADGE_RECEIPT,
|
||||
state: GiftBadgeStates.Opened,
|
||||
},
|
||||
},
|
||||
]);
|
||||
});
|
||||
|
||||
it.skip('roundtrips opened gift badge', async () => {
|
||||
await symmetricRoundtripHarness([
|
||||
{
|
||||
conversationId: contactA.id,
|
||||
id: generateGuid(),
|
||||
type: 'incoming',
|
||||
received_at: 3,
|
||||
received_at_ms: 3,
|
||||
sent_at: 3,
|
||||
sourceServiceId: CONTACT_A,
|
||||
readStatus: ReadStatus.Unread,
|
||||
seenStatus: SeenStatus.Unseen,
|
||||
unidentifiedDeliveryReceived: true,
|
||||
timestamp: 3,
|
||||
giftBadge: {
|
||||
id: undefined,
|
||||
level: 100,
|
||||
expiration: 1723248000000,
|
||||
receiptCredentialPresentation: BADGE_RECEIPT,
|
||||
state: GiftBadgeStates.Opened,
|
||||
},
|
||||
},
|
||||
]);
|
||||
});
|
||||
|
||||
it.skip('roundtrips gift badge quote', async () => {
|
||||
await symmetricRoundtripHarness([
|
||||
{
|
||||
conversationId: contactA.id,
|
||||
id: generateGuid(),
|
||||
type: 'incoming',
|
||||
received_at: 3,
|
||||
received_at_ms: 3,
|
||||
sent_at: 3,
|
||||
sourceServiceId: CONTACT_A,
|
||||
readStatus: ReadStatus.Unread,
|
||||
seenStatus: SeenStatus.Unseen,
|
||||
unidentifiedDeliveryReceived: true,
|
||||
timestamp: 3,
|
||||
giftBadge: {
|
||||
id: undefined,
|
||||
level: 100,
|
||||
expiration: 1723248000000,
|
||||
receiptCredentialPresentation: BADGE_RECEIPT,
|
||||
state: GiftBadgeStates.Opened,
|
||||
},
|
||||
},
|
||||
{
|
||||
conversationId: contactA.id,
|
||||
id: generateGuid(),
|
||||
type: 'incoming',
|
||||
received_at: 4,
|
||||
received_at_ms: 4,
|
||||
sent_at: 4,
|
||||
sourceServiceId: CONTACT_A,
|
||||
readStatus: ReadStatus.Unread,
|
||||
seenStatus: SeenStatus.Unseen,
|
||||
unidentifiedDeliveryReceived: true,
|
||||
timestamp: 4,
|
||||
quote: {
|
||||
authorAci: CONTACT_A,
|
||||
attachments: [],
|
||||
id: 3,
|
||||
isViewOnce: false,
|
||||
isGiftBadge: true,
|
||||
messageId: '',
|
||||
referencedMessageNotFound: false,
|
||||
},
|
||||
},
|
||||
]);
|
||||
});
|
||||
|
||||
it('roundtrips sealed/unsealed incoming message', async () => {
|
||||
await symmetricRoundtripHarness([
|
||||
{
|
||||
conversationId: contactA.id,
|
||||
id: generateGuid(),
|
||||
type: 'incoming',
|
||||
received_at: 3,
|
||||
received_at_ms: 3,
|
||||
sent_at: 3,
|
||||
sourceServiceId: CONTACT_A,
|
||||
readStatus: ReadStatus.Unread,
|
||||
seenStatus: SeenStatus.Unseen,
|
||||
unidentifiedDeliveryReceived: false,
|
||||
timestamp: 3,
|
||||
body: 'unsealed',
|
||||
},
|
||||
{
|
||||
conversationId: contactA.id,
|
||||
id: generateGuid(),
|
||||
type: 'incoming',
|
||||
received_at: 4,
|
||||
received_at_ms: 4,
|
||||
sent_at: 4,
|
||||
sourceServiceId: CONTACT_A,
|
||||
readStatus: ReadStatus.Unread,
|
||||
seenStatus: SeenStatus.Unseen,
|
||||
unidentifiedDeliveryReceived: true,
|
||||
timestamp: 4,
|
||||
body: 'sealed',
|
||||
},
|
||||
]);
|
||||
});
|
||||
|
||||
it('roundtrips sealed/unsealed outgoing message', async () => {
|
||||
await symmetricRoundtripHarness([
|
||||
{
|
||||
conversationId: contactA.id,
|
||||
id: generateGuid(),
|
||||
type: 'outgoing',
|
||||
received_at: 3,
|
||||
received_at_ms: 3,
|
||||
sent_at: 3,
|
||||
sourceServiceId: OUR_ACI,
|
||||
sendStateByConversationId: {
|
||||
[contactA.id]: {
|
||||
status: SendStatus.Delivered,
|
||||
},
|
||||
},
|
||||
unidentifiedDeliveries: undefined,
|
||||
timestamp: 3,
|
||||
body: 'unsealed',
|
||||
},
|
||||
{
|
||||
conversationId: contactA.id,
|
||||
id: generateGuid(),
|
||||
type: 'outgoing',
|
||||
received_at: 4,
|
||||
received_at_ms: 4,
|
||||
sent_at: 4,
|
||||
sourceServiceId: OUR_ACI,
|
||||
sendStateByConversationId: {
|
||||
[contactA.id]: {
|
||||
status: SendStatus.Delivered,
|
||||
},
|
||||
},
|
||||
unidentifiedDeliveries: [CONTACT_A],
|
||||
timestamp: 4,
|
||||
body: 'sealed',
|
||||
},
|
||||
]);
|
||||
});
|
||||
|
||||
it('roundtrips messages with send errors', async () => {
|
||||
await symmetricRoundtripHarness([
|
||||
{
|
||||
conversationId: contactA.id,
|
||||
id: generateGuid(),
|
||||
type: 'outgoing',
|
||||
received_at: 3,
|
||||
received_at_ms: 3,
|
||||
sent_at: 3,
|
||||
sourceServiceId: OUR_ACI,
|
||||
sendStateByConversationId: {
|
||||
[contactA.id]: {
|
||||
status: SendStatus.Delivered,
|
||||
},
|
||||
},
|
||||
errors: [
|
||||
{
|
||||
serviceId: CONTACT_A,
|
||||
name: 'OutgoingIdentityKeyError',
|
||||
message: `The identity of ${CONTACT_A} has changed.`,
|
||||
},
|
||||
],
|
||||
timestamp: 3,
|
||||
body: 'body',
|
||||
},
|
||||
{
|
||||
conversationId: contactA.id,
|
||||
id: generateGuid(),
|
||||
type: 'outgoing',
|
||||
received_at: 4,
|
||||
received_at_ms: 4,
|
||||
sent_at: 4,
|
||||
sourceServiceId: OUR_ACI,
|
||||
sendStateByConversationId: {
|
||||
[contactA.id]: {
|
||||
status: SendStatus.Delivered,
|
||||
},
|
||||
},
|
||||
errors: [
|
||||
{
|
||||
serviceId: CONTACT_A,
|
||||
name: 'OutgoingMessageError',
|
||||
message: 'no http error',
|
||||
},
|
||||
],
|
||||
timestamp: 4,
|
||||
body: 'body',
|
||||
},
|
||||
]);
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue