refactor: export functions from an object for stubbing

for disappearing messages index file
pull/2971/head
William Grant 2 years ago
parent c644c644c9
commit 04c3f69398

@ -10,7 +10,7 @@ import { StorageItem } from '../node/storage_item';
import { HexKeyPair } from '../receiver/keypairs'; import { HexKeyPair } from '../receiver/keypairs';
import { Quote } from '../receiver/types'; import { Quote } from '../receiver/types';
import { getSodiumRenderer } from '../session/crypto'; import { getSodiumRenderer } from '../session/crypto';
import { updateExpiringMessagesCheck } from '../session/disappearing_messages'; import { DisappearingMessages } from '../session/disappearing_messages';
import { PubKey } from '../session/types'; import { PubKey } from '../session/types';
import { fromArrayBufferToBase64, fromBase64ToArrayBuffer } from '../session/utils/String'; import { fromArrayBufferToBase64, fromBase64ToArrayBuffer } from '../session/utils/String';
import { import {
@ -244,7 +244,7 @@ async function updateLastHash(data: UpdateLastHashType): Promise<void> {
async function saveMessage(data: MessageAttributes): Promise<string> { async function saveMessage(data: MessageAttributes): Promise<string> {
const cleanedData = cleanData(data); const cleanedData = cleanData(data);
const id = await channels.saveMessage(cleanedData); const id = await channels.saveMessage(cleanedData);
updateExpiringMessagesCheck(); DisappearingMessages.updateExpiringMessagesCheck();
return id; return id;
} }

@ -16,7 +16,7 @@ import { deleteAllLogs } from '../node/logs';
import { queueAllCached } from '../receiver/receiver'; import { queueAllCached } from '../receiver/receiver';
import { loadKnownBlindedKeys } from '../session/apis/open_group_api/sogsv3/knownBlindedkeys'; import { loadKnownBlindedKeys } from '../session/apis/open_group_api/sogsv3/knownBlindedkeys';
import { getConversationController } from '../session/conversations'; import { getConversationController } from '../session/conversations';
import { initExpiringMessageListener } from '../session/disappearing_messages'; import { DisappearingMessages } from '../session/disappearing_messages';
import { AttachmentDownloads, ToastUtils } from '../session/utils'; import { AttachmentDownloads, ToastUtils } from '../session/utils';
import { getOurPubKeyStrFromCache } from '../session/utils/User'; import { getOurPubKeyStrFromCache } from '../session/utils/User';
import { runners } from '../session/utils/job_runners/JobRunner'; import { runners } from '../session/utils/job_runners/JobRunner';
@ -293,7 +293,7 @@ async function start() {
ReactDOM.render(<SessionRegistrationView />, document.getElementById('root')); ReactDOM.render(<SessionRegistrationView />, document.getElementById('root'));
switchBodyToRtlIfNeeded(); switchBodyToRtlIfNeeded();
} }
initExpiringMessageListener(); DisappearingMessages.initExpiringMessageListener();
if (Registration.isDone() && !isSignInByLinking()) { if (Registration.isDone() && !isSignInByLinking()) {
await connect(); await connect();

@ -117,10 +117,7 @@ import {
getSubscriberCountOutsideRedux, getSubscriberCountOutsideRedux,
} from '../state/selectors/sogsRoomInfo'; // decide it it makes sense to move this to a redux slice? } from '../state/selectors/sogsRoomInfo'; // decide it it makes sense to move this to a redux slice?
import { import { DisappearingMessages } from '../session/disappearing_messages';
changeToDisappearingMessageType,
setExpirationStartTimestamp,
} from '../session/disappearing_messages';
import { DisappearingMessageConversationModeType } from '../session/disappearing_messages/types'; import { DisappearingMessageConversationModeType } from '../session/disappearing_messages/types';
import { markAttributesAsReadIfNeeded } from './messageFactory'; import { markAttributesAsReadIfNeeded } from './messageFactory';
@ -753,7 +750,7 @@ export class ConversationModel extends Backbone.Model<ConversationAttributes> {
preview, preview,
attachments, attachments,
sent_at: networkTimestamp, sent_at: networkTimestamp,
expirationType: changeToDisappearingMessageType( expirationType: DisappearingMessages.changeToDisappearingMessageType(
this, this,
this.getExpireTimer(), this.getExpireTimer(),
this.getExpirationMode() this.getExpirationMode()
@ -886,7 +883,11 @@ export class ConversationModel extends Backbone.Model<ConversationAttributes> {
}); });
let message: MessageModel | undefined = existingMessage || undefined; let message: MessageModel | undefined = existingMessage || undefined;
const expirationType = changeToDisappearingMessageType(this, expireTimer, expirationMode); const expirationType = DisappearingMessages.changeToDisappearingMessageType(
this,
expireTimer,
expirationMode
);
const commonAttributes = { const commonAttributes = {
flags: SignalService.DataMessage.Flags.EXPIRATION_TIMER_UPDATE, flags: SignalService.DataMessage.Flags.EXPIRATION_TIMER_UPDATE,
@ -940,7 +941,7 @@ export class ConversationModel extends Backbone.Model<ConversationAttributes> {
expirationMode === 'deleteAfterSend' expirationMode === 'deleteAfterSend'
) { ) {
message.set({ message.set({
expirationStartTimestamp: setExpirationStartTimestamp( expirationStartTimestamp: DisappearingMessages.setExpirationStartTimestamp(
expirationMode, expirationMode,
message.get('sent_at'), message.get('sent_at'),
'updateExpireTimer() remote change', 'updateExpireTimer() remote change',

@ -45,12 +45,7 @@ import { isUsAnySogsFromCache } from '../session/apis/open_group_api/sogsv3/know
import { GetNetworkTime } from '../session/apis/snode_api/getNetworkTime'; import { GetNetworkTime } from '../session/apis/snode_api/getNetworkTime';
import { SnodeNamespaces } from '../session/apis/snode_api/namespaces'; import { SnodeNamespaces } from '../session/apis/snode_api/namespaces';
import { DURATION } from '../session/constants'; import { DURATION } from '../session/constants';
import { import { DisappearingMessages } from '../session/disappearing_messages';
changeToDisappearingConversationMode,
checkForExpireUpdateInContentMessage,
setExpirationStartTimestamp,
updateMessageExpiryOnSwarm,
} from '../session/disappearing_messages';
import { TimerOptions } from '../session/disappearing_messages/timerOptions'; import { TimerOptions } from '../session/disappearing_messages/timerOptions';
import { OpenGroupVisibleMessage } from '../session/messages/outgoing/visibleMessage/OpenGroupVisibleMessage'; import { OpenGroupVisibleMessage } from '../session/messages/outgoing/visibleMessage/OpenGroupVisibleMessage';
import { import {
@ -267,7 +262,7 @@ export class MessageModel extends Backbone.Model<MessageAttributes> {
return ''; return '';
} }
const expirationMode = changeToDisappearingConversationMode( const expirationMode = DisappearingMessages.changeToDisappearingConversationMode(
convo, convo,
expireTimerUpdate?.expirationType, expireTimerUpdate?.expirationType,
expireTimer expireTimer
@ -334,7 +329,7 @@ export class MessageModel extends Backbone.Model<MessageAttributes> {
} }
const { expireTimer, fromSync, source } = timerUpdate; const { expireTimer, fromSync, source } = timerUpdate;
const expirationMode = changeToDisappearingConversationMode( const expirationMode = DisappearingMessages.changeToDisappearingConversationMode(
convo, convo,
timerUpdate?.expirationType || 'unknown', timerUpdate?.expirationType || 'unknown',
expireTimer || 0 expireTimer || 0
@ -1022,7 +1017,11 @@ export class MessageModel extends Backbone.Model<MessageAttributes> {
throw new Error('Cannot trigger syncMessage with unknown convo.'); throw new Error('Cannot trigger syncMessage with unknown convo.');
} }
const expireUpdate = await checkForExpireUpdateInContentMessage(content, conversation, true); const expireUpdate = await DisappearingMessages.checkForExpireUpdateInContentMessage(
content,
conversation,
true
);
const syncMessage = buildSyncMessage( const syncMessage = buildSyncMessage(
this.id, this.id,
@ -1108,7 +1107,7 @@ export class MessageModel extends Backbone.Model<MessageAttributes> {
const expireTimer = this.getExpireTimer(); const expireTimer = this.getExpireTimer();
if (canBeDeleteAfterRead && expirationType && expireTimer > 0) { if (canBeDeleteAfterRead && expirationType && expireTimer > 0) {
const expirationMode = changeToDisappearingConversationMode( const expirationMode = DisappearingMessages.changeToDisappearingConversationMode(
convo, convo,
expirationType, expirationType,
expireTimer expireTimer
@ -1117,11 +1116,15 @@ export class MessageModel extends Backbone.Model<MessageAttributes> {
if (expirationMode === 'legacy' || expirationMode === 'deleteAfterRead') { if (expirationMode === 'legacy' || expirationMode === 'deleteAfterRead') {
if (this.isIncoming() && !this.isExpiring()) { if (this.isIncoming() && !this.isExpiring()) {
// NOTE We want to trigger disappearing now and then the TTL can update itself while it is running. Otherwise the UI is blocked until the request is completed. // NOTE We want to trigger disappearing now and then the TTL can update itself while it is running. Otherwise the UI is blocked until the request is completed.
void updateMessageExpiryOnSwarm(this, 'markMessageReadNoCommit()', true); void DisappearingMessages.updateMessageExpiryOnSwarm(
this,
'markMessageReadNoCommit()',
true
);
} }
this.set({ this.set({
expirationStartTimestamp: setExpirationStartTimestamp( expirationStartTimestamp: DisappearingMessages.setExpirationStartTimestamp(
expirationMode, expirationMode,
readAt, readAt,
'markMessageReadNoCommit', 'markMessageReadNoCommit',

@ -22,12 +22,7 @@ import { findCachedBlindedMatchOrLookupOnAllServers } from '../session/apis/open
import { getConversationController } from '../session/conversations'; import { getConversationController } from '../session/conversations';
import { concatUInt8Array, getSodiumRenderer } from '../session/crypto'; import { concatUInt8Array, getSodiumRenderer } from '../session/crypto';
import { removeMessagePadding } from '../session/crypto/BufferPadding'; import { removeMessagePadding } from '../session/crypto/BufferPadding';
import { import { DisappearingMessages } from '../session/disappearing_messages';
changeToDisappearingMessageType,
checkForExpireUpdateInContentMessage,
checkHasOutdatedDisappearingMessageClient,
setExpirationStartTimestamp,
} from '../session/disappearing_messages';
import { ProfileManager } from '../session/profile_manager/ProfileManager'; import { ProfileManager } from '../session/profile_manager/ProfileManager';
import { GroupUtils, UserUtils } from '../session/utils'; import { GroupUtils, UserUtils } from '../session/utils';
import { perfEnd, perfStart } from '../session/utils/Performance'; import { perfEnd, perfStart } from '../session/utils/Performance';
@ -475,7 +470,7 @@ export async function innerHandleSwarmContentMessage(
content.dataMessage.profileKey = null; content.dataMessage.profileKey = null;
} }
const expireUpdate = await checkForExpireUpdateInContentMessage( const expireUpdate = await DisappearingMessages.checkForExpireUpdateInContentMessage(
content, content,
conversationModelForUIUpdate conversationModelForUIUpdate
); );
@ -487,7 +482,7 @@ export async function innerHandleSwarmContentMessage(
// TODO legacy messages support will be removed in a future release // TODO legacy messages support will be removed in a future release
if (expireUpdate?.isDisappearingMessagesV2Released) { if (expireUpdate?.isDisappearingMessagesV2Released) {
await checkHasOutdatedDisappearingMessageClient( await DisappearingMessages.checkHasOutdatedDisappearingMessageClient(
conversationModelForUIUpdate, conversationModelForUIUpdate,
senderConversationModel, senderConversationModel,
expireUpdate expireUpdate
@ -866,13 +861,13 @@ export async function handleDataExtractionNotification(
if (convo && expirationMode && expireTimer > 0) { if (convo && expirationMode && expireTimer > 0) {
expirationType = expirationType =
expirationMode !== 'off' expirationMode !== 'off'
? changeToDisappearingMessageType(convo, expireTimer, expirationMode) ? DisappearingMessages.changeToDisappearingMessageType(convo, expireTimer, expirationMode)
: undefined; : undefined;
// NOTE Triggers disappearing for an incoming DataExtractionNotification message // NOTE Triggers disappearing for an incoming DataExtractionNotification message
// TODO legacy messages support will be removed in a future release // TODO legacy messages support will be removed in a future release
if (expirationMode === 'legacy' || expirationMode === 'deleteAfterSend') { if (expirationMode === 'legacy' || expirationMode === 'deleteAfterSend') {
expirationStartTimestamp = setExpirationStartTimestamp( expirationStartTimestamp = DisappearingMessages.setExpirationStartTimestamp(
expirationMode, expirationMode,
undefined, undefined,
'handleDataExtractionNotification' 'handleDataExtractionNotification'

@ -19,7 +19,7 @@ import {
createSwarmMessageSentFromNotUs, createSwarmMessageSentFromNotUs,
createSwarmMessageSentFromUs, createSwarmMessageSentFromUs,
} from '../models/messageFactory'; } from '../models/messageFactory';
import { getMessageReadyToDisappear } from '../session/disappearing_messages'; import { DisappearingMessages } from '../session/disappearing_messages';
import { DisappearingMessageUpdate } from '../session/disappearing_messages/types'; import { DisappearingMessageUpdate } from '../session/disappearing_messages/types';
import { ProfileManager } from '../session/profile_manager/ProfileManager'; import { ProfileManager } from '../session/profile_manager/ProfileManager';
import { isUsFromCache } from '../session/utils/User'; import { isUsFromCache } from '../session/utils/User';
@ -257,7 +257,11 @@ export async function handleSwarmDataMessage(
}); });
if (!isEmpty(expireUpdate)) { if (!isEmpty(expireUpdate)) {
msgModel = getMessageReadyToDisappear(convoToAddMessageTo, msgModel, expireUpdate); msgModel = DisappearingMessages.getMessageReadyToDisappear(
convoToAddMessageTo,
msgModel,
expireUpdate
);
} }
await handleSwarmMessage( await handleSwarmMessage(

@ -10,10 +10,7 @@ import { Quote } from './types';
import { ConversationTypeEnum } from '../models/conversationAttributes'; import { ConversationTypeEnum } from '../models/conversationAttributes';
import { MessageDirection } from '../models/messageType'; import { MessageDirection } from '../models/messageType';
import { SignalService } from '../protobuf'; import { SignalService } from '../protobuf';
import { import { DisappearingMessages } from '../session/disappearing_messages';
changeToDisappearingConversationMode,
setExpirationStartTimestamp,
} from '../session/disappearing_messages';
import { ProfileManager } from '../session/profile_manager/ProfileManager'; import { ProfileManager } from '../session/profile_manager/ProfileManager';
import { PubKey } from '../session/types'; import { PubKey } from '../session/types';
import { UserUtils } from '../session/utils'; import { UserUtils } from '../session/utils';
@ -347,7 +344,7 @@ async function markConvoAsReadIfOutgoingMessage(
expireTimer > 0 && expireTimer > 0 &&
Boolean(message.getExpirationStartTimestamp()) === false Boolean(message.getExpirationStartTimestamp()) === false
) { ) {
const expirationMode = changeToDisappearingConversationMode( const expirationMode = DisappearingMessages.changeToDisappearingConversationMode(
conversation, conversation,
expirationType, expirationType,
expireTimer expireTimer
@ -355,7 +352,7 @@ async function markConvoAsReadIfOutgoingMessage(
if (expirationMode !== 'off') { if (expirationMode !== 'off') {
message.set({ message.set({
expirationStartTimestamp: setExpirationStartTimestamp( expirationStartTimestamp: DisappearingMessages.setExpirationStartTimestamp(
expirationMode, expirationMode,
message.get('sent_at'), message.get('sent_at'),
'markConvoAsReadIfOutgoingMessage', 'markConvoAsReadIfOutgoingMessage',
@ -397,7 +394,7 @@ export async function handleMessageJob(
messageModel.getExpireTimer() > 0 && messageModel.getExpireTimer() > 0 &&
Boolean(messageModel.getExpirationStartTimestamp()) === false Boolean(messageModel.getExpirationStartTimestamp()) === false
) { ) {
const expirationMode = changeToDisappearingConversationMode( const expirationMode = DisappearingMessages.changeToDisappearingConversationMode(
conversation, conversation,
messageModel.getExpirationType(), messageModel.getExpirationType(),
messageModel.getExpireTimer() messageModel.getExpireTimer()
@ -410,7 +407,7 @@ export async function handleMessageJob(
expirationMode === 'deleteAfterSend' expirationMode === 'deleteAfterSend'
) { ) {
messageModel.set({ messageModel.set({
expirationStartTimestamp: setExpirationStartTimestamp( expirationStartTimestamp: DisappearingMessages.setExpirationStartTimestamp(
expirationMode, expirationMode,
messageModel.get('sent_at'), messageModel.get('sent_at'),
'handleMessageJob', 'handleMessageJob',
@ -437,7 +434,7 @@ export async function handleMessageJob(
} }
const expireTimerUpdate = expirationTimerUpdate?.expireTimer || 0; const expireTimerUpdate = expirationTimerUpdate?.expireTimer || 0;
const expirationModeUpdate = changeToDisappearingConversationMode( const expirationModeUpdate = DisappearingMessages.changeToDisappearingConversationMode(
conversation, conversation,
expirationTimerUpdate?.expirationType, expirationTimerUpdate?.expirationType,
expireTimerUpdate expireTimerUpdate

@ -38,7 +38,7 @@ import { EnvelopePlus } from '../../../../receiver/types';
import { assertUnreachable } from '../../../../types/sqlSharedTypes'; import { assertUnreachable } from '../../../../types/sqlSharedTypes';
import { getSodiumRenderer } from '../../../crypto'; import { getSodiumRenderer } from '../../../crypto';
import { removeMessagePadding } from '../../../crypto/BufferPadding'; import { removeMessagePadding } from '../../../crypto/BufferPadding';
import { destroyMessagesAndUpdateRedux } from '../../../disappearing_messages'; import { DisappearingMessages } from '../../../disappearing_messages';
import { UserUtils } from '../../../utils'; import { UserUtils } from '../../../utils';
import { sogsRollingDeletions } from './sogsRollingDeletions'; import { sogsRollingDeletions } from './sogsRollingDeletions';
import { processMessagesUsingCache } from './sogsV3MutationCache'; import { processMessagesUsingCache } from './sogsV3MutationCache';
@ -182,7 +182,7 @@ const handleSogsV3DeletedMessages = async (
}); });
if (messageIds && messageIds.length) { if (messageIds && messageIds.length) {
await destroyMessagesAndUpdateRedux( await DisappearingMessages.destroyMessagesAndUpdateRedux(
messageIds.map(messageId => ({ messageIds.map(messageId => ({
conversationKey: convoId, conversationKey: convoId,
messageId, messageId,

@ -23,7 +23,7 @@ import {
DisappearingMessageUpdate, DisappearingMessageUpdate,
} from './types'; } from './types';
export async function destroyMessagesAndUpdateRedux( async function destroyMessagesAndUpdateRedux(
messages: Array<{ messages: Array<{
conversationKey: string; conversationKey: string;
messageId: string; messageId: string;
@ -131,7 +131,7 @@ const throttledCheckExpiringMessages = throttle(checkExpiringMessages, 1000);
let isInit = false; let isInit = false;
export const initExpiringMessageListener = () => { const initExpiringMessageListener = () => {
if (isInit) { if (isInit) {
throw new Error('expiring messages listener is already init'); throw new Error('expiring messages listener is already init');
} }
@ -143,11 +143,11 @@ export const initExpiringMessageListener = () => {
isInit = true; isInit = true;
}; };
export const updateExpiringMessagesCheck = () => { const updateExpiringMessagesCheck = () => {
void throttledCheckExpiringMessages(); void throttledCheckExpiringMessages();
}; };
export function setExpirationStartTimestamp( function setExpirationStartTimestamp(
mode: DisappearingMessageConversationModeType, mode: DisappearingMessageConversationModeType,
timestamp?: number, timestamp?: number,
// these are for debugging purposes // these are for debugging purposes
@ -224,7 +224,7 @@ export function setExpirationStartTimestamp(
* @param expirationMode DisappearingMessageConversationModeType * @param expirationMode DisappearingMessageConversationModeType
* @returns Disappearing mode we should use * @returns Disappearing mode we should use
*/ */
export function changeToDisappearingMessageType( function changeToDisappearingMessageType(
convo: ConversationModel, convo: ConversationModel,
expireTimer: number, expireTimer: number,
expirationMode?: DisappearingMessageConversationModeType expirationMode?: DisappearingMessageConversationModeType
@ -256,7 +256,7 @@ export function changeToDisappearingMessageType(
* @param expireTimer in seconds, 0 means no expiration * @param expireTimer in seconds, 0 means no expiration
* @returns * @returns
*/ */
export function changeToDisappearingConversationMode( function changeToDisappearingConversationMode(
convo: ConversationModel, convo: ConversationModel,
expirationType?: DisappearingMessageType, expirationType?: DisappearingMessageType,
expireTimer?: number expireTimer?: number
@ -273,7 +273,7 @@ export function changeToDisappearingConversationMode(
} }
// TODO legacy messages support will be removed in a future release // TODO legacy messages support will be removed in a future release
export async function checkForExpireUpdateInContentMessage( async function checkForExpireUpdateInContentMessage(
content: SignalService.Content, content: SignalService.Content,
convoToUpdate: ConversationModel, convoToUpdate: ConversationModel,
isOutgoing?: boolean isOutgoing?: boolean
@ -415,7 +415,7 @@ export async function checkForExpireUpdateInContentMessage(
/** /**
* Checks if an outgoing message is meant to disappear and if so trigger the timer * Checks if an outgoing message is meant to disappear and if so trigger the timer
*/ */
export function checkForExpiringOutgoingMessage(message: MessageModel, location?: string) { function checkForExpiringOutgoingMessage(message: MessageModel, location?: string) {
const convo = message.getConversation(); const convo = message.getConversation();
const expireTimer = message.getExpireTimer(); const expireTimer = message.getExpireTimer();
const expirationType = message.getExpirationType(); const expirationType = message.getExpirationType();
@ -441,7 +441,7 @@ export function checkForExpiringOutgoingMessage(message: MessageModel, location?
} }
// TODO legacy messages support will be removed in a future release // TODO legacy messages support will be removed in a future release
export function getMessageReadyToDisappear( function getMessageReadyToDisappear(
conversationModel: ConversationModel, conversationModel: ConversationModel,
messageModel: MessageModel, messageModel: MessageModel,
expireUpdate?: DisappearingMessageUpdate expireUpdate?: DisappearingMessageUpdate
@ -495,7 +495,7 @@ export function getMessageReadyToDisappear(
return messageModel; return messageModel;
} }
export async function checkHasOutdatedDisappearingMessageClient( async function checkHasOutdatedDisappearingMessageClient(
convoToUpdate: ConversationModel, convoToUpdate: ConversationModel,
sender: ConversationModel, sender: ConversationModel,
expireUpdate: DisappearingMessageUpdate expireUpdate: DisappearingMessageUpdate
@ -533,7 +533,7 @@ export async function checkHasOutdatedDisappearingMessageClient(
} }
} }
export async function updateMessageExpiryOnSwarm( async function updateMessageExpiryOnSwarm(
message: MessageModel, message: MessageModel,
callLocation?: string, // this is for debugging purposes callLocation?: string, // this is for debugging purposes
shouldCommit?: boolean shouldCommit?: boolean
@ -588,3 +588,17 @@ export async function updateMessageExpiryOnSwarm(
return message; return message;
} }
export const DisappearingMessages = {
destroyMessagesAndUpdateRedux,
initExpiringMessageListener,
updateExpiringMessagesCheck,
setExpirationStartTimestamp,
changeToDisappearingMessageType,
changeToDisappearingConversationMode,
checkForExpireUpdateInContentMessage,
checkForExpiringOutgoingMessage,
getMessageReadyToDisappear,
checkHasOutdatedDisappearingMessageClient,
updateMessageExpiryOnSwarm,
};

@ -17,10 +17,7 @@ import { SnodeNamespaces } from '../apis/snode_api/namespaces';
import { getConversationController } from '../conversations'; import { getConversationController } from '../conversations';
import { generateCurve25519KeyPairWithoutPrefix } from '../crypto'; import { generateCurve25519KeyPairWithoutPrefix } from '../crypto';
import { encryptUsingSessionProtocol } from '../crypto/MessageEncrypter'; import { encryptUsingSessionProtocol } from '../crypto/MessageEncrypter';
import { import { DisappearingMessages } from '../disappearing_messages';
changeToDisappearingMessageType,
setExpirationStartTimestamp,
} from '../disappearing_messages';
import { DisappearAfterSendOnly } from '../disappearing_messages/types'; import { DisappearAfterSendOnly } from '../disappearing_messages/types';
import { ClosedGroupAddedMembersMessage } from '../messages/outgoing/controlMessage/group/ClosedGroupAddedMembersMessage'; import { ClosedGroupAddedMembersMessage } from '../messages/outgoing/controlMessage/group/ClosedGroupAddedMembersMessage';
import { ClosedGroupEncryptionPairMessage } from '../messages/outgoing/controlMessage/group/ClosedGroupEncryptionPairMessage'; import { ClosedGroupEncryptionPairMessage } from '../messages/outgoing/controlMessage/group/ClosedGroupEncryptionPairMessage';
@ -72,7 +69,7 @@ export async function initiateClosedGroupUpdate(
isGroupV3 ? ConversationTypeEnum.GROUPV3 : ConversationTypeEnum.GROUP isGroupV3 ? ConversationTypeEnum.GROUPV3 : ConversationTypeEnum.GROUP
); );
const expirationType = changeToDisappearingMessageType( const expirationType = DisappearingMessages.changeToDisappearingMessageType(
convo, convo,
convo.getExpireTimer(), convo.getExpireTimer(),
convo.getExpirationMode() convo.getExpirationMode()
@ -181,13 +178,13 @@ export async function addUpdateMessage(
if (convo && expirationMode && expireTimer > 0) { if (convo && expirationMode && expireTimer > 0) {
expirationType = expirationType =
expirationMode !== 'off' expirationMode !== 'off'
? changeToDisappearingMessageType(convo, expireTimer, expirationMode) ? DisappearingMessages.changeToDisappearingMessageType(convo, expireTimer, expirationMode)
: undefined; : undefined;
// NOTE Triggers disappearing for an incoming groupUpdate message // NOTE Triggers disappearing for an incoming groupUpdate message
// TODO legacy messages support will be removed in a future release // TODO legacy messages support will be removed in a future release
if (expirationMode === 'legacy' || expirationMode === 'deleteAfterSend') { if (expirationMode === 'legacy' || expirationMode === 'deleteAfterSend') {
expirationStartTimestamp = setExpirationStartTimestamp( expirationStartTimestamp = DisappearingMessages.setExpirationStartTimestamp(
expirationMode, expirationMode,
sentAt, sentAt,
'addUpdateMessage' 'addUpdateMessage'
@ -339,7 +336,11 @@ async function sendAddedMembers(
members, members,
keypair: encryptionKeyPair, keypair: encryptionKeyPair,
identifier: messageId || uuidv4(), identifier: messageId || uuidv4(),
expirationType: changeToDisappearingMessageType(convo, existingExpireTimer, expirationMode), expirationType: DisappearingMessages.changeToDisappearingMessageType(
convo,
existingExpireTimer,
expirationMode
),
expireTimer: existingExpireTimer, expireTimer: existingExpireTimer,
}); });

@ -26,10 +26,7 @@ import { SnodeAPIStore } from '../apis/snode_api/storeMessage';
import { getConversationController } from '../conversations'; import { getConversationController } from '../conversations';
import { MessageEncrypter } from '../crypto'; import { MessageEncrypter } from '../crypto';
import { addMessagePadding } from '../crypto/BufferPadding'; import { addMessagePadding } from '../crypto/BufferPadding';
import { import { DisappearingMessages } from '../disappearing_messages';
changeToDisappearingConversationMode,
updateMessageExpiryOnSwarm,
} from '../disappearing_messages';
import { ContentMessage } from '../messages/outgoing'; import { ContentMessage } from '../messages/outgoing';
import { ConfigurationMessage } from '../messages/outgoing/controlMessage/ConfigurationMessage'; import { ConfigurationMessage } from '../messages/outgoing/controlMessage/ConfigurationMessage';
import { SharedConfigMessage } from '../messages/outgoing/controlMessage/SharedConfigMessage'; import { SharedConfigMessage } from '../messages/outgoing/controlMessage/SharedConfigMessage';
@ -172,7 +169,7 @@ async function send(
// a message has started to disappear // a message has started to disappear
foundMessage.getExpirationStartTimestamp() foundMessage.getExpirationStartTimestamp()
) { ) {
const expirationMode = changeToDisappearingConversationMode( const expirationMode = DisappearingMessages.changeToDisappearingConversationMode(
convo, convo,
expirationType, expirationType,
expireTimer expireTimer
@ -185,7 +182,7 @@ async function send(
canBeDeleteAfterRead && canBeDeleteAfterRead &&
(expirationMode === 'legacy' || expirationMode === 'deleteAfterRead') (expirationMode === 'legacy' || expirationMode === 'deleteAfterRead')
) { ) {
await updateMessageExpiryOnSwarm(foundMessage, 'send()'); await DisappearingMessages.updateMessageExpiryOnSwarm(foundMessage, 'send()');
} }
} }

@ -2,7 +2,7 @@ import _ from 'lodash';
import { Data } from '../../data/data'; import { Data } from '../../data/data';
import { SignalService } from '../../protobuf'; import { SignalService } from '../../protobuf';
import { PnServer } from '../apis/push_notification_api'; import { PnServer } from '../apis/push_notification_api';
import { checkForExpiringOutgoingMessage } from '../disappearing_messages'; import { DisappearingMessages } from '../disappearing_messages';
import { OpenGroupVisibleMessage } from '../messages/outgoing/visibleMessage/OpenGroupVisibleMessage'; import { OpenGroupVisibleMessage } from '../messages/outgoing/visibleMessage/OpenGroupVisibleMessage';
import { RawMessage } from '../types'; import { RawMessage } from '../types';
import { UserUtils } from '../utils'; import { UserUtils } from '../utils';
@ -127,7 +127,7 @@ async function handleMessageSentSuccess(
sent_at: effectiveTimestamp, sent_at: effectiveTimestamp,
}); });
checkForExpiringOutgoingMessage(fetchedMessage, 'handleMessageSentSuccess'); DisappearingMessages.checkForExpiringOutgoingMessage(fetchedMessage, 'handleMessageSentSuccess');
await fetchedMessage.commit(); await fetchedMessage.commit();
fetchedMessage.getConversation()?.updateLastMessage(); fetchedMessage.getConversation()?.updateLastMessage();

@ -30,10 +30,7 @@ import { PnServer } from '../../apis/push_notification_api';
import { GetNetworkTime } from '../../apis/snode_api/getNetworkTime'; import { GetNetworkTime } from '../../apis/snode_api/getNetworkTime';
import { SnodeNamespaces } from '../../apis/snode_api/namespaces'; import { SnodeNamespaces } from '../../apis/snode_api/namespaces';
import { DURATION } from '../../constants'; import { DURATION } from '../../constants';
import { import { DisappearingMessages } from '../../disappearing_messages';
changeToDisappearingMessageType,
setExpirationStartTimestamp,
} from '../../disappearing_messages';
import { MessageSender } from '../../sending'; import { MessageSender } from '../../sending';
import { getIsRinging } from '../RingingManager'; import { getIsRinging } from '../RingingManager';
import { getBlackSilenceMediaStream } from './Silence'; import { getBlackSilenceMediaStream } from './Silence';
@ -521,10 +518,14 @@ export async function USER_callRecipient(recipient: string) {
if (calledConvo && expirationMode && expireTimer > 0) { if (calledConvo && expirationMode && expireTimer > 0) {
// TODO legacy messages support will be removed in a future release // TODO legacy messages support will be removed in a future release
expirationType = changeToDisappearingMessageType(calledConvo, expireTimer, expirationMode); expirationType = DisappearingMessages.changeToDisappearingMessageType(
calledConvo,
expireTimer,
expirationMode
);
if (expirationMode === 'legacy' || expirationMode === 'deleteAfterSend') { if (expirationMode === 'legacy' || expirationMode === 'deleteAfterSend') {
expirationStartTimestamp = setExpirationStartTimestamp( expirationStartTimestamp = DisappearingMessages.setExpirationStartTimestamp(
expirationMode, expirationMode,
now, now,
'USER_callRecipient' 'USER_callRecipient'
@ -906,10 +907,14 @@ export async function USER_acceptIncomingCallRequest(fromSender: string) {
if (callerConvo && expirationMode && expireTimer > 0) { if (callerConvo && expirationMode && expireTimer > 0) {
// TODO legacy messages support will be removed in a future release // TODO legacy messages support will be removed in a future release
expirationType = changeToDisappearingMessageType(callerConvo, expireTimer, expirationMode); expirationType = DisappearingMessages.changeToDisappearingMessageType(
callerConvo,
expireTimer,
expirationMode
);
if (expirationMode === 'legacy' || expirationMode === 'deleteAfterSend') { if (expirationMode === 'legacy' || expirationMode === 'deleteAfterSend') {
expirationStartTimestamp = setExpirationStartTimestamp( expirationStartTimestamp = DisappearingMessages.setExpirationStartTimestamp(
expirationMode, expirationMode,
networkTimestamp, networkTimestamp,
'USER_acceptIncomingCallRequest' 'USER_acceptIncomingCallRequest'
@ -1263,14 +1268,14 @@ async function addMissedCallMessage(callerPubkey: string, sentAt: number) {
if (incomingCallConversation && expirationMode && expireTimer > 0) { if (incomingCallConversation && expirationMode && expireTimer > 0) {
// TODO legacy messages support will be removed in a future release // TODO legacy messages support will be removed in a future release
expirationType = changeToDisappearingMessageType( expirationType = DisappearingMessages.changeToDisappearingMessageType(
incomingCallConversation, incomingCallConversation,
expireTimer, expireTimer,
expirationMode expirationMode
); );
if (expirationMode === 'legacy' || expirationMode === 'deleteAfterSend') { if (expirationMode === 'legacy' || expirationMode === 'deleteAfterSend') {
expirationStartTimestamp = setExpirationStartTimestamp( expirationStartTimestamp = DisappearingMessages.setExpirationStartTimestamp(
expirationMode, expirationMode,
sentAt, sentAt,
'addMissedCallMessage' 'addMissedCallMessage'

@ -4,13 +4,7 @@ import Sinon from 'sinon';
import { ConversationModel } from '../../../../models/conversation'; import { ConversationModel } from '../../../../models/conversation';
import { ConversationTypeEnum } from '../../../../models/conversationAttributes'; import { ConversationTypeEnum } from '../../../../models/conversationAttributes';
import { GetNetworkTime } from '../../../../session/apis/snode_api/getNetworkTime'; import { GetNetworkTime } from '../../../../session/apis/snode_api/getNetworkTime';
import { import { DisappearingMessages } from '../../../../session/disappearing_messages';
changeToDisappearingConversationMode,
changeToDisappearingMessageType,
checkForExpireUpdateInContentMessage,
checkForExpiringOutgoingMessage,
setExpirationStartTimestamp,
} from '../../../../session/disappearing_messages';
import { import {
DisappearingMessageConversationModeType, DisappearingMessageConversationModeType,
DisappearingMessageType, DisappearingMessageType,
@ -54,7 +48,7 @@ describe('DisappearingMessage', () => {
describe('setExpirationStartTimestamp', () => { describe('setExpirationStartTimestamp', () => {
it('returns a valid unix timestamp for deleteAfterRead', async () => { it('returns a valid unix timestamp for deleteAfterRead', async () => {
const mode: DisappearingMessageConversationModeType = 'deleteAfterRead'; const mode: DisappearingMessageConversationModeType = 'deleteAfterRead';
const expirationStartTimestamp = setExpirationStartTimestamp(mode); const expirationStartTimestamp = DisappearingMessages.setExpirationStartTimestamp(mode);
expect(expirationStartTimestamp, 'it should return a number').to.be.is.a('number'); expect(expirationStartTimestamp, 'it should return a number').to.be.is.a('number');
expect(isValidUnixTimestamp(expirationStartTimestamp!), 'it should be a valid unix timestamp') expect(isValidUnixTimestamp(expirationStartTimestamp!), 'it should be a valid unix timestamp')
@ -62,7 +56,7 @@ describe('DisappearingMessage', () => {
}); });
it('returns a valid unix timestamp for deleteAfterSend', async () => { it('returns a valid unix timestamp for deleteAfterSend', async () => {
const mode: DisappearingMessageConversationModeType = 'deleteAfterSend'; const mode: DisappearingMessageConversationModeType = 'deleteAfterSend';
const expirationStartTimestamp = setExpirationStartTimestamp(mode); const expirationStartTimestamp = DisappearingMessages.setExpirationStartTimestamp(mode);
expect(expirationStartTimestamp, 'it should return a number').to.be.is.a('number'); expect(expirationStartTimestamp, 'it should return a number').to.be.is.a('number');
expect(isValidUnixTimestamp(expirationStartTimestamp!), 'it should be a valid unix timestamp') expect(isValidUnixTimestamp(expirationStartTimestamp!), 'it should be a valid unix timestamp')
@ -70,14 +64,17 @@ describe('DisappearingMessage', () => {
}); });
it('returns undefined when disappearing messages is off', async () => { it('returns undefined when disappearing messages is off', async () => {
const mode: DisappearingMessageConversationModeType = 'off'; const mode: DisappearingMessageConversationModeType = 'off';
const expirationStartTimestamp = setExpirationStartTimestamp(mode); const expirationStartTimestamp = DisappearingMessages.setExpirationStartTimestamp(mode);
expect(expirationStartTimestamp, 'it should return undefined').to.be.undefined; expect(expirationStartTimestamp, 'it should return undefined').to.be.undefined;
}); });
it('if we give it a timestamp it returns the older timestamp for deleteAfterRead', async () => { it('if we give it a timestamp it returns the older timestamp for deleteAfterRead', async () => {
const mode: DisappearingMessageConversationModeType = 'deleteAfterRead'; const mode: DisappearingMessageConversationModeType = 'deleteAfterRead';
const timestamp = new Date().valueOf(); const timestamp = new Date().valueOf();
const expirationStartTimestamp = setExpirationStartTimestamp(mode, timestamp); const expirationStartTimestamp = DisappearingMessages.setExpirationStartTimestamp(
mode,
timestamp
);
expect(expirationStartTimestamp, 'it should return a number').to.be.is.a('number'); expect(expirationStartTimestamp, 'it should return a number').to.be.is.a('number');
expect(isValidUnixTimestamp(expirationStartTimestamp!), 'it should be a valid unix timestamp') expect(isValidUnixTimestamp(expirationStartTimestamp!), 'it should be a valid unix timestamp')
@ -90,7 +87,10 @@ describe('DisappearingMessage', () => {
it('if we give it a timestamp it returns the older timestamp for deleteAfterSend', async () => { it('if we give it a timestamp it returns the older timestamp for deleteAfterSend', async () => {
const mode: DisappearingMessageConversationModeType = 'deleteAfterSend'; const mode: DisappearingMessageConversationModeType = 'deleteAfterSend';
const timestamp = new Date().valueOf(); const timestamp = new Date().valueOf();
const expirationStartTimestamp = setExpirationStartTimestamp(mode, timestamp); const expirationStartTimestamp = DisappearingMessages.setExpirationStartTimestamp(
mode,
timestamp
);
expect(expirationStartTimestamp, 'it should return a number').to.be.is.a('number'); expect(expirationStartTimestamp, 'it should return a number').to.be.is.a('number');
expect(isValidUnixTimestamp(expirationStartTimestamp!), 'it should be a valid unix timestamp') expect(isValidUnixTimestamp(expirationStartTimestamp!), 'it should be a valid unix timestamp')
@ -103,7 +103,10 @@ describe('DisappearingMessage', () => {
it('if we give it an invalid timestamp it returns undefined', async () => { it('if we give it an invalid timestamp it returns undefined', async () => {
const mode: DisappearingMessageConversationModeType = 'deleteAfterSend'; const mode: DisappearingMessageConversationModeType = 'deleteAfterSend';
const timestamp = -1; const timestamp = -1;
const expirationStartTimestamp = setExpirationStartTimestamp(mode, timestamp); const expirationStartTimestamp = DisappearingMessages.setExpirationStartTimestamp(
mode,
timestamp
);
expect(expirationStartTimestamp, 'it should return undefined').to.be.undefined; expect(expirationStartTimestamp, 'it should return undefined').to.be.undefined;
}); });
@ -116,7 +119,7 @@ describe('DisappearingMessage', () => {
} as any); } as any);
const expireTimer = 0; // seconds const expireTimer = 0; // seconds
const expirationMode = 'off'; const expirationMode = 'off';
const messageExpirationType = changeToDisappearingMessageType( const messageExpirationType = DisappearingMessages.changeToDisappearingMessageType(
conversation, conversation,
expireTimer, expireTimer,
expirationMode expirationMode
@ -130,7 +133,7 @@ describe('DisappearingMessage', () => {
} as any); } as any);
const expireTimer = 60; // seconds const expireTimer = 60; // seconds
const expirationMode = 'deleteAfterRead'; const expirationMode = 'deleteAfterRead';
const messageExpirationType = changeToDisappearingMessageType( const messageExpirationType = DisappearingMessages.changeToDisappearingMessageType(
conversation, conversation,
expireTimer, expireTimer,
expirationMode expirationMode
@ -144,7 +147,7 @@ describe('DisappearingMessage', () => {
} as any); } as any);
const expireTimer = 60; // seconds const expireTimer = 60; // seconds
const expirationMode = 'deleteAfterSend'; const expirationMode = 'deleteAfterSend';
const messageExpirationType = changeToDisappearingMessageType( const messageExpirationType = DisappearingMessages.changeToDisappearingMessageType(
conversation, conversation,
expireTimer, expireTimer,
expirationMode expirationMode
@ -159,7 +162,7 @@ describe('DisappearingMessage', () => {
} as any); } as any);
const expireTimer = 60; // seconds const expireTimer = 60; // seconds
const expirationMode = 'deleteAfterRead'; // not correct const expirationMode = 'deleteAfterRead'; // not correct
const messageExpirationType = changeToDisappearingMessageType( const messageExpirationType = DisappearingMessages.changeToDisappearingMessageType(
ourConversation, ourConversation,
expireTimer, expireTimer,
expirationMode expirationMode
@ -176,7 +179,7 @@ describe('DisappearingMessage', () => {
} as any); } as any);
const expireTimer = 60; // seconds const expireTimer = 60; // seconds
const expirationMode = 'deleteAfterRead'; // not correct const expirationMode = 'deleteAfterRead'; // not correct
const messageExpirationType = changeToDisappearingMessageType( const messageExpirationType = DisappearingMessages.changeToDisappearingMessageType(
ourConversation, ourConversation,
expireTimer, expireTimer,
expirationMode expirationMode
@ -191,7 +194,7 @@ describe('DisappearingMessage', () => {
} as any); } as any);
const expireTimer = 0; // seconds const expireTimer = 0; // seconds
const expirationMode = 'legacy'; const expirationMode = 'legacy';
const messageExpirationType = changeToDisappearingMessageType( const messageExpirationType = DisappearingMessages.changeToDisappearingMessageType(
conversation, conversation,
expireTimer, expireTimer,
expirationMode expirationMode
@ -204,7 +207,10 @@ describe('DisappearingMessage', () => {
...conversationArgs, ...conversationArgs,
} as any); } as any);
const expireTimer = 0; // seconds const expireTimer = 0; // seconds
const messageExpirationType = changeToDisappearingMessageType(conversation, expireTimer); const messageExpirationType = DisappearingMessages.changeToDisappearingMessageType(
conversation,
expireTimer
);
expect(messageExpirationType, 'returns unknown').to.be.eq('unknown'); expect(messageExpirationType, 'returns unknown').to.be.eq('unknown');
}); });
@ -218,7 +224,7 @@ describe('DisappearingMessage', () => {
} as any); } as any);
const expirationType = 'deleteAfterRead'; // not correct const expirationType = 'deleteAfterRead'; // not correct
const expireTimer = 60; // seconds const expireTimer = 60; // seconds
const conversationMode = changeToDisappearingConversationMode( const conversationMode = DisappearingMessages.changeToDisappearingConversationMode(
ourConversation, ourConversation,
expirationType, expirationType,
expireTimer expireTimer
@ -235,7 +241,7 @@ describe('DisappearingMessage', () => {
} as any); } as any);
const expirationType = 'deleteAfterRead'; // not correct const expirationType = 'deleteAfterRead'; // not correct
const expireTimer = 60; // seconds const expireTimer = 60; // seconds
const conversationMode = changeToDisappearingConversationMode( const conversationMode = DisappearingMessages.changeToDisappearingConversationMode(
ourConversation, ourConversation,
expirationType, expirationType,
expireTimer expireTimer
@ -249,7 +255,7 @@ describe('DisappearingMessage', () => {
} as any); } as any);
const expirationType = 'deleteAfterRead'; const expirationType = 'deleteAfterRead';
const expireTimer = 60; // seconds const expireTimer = 60; // seconds
const conversationMode = changeToDisappearingConversationMode( const conversationMode = DisappearingMessages.changeToDisappearingConversationMode(
ourConversation, ourConversation,
expirationType, expirationType,
expireTimer expireTimer
@ -263,7 +269,7 @@ describe('DisappearingMessage', () => {
} as any); } as any);
const expirationType = 'deleteAfterSend'; const expirationType = 'deleteAfterSend';
const expireTimer = 60; // seconds const expireTimer = 60; // seconds
const conversationMode = changeToDisappearingConversationMode( const conversationMode = DisappearingMessages.changeToDisappearingConversationMode(
ourConversation, ourConversation,
expirationType, expirationType,
expireTimer expireTimer
@ -275,7 +281,7 @@ describe('DisappearingMessage', () => {
const conversation = new ConversationModel({ ...conversationArgs } as any); const conversation = new ConversationModel({ ...conversationArgs } as any);
const expirationType: DisappearingMessageType = 'unknown'; const expirationType: DisappearingMessageType = 'unknown';
const expireTimer = 0; // seconds const expireTimer = 0; // seconds
const conversationMode = changeToDisappearingConversationMode( const conversationMode = DisappearingMessages.changeToDisappearingConversationMode(
conversation, conversation,
expirationType, expirationType,
expireTimer expireTimer
@ -286,7 +292,7 @@ describe('DisappearingMessage', () => {
it('if the type is undefined and expireTimer = 0 then the conversation mode is off', async () => { it('if the type is undefined and expireTimer = 0 then the conversation mode is off', async () => {
const conversation = new ConversationModel({ ...conversationArgs } as any); const conversation = new ConversationModel({ ...conversationArgs } as any);
const expireTimer = 0; // seconds const expireTimer = 0; // seconds
const conversationMode = changeToDisappearingConversationMode( const conversationMode = DisappearingMessages.changeToDisappearingConversationMode(
conversation, conversation,
undefined, undefined,
expireTimer expireTimer
@ -296,7 +302,9 @@ describe('DisappearingMessage', () => {
}); });
it('if the type and expireTimer are undefined then the conversation mode is off', async () => { it('if the type and expireTimer are undefined then the conversation mode is off', async () => {
const conversation = new ConversationModel({ ...conversationArgs } as any); const conversation = new ConversationModel({ ...conversationArgs } as any);
const conversationMode = changeToDisappearingConversationMode(conversation); const conversationMode = DisappearingMessages.changeToDisappearingConversationMode(
conversation
);
expect(conversationMode, 'returns off').to.be.eq('off'); expect(conversationMode, 'returns off').to.be.eq('off');
}); });
@ -305,7 +313,7 @@ describe('DisappearingMessage', () => {
const conversation = new ConversationModel({ ...conversationArgs } as any); const conversation = new ConversationModel({ ...conversationArgs } as any);
const expirationType: DisappearingMessageType = 'unknown'; const expirationType: DisappearingMessageType = 'unknown';
const expireTimer = 60; // seconds const expireTimer = 60; // seconds
const conversationMode = changeToDisappearingConversationMode( const conversationMode = DisappearingMessages.changeToDisappearingConversationMode(
conversation, conversation,
expirationType, expirationType,
expireTimer expireTimer
@ -316,7 +324,7 @@ describe('DisappearingMessage', () => {
it('if the type is undefined and expireTimer > 0 then the conversation mode is legacy', async () => { it('if the type is undefined and expireTimer > 0 then the conversation mode is legacy', async () => {
const conversation = new ConversationModel({ ...conversationArgs } as any); const conversation = new ConversationModel({ ...conversationArgs } as any);
const expireTimer = 60; // seconds const expireTimer = 60; // seconds
const conversationMode = changeToDisappearingConversationMode( const conversationMode = DisappearingMessages.changeToDisappearingConversationMode(
conversation, conversation,
undefined, undefined,
expireTimer expireTimer
@ -335,7 +343,7 @@ describe('DisappearingMessage', () => {
// TODO legacy messages support will be removed in a future release // TODO legacy messages support will be removed in a future release
Sinon.stub(ReleasedFeatures, 'checkIsDisappearMessageV2FeatureReleased').resolves(true); Sinon.stub(ReleasedFeatures, 'checkIsDisappearMessageV2FeatureReleased').resolves(true);
const expireUpdate = await checkForExpireUpdateInContentMessage( const expireUpdate = await DisappearingMessages.checkForExpireUpdateInContentMessage(
visibleMessage.contentProto(), visibleMessage.contentProto(),
convoToUpdate, convoToUpdate,
true true
@ -366,7 +374,7 @@ describe('DisappearingMessage', () => {
// TODO legacy messages support will be removed in a future release // TODO legacy messages support will be removed in a future release
Sinon.stub(ReleasedFeatures, 'checkIsDisappearMessageV2FeatureReleased').resolves(true); Sinon.stub(ReleasedFeatures, 'checkIsDisappearMessageV2FeatureReleased').resolves(true);
const expireUpdate = await checkForExpireUpdateInContentMessage( const expireUpdate = await DisappearingMessages.checkForExpireUpdateInContentMessage(
disappearingMessage.contentProto(), disappearingMessage.contentProto(),
convoToUpdate, convoToUpdate,
true true
@ -406,7 +414,7 @@ describe('DisappearingMessage', () => {
// TODO legacy messages support will be removed in a future release // TODO legacy messages support will be removed in a future release
Sinon.stub(ReleasedFeatures, 'checkIsDisappearMessageV2FeatureReleased').resolves(true); Sinon.stub(ReleasedFeatures, 'checkIsDisappearMessageV2FeatureReleased').resolves(true);
const expireUpdate = await checkForExpireUpdateInContentMessage( const expireUpdate = await DisappearingMessages.checkForExpireUpdateInContentMessage(
expirationTimerUpdateMessage.contentProto(), expirationTimerUpdateMessage.contentProto(),
convoToUpdate, convoToUpdate,
true true
@ -447,7 +455,7 @@ describe('DisappearingMessage', () => {
// TODO legacy messages support will be removed in a future release // TODO legacy messages support will be removed in a future release
Sinon.stub(ReleasedFeatures, 'checkIsDisappearMessageV2FeatureReleased').resolves(true); Sinon.stub(ReleasedFeatures, 'checkIsDisappearMessageV2FeatureReleased').resolves(true);
const expireUpdate = await checkForExpireUpdateInContentMessage( const expireUpdate = await DisappearingMessages.checkForExpireUpdateInContentMessage(
expirationTimerUpdateMessage.contentProto(), expirationTimerUpdateMessage.contentProto(),
convoToUpdate, convoToUpdate,
true true
@ -485,7 +493,7 @@ describe('DisappearingMessage', () => {
}); });
Sinon.stub(message, 'getConversation').returns(conversation); Sinon.stub(message, 'getConversation').returns(conversation);
checkForExpiringOutgoingMessage(message, 'unit tests'); DisappearingMessages.checkForExpiringOutgoingMessage(message, 'unit tests');
expect(message.getExpirationStartTimestamp(), 'it should be defined').to.not.be.undefined; expect(message.getExpirationStartTimestamp(), 'it should be defined').to.not.be.undefined;
expect( expect(
@ -508,7 +516,7 @@ describe('DisappearingMessage', () => {
}); });
Sinon.stub(message, 'getConversation').returns(conversation); Sinon.stub(message, 'getConversation').returns(conversation);
checkForExpiringOutgoingMessage(message, 'unit tests'); DisappearingMessages.checkForExpiringOutgoingMessage(message, 'unit tests');
expect(message.getExpirationStartTimestamp(), 'it should be undefined').to.be.undefined; expect(message.getExpirationStartTimestamp(), 'it should be undefined').to.be.undefined;
}); });
@ -524,7 +532,7 @@ describe('DisappearingMessage', () => {
}); });
Sinon.stub(message, 'getConversation').returns(conversation); Sinon.stub(message, 'getConversation').returns(conversation);
checkForExpiringOutgoingMessage(message, 'unit tests'); DisappearingMessages.checkForExpiringOutgoingMessage(message, 'unit tests');
expect(message.getExpirationStartTimestamp(), 'it should be undefined').to.be.undefined; expect(message.getExpirationStartTimestamp(), 'it should be undefined').to.be.undefined;
}); });
@ -543,7 +551,7 @@ describe('DisappearingMessage', () => {
}); });
Sinon.stub(message, 'getConversation').returns(conversation); Sinon.stub(message, 'getConversation').returns(conversation);
checkForExpiringOutgoingMessage(message, 'unit tests'); DisappearingMessages.checkForExpiringOutgoingMessage(message, 'unit tests');
expect(message.getExpirationStartTimestamp(), 'it should be defined').to.not.be.undefined; expect(message.getExpirationStartTimestamp(), 'it should be defined').to.not.be.undefined;
expect( expect(

Loading…
Cancel
Save