diff --git a/ts/models/conversations.ts b/ts/models/conversations.ts index eda9fd0343..74606da481 100644 --- a/ts/models/conversations.ts +++ b/ts/models/conversations.ts @@ -3251,7 +3251,8 @@ export class ConversationModel extends window.Backbone endedTime, } = callHistoryDetails; log.info( - `addCallHistory: Call ID: ${callId}, ` + + `addCallHistory: Conversation ID: ${this.id}, ` + + `Call ID: ${callId}, ` + 'Direct, ' + `Incoming: ${wasIncoming}, ` + `Video: ${wasVideoCall}, ` + @@ -3306,20 +3307,23 @@ export class ConversationModel extends window.Backbone ); if (messageId != null) { log.info( - `addCallHistory: Found existing call history message (Call ID ${callHistoryDetails.callId}, Message ID: ${messageId})` + `addCallHistory: Found existing call history message (Call ID: ${callHistoryDetails.callId}, Message ID: ${messageId})` ); message.id = messageId; } else { log.info( - `addCallHistory: No existing call history message found (Call ID ${callHistoryDetails.callId})` + `addCallHistory: No existing call history message found (Call ID: ${callHistoryDetails.callId})` ); } } const id = await window.Signal.Data.saveMessage(message, { ourUuid: window.textsecure.storage.user.getCheckedUuid().toString(), + forceSave: true, }); + log.info(`addCallHistory: Saved call history message (ID: ${id})`); + const model = window.MessageController.register( id, new window.Whisper.Message({ diff --git a/ts/test-electron/sql/getCallHistoryMessageByCallId_test.ts b/ts/test-electron/sql/getCallHistoryMessageByCallId_test.ts new file mode 100644 index 0000000000..e002d0f424 --- /dev/null +++ b/ts/test-electron/sql/getCallHistoryMessageByCallId_test.ts @@ -0,0 +1,67 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +import { assert } from 'chai'; + +import dataInterface from '../../sql/Client'; +import { UUID } from '../../types/UUID'; +import type { UUIDStringType } from '../../types/UUID'; + +import type { MessageAttributesType } from '../../model-types.d'; +import { CallMode } from '../../types/Calling'; + +const { + removeAll, + _getAllMessages, + saveMessages, + getCallHistoryMessageByCallId, +} = dataInterface; + +function getUuid(): UUIDStringType { + return UUID.generate().toString(); +} + +describe('sql/getCallHistoryMessageByCallId', () => { + beforeEach(async () => { + await removeAll(); + }); + + it('returns a previous call history message', async () => { + assert.lengthOf(await _getAllMessages(), 0); + + const now = Date.now(); + const conversationId = getUuid(); + const ourUuid = getUuid(); + + const callHistoryMessage: MessageAttributesType = { + id: getUuid(), + type: 'call-history', + conversationId, + sent_at: now - 10, + received_at: now - 10, + timestamp: now - 10, + callHistoryDetails: { + callId: '12345', + callMode: CallMode.Direct, + wasIncoming: true, + wasVideoCall: true, + wasDeclined: true, + acceptedTime: now - 10, + endedTime: undefined, + }, + }; + + await saveMessages([callHistoryMessage], { + forceSave: true, + ourUuid, + }); + + assert.lengthOf(await _getAllMessages(), 1); + + const messageId = await getCallHistoryMessageByCallId( + conversationId, + '12345' + ); + assert.strictEqual(messageId, callHistoryMessage.id); + }); +});