diff --git a/sdks/rollbar.js/src/server/transforms.js b/sdks/rollbar.js/src/server/transforms.js index 6dfb3fb7b..b149a3d1d 100644 --- a/sdks/rollbar.js/src/server/transforms.js +++ b/sdks/rollbar.js/src/server/transforms.js @@ -154,7 +154,13 @@ function scrubPayload(item, options, callback) { } function convertToPayload(item, options, callback) { - callback(null, item.data); + var payloadOptions = options.payload || {}; + if (payloadOptions.body) { + delete payloadOptions.body; + } + + var data = _.extend(true, {}, item.data, payloadOptions); + callback(null, data); } /** Helpers **/ diff --git a/sdks/rollbar.js/test/server.transforms.test.js b/sdks/rollbar.js/test/server.transforms.test.js index 9814a064b..4435d15e9 100644 --- a/sdks/rollbar.js/test/server.transforms.test.js +++ b/sdks/rollbar.js/test/server.transforms.test.js @@ -677,4 +677,37 @@ vows.describe('transforms') } } }) + .addBatch({ + 'convertToPayload': { + 'options': { + 'with payload data': { + topic: function() { + return {payload: {client: {code_version: 'bork'}, body: 'hello'}}; + }, + item: { + topic: function(options) { + var item = { + data: { + body: { + message: 'hey' + } + }, + other: 'thing' + }; + t.convertToPayload(item, options, this.callback); + }, + 'should not error': function(err, item) { + assert.ifError(err); + }, + 'should only return data': function(err, item) { + assert.equal(item.body.message, 'hey'); + }, + 'should include payload options': function(err, item) { + assert.equal(item.client.code_version, 'bork'); + } + } + } + } + } + }) .export(module, {error: false});