Retry outbound reactions for up to a day

This commit is contained in:
Evan Hahn 2021-10-29 18:19:44 -05:00 committed by GitHub
parent 4a6b7968c1
commit 8670a4d864
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
25 changed files with 1444 additions and 473 deletions

View file

@ -13,6 +13,7 @@ import type { ConversationType } from '../../../state/ducks/conversations';
import {
canDeleteForEveryone,
canReact,
canReply,
getMessagePropStatus,
isEndSession,
@ -120,6 +121,117 @@ describe('state/selectors/messages', () => {
});
});
describe('canReact', () => {
const defaultConversation: ConversationType = {
id: uuid(),
type: 'direct',
title: 'Test conversation',
isMe: false,
sharedGroupNames: [],
acceptedMessageRequest: true,
};
it('returns false for disabled v1 groups', () => {
const message = {
conversationId: 'fake-conversation-id',
type: 'incoming' as const,
};
const getConversationById = () => ({
...defaultConversation,
type: 'group' as const,
isGroupV1AndDisabled: true,
});
assert.isFalse(canReact(message, ourConversationId, getConversationById));
});
// NOTE: This is missing a test for mandatory profile sharing.
it('returns false if the message was deleted for everyone', () => {
const message = {
conversationId: 'fake-conversation-id',
type: 'incoming' as const,
deletedForEveryone: true,
};
const getConversationById = () => defaultConversation;
assert.isFalse(canReact(message, ourConversationId, getConversationById));
});
it('returns false for outgoing messages that have not been sent', () => {
const message = {
conversationId: 'fake-conversation-id',
type: 'outgoing' as const,
sendStateByConversationId: {
[ourConversationId]: {
status: SendStatus.Sent,
updatedAt: Date.now(),
},
[uuid()]: {
status: SendStatus.Pending,
updatedAt: Date.now(),
},
},
};
const getConversationById = () => defaultConversation;
assert.isFalse(canReact(message, ourConversationId, getConversationById));
});
it('returns true for outgoing messages that are only sent to yourself', () => {
const message = {
conversationId: 'fake-conversation-id',
type: 'outgoing' as const,
sendStateByConversationId: {
[ourConversationId]: {
status: SendStatus.Pending,
updatedAt: Date.now(),
},
},
};
const getConversationById = () => defaultConversation;
assert.isTrue(canReact(message, ourConversationId, getConversationById));
});
it('returns true for outgoing messages that have been sent to at least one person', () => {
const message = {
conversationId: 'fake-conversation-id',
type: 'outgoing' as const,
sendStateByConversationId: {
[ourConversationId]: {
status: SendStatus.Sent,
updatedAt: Date.now(),
},
[uuid()]: {
status: SendStatus.Pending,
updatedAt: Date.now(),
},
[uuid()]: {
status: SendStatus.Sent,
updatedAt: Date.now(),
},
},
};
const getConversationById = () => ({
...defaultConversation,
type: 'group' as const,
});
assert.isTrue(canReact(message, ourConversationId, getConversationById));
});
it('returns true for incoming messages', () => {
const message = {
conversationId: 'fake-conversation-id',
type: 'incoming' as const,
};
const getConversationById = () => defaultConversation;
assert.isTrue(canReact(message, ourConversationId, getConversationById));
});
});
describe('canReply', () => {
const defaultConversation: ConversationType = {
id: uuid(),