Add `Message` descriptor functions

This commit is contained in:
Daniel Gasienica 2018-02-14 16:18:21 -05:00
parent 8febf125b1
commit b3db0bf179
2 changed files with 123 additions and 2 deletions

View File

@ -1,11 +1,37 @@
const Attachment = require('./attachment');
exports.GROUP = 'group';
exports.PRIVATE = 'private';
const GROUP = 'group';
const PRIVATE = 'private';
// Public API
exports.GROUP = GROUP;
exports.PRIVATE = PRIVATE;
// Schema
// Message -> Promise Message
exports.upgradeSchema = async message =>
Object.assign({}, message, {
attachments:
await Promise.all(message.attachments.map(Attachment.upgradeSchema)),
});
// Descriptors
exports.getGroupDescriptor = group => ({
type: GROUP,
id: group.id,
});
// Matches data from `libtextsecure` `MessageReceiver::handleSentMessage`:
exports.getDescriptorForSent = ({ message, destination }) => (
message.group
? exports.getGroupDescriptor(message.group)
: { type: PRIVATE, id: destination }
);
// Matches data from `libtextsecure` `MessageReceiver::handleDataMessage`:
exports.getDescriptorForReceived = ({ message, source }) => (
message.group
? exports.getGroupDescriptor(message.group)
: { type: PRIVATE, id: source }
);

View File

@ -0,0 +1,95 @@
const { assert } = require('chai');
const Message = require('../../../js/modules/types/message');
describe('Message', () => {
describe('getGroupDescriptor', () => {
it('should return valid descriptor`', () => {
const group = {
id: '+10000000000',
};
const expected = {
type: 'group',
id: '+10000000000',
};
assert.deepEqual(Message.getGroupDescriptor(group), expected);
});
});
describe('getDescriptorForSent', () => {
context('for private messages', () => {
it('should return valid descriptor`', () => {
const data = {
message: {
id: '+10000000000',
},
destination: '+10000000000',
};
const expected = {
type: 'private',
id: '+10000000000',
};
assert.deepEqual(Message.getDescriptorForSent(data), expected);
});
});
context('for group messages', () => {
it('should return valid descriptor`', () => {
const data = {
message: {
group: {
id: '+10000000000',
},
},
};
const expected = {
type: 'group',
id: '+10000000000',
};
assert.deepEqual(Message.getDescriptorForSent(data), expected);
});
});
});
describe('getDescriptorForReceived', () => {
context('for private messages', () => {
it('should return valid descriptor`', () => {
const data = {
message: {
id: '+10000000000',
},
source: '+10000000000',
};
const expected = {
type: 'private',
id: '+10000000000',
};
assert.deepEqual(Message.getDescriptorForReceived(data), expected);
});
});
context('for group messages', () => {
it('should return valid descriptor`', () => {
const data = {
message: {
group: {
id: '+10000000000',
},
},
};
const expected = {
type: 'group',
id: '+10000000000',
};
assert.deepEqual(Message.getDescriptorForReceived(data), expected);
});
});
});
});