diff --git a/lib/producer.js b/lib/producer.js index 41a7199..0c08ab1 100644 --- a/lib/producer.js +++ b/lib/producer.js @@ -43,14 +43,28 @@ function isMessageAttributeValid(messageAttribute) { } function entryFromObject(message) { - if (!message.id || !message.body) { - throw new Error('Object messages must have \'id\' and \'body\' props'); + if (!message.body) { + throw new Error('Object messages must have \'body\' prop'); + } + + if (!message.groupId && !message.deduplicationId && !message.id) { + throw new Error('Object messages must have \'id\' prop'); + } + + if (message.deduplicationId && !message.groupId) { + throw new Error('FIFO Queue messages must have \'groupId\' prop'); } var entry = { - Id: message.id, MessageBody: message.body }; + + if(message.id) { + if (typeof message.id !== 'string') { + throw new Error('Message.id value must be a string'); + } + entry.Id = message.id; + } if (message.delaySeconds) { if ( diff --git a/test/producer.js b/test/producer.js index b84e7eb..185fc19 100644 --- a/test/producer.js +++ b/test/producer.js @@ -331,7 +331,21 @@ describe('Producer', function () { }); }); - it('returns an error when object messages have invalid queueId param', function (done) { + it('returns an error when object messages have invalid id param', function (done) { + var errMessage = 'Message.id value must be a string'; + + var message1 = { + id: 1234, + body: 'body1' + }; + + producer.send(message1, function (err) { + assert.equal(err.message, errMessage); + done(); + }); + }); + + it('returns an error when object messages have invalid groupId param', function (done) { var errMessage = 'Message.groupId value must be a string'; var message1 = { @@ -352,6 +366,7 @@ describe('Producer', function () { var message1 = { id: 'id1', body: 'body1', + groupId: '1234', deduplicationId: 1234 }; @@ -360,31 +375,28 @@ describe('Producer', function () { done(); }); }); - - it('returns an error when object messages are not of shape {id, body}', function (done) { - var errMessage = 'Object messages must have \'id\' and \'body\' props'; + + it('returns an error when fifo messages have no groupId param', function (done) { + var errMessage = 'FIFO Queue messages must have \'groupId\' prop'; var message1 = { - noId: 'noId1', - body: 'body1' - }; - var message2 = { - id: 'id2', - body: 'body2' + id: 'id1', + body: 'body1', + deduplicationId: '1234' }; - producer.send(['foo', message1, message2], function (err) { + producer.send(message1, function (err) { assert.equal(err.message, errMessage); done(); }); }); - it('returns an error when object messages are not of shape {id, body} 2', function (done) { - var errMessage = 'Object messages must have \'id\' and \'body\' props'; + it('returns an error when object messages are not of shape {id, body}', function (done) { + var errMessage = 'Object messages must have \'id\' prop'; var message1 = { - id: 'id1', - noBody: 'noBody1' + noId: 'noId1', + body: 'body1' }; var message2 = { id: 'id2', @@ -397,16 +409,16 @@ describe('Producer', function () { }); }); - it('returns an error when object messages are not of shape {id, body} 3', function (done) { - var errMessage = 'Object messages must have \'id\' and \'body\' props'; + it('returns an error when object messages are not of shape {id, body} 2', function (done) { + var errMessage = 'Object messages must have \'body\' prop'; var message1 = { id: 'id1', - body: 'body1' + noBody: 'noBody1' }; var message2 = { - noId: 'noId2', - noBody: 'noBody2' + id: 'id2', + body: 'body2' }; producer.send(['foo', message1, message2], function (err) {