diff --git a/test/modules/types/message/initializeAttachmentMetadata_test.ts b/test/modules/types/message/initializeAttachmentMetadata_test.ts new file mode 100644 index 0000000000..c6b69d1987 --- /dev/null +++ b/test/modules/types/message/initializeAttachmentMetadata_test.ts @@ -0,0 +1,50 @@ +import 'mocha'; +import { assert } from 'chai'; + +import * as Message from '../../../../ts/types/message/initializeAttachmentMetadata'; +import { IncomingMessage } from '../../../../ts/types/Message'; +import { MIMEType } from '../../../../ts/types/MIME'; +// @ts-ignore +import { stringToArrayBuffer } from '../../../../js/modules/string_to_array_buffer'; + + +describe('Message', () => { + describe('initializeAttachmentMetadata', () => { + it('should handle visual media attachments', async () => { + const input: IncomingMessage = { + type: 'incoming', + conversationId: 'foo', + id: '11111111-1111-1111-1111-111111111111', + timestamp: 1523317140899, + received_at: 1523317140899, + sent_at: 1523317140800, + attachments: [{ + contentType: 'image/jpeg' as MIMEType, + data: stringToArrayBuffer('foo'), + fileName: 'foo.jpg', + size: 1111, + }], + }; + const expected: IncomingMessage = { + type: 'incoming', + conversationId: 'foo', + id: '11111111-1111-1111-1111-111111111111', + timestamp: 1523317140899, + received_at: 1523317140899, + sent_at: 1523317140800, + attachments: [{ + contentType: 'image/jpeg' as MIMEType, + data: stringToArrayBuffer('foo'), + fileName: 'foo.jpg', + size: 1111, + }], + numAttachments: 1, + numVisualMediaAttachments: 1, + numFileAttachments: 0, + }; + + const actual = await Message.initializeAttachmentMetadata(input); + assert.deepEqual(actual, expected); + }); + }); +}); diff --git a/test/modules/types/message_test.js b/test/modules/types/message_test.js index 271ffe825b..42e8c4c6c0 100644 --- a/test/modules/types/message_test.js +++ b/test/modules/types/message_test.js @@ -181,6 +181,9 @@ describe('Message', () => { fileName: 'test\uFFFDfig.exe', size: 1111, }], + numAttachments: 1, + numVisualMediaAttachments: 0, + numFileAttachments: 1, schemaVersion: Message.CURRENT_SCHEMA_VERSION, }; diff --git a/ts/types/message/initializeAttachmentMetadata.ts b/ts/types/message/initializeAttachmentMetadata.ts new file mode 100644 index 0000000000..49d0f35d62 --- /dev/null +++ b/ts/types/message/initializeAttachmentMetadata.ts @@ -0,0 +1,20 @@ +import { partition } from 'lodash'; + +import * as Attachment from '../Attachment'; +import { Message } from '../message'; + + +export const initializeAttachmentMetadata = + async (message: Message): Promise => { + const numAttachments = message.attachments.length; + const [numVisualMediaAttachments, numFileAttachments] = + partition(message.attachments, Attachment.isVisualMedia) + .map((attachments) => attachments.length); + + return { + ...message, + numAttachments, + numVisualMediaAttachments, + numFileAttachments, + }; + };