/* globals expect */ /* globals describe */ /* globals it */ var _ = require('../src/utility'); var t = require('../src/transforms'); function itemFromArgs(args) { var item = _.createItem(args); item.level = 'debug'; return item; } var fakeLogger = { error: function () {}, log: function () {}, }; describe('itemToPayload', function () { it('ignores options.payload.body but merges in other payload options', function (done) { var args = ['a message', { custom: 'stuff' }]; var item = itemFromArgs(args); item.accessToken = 'abc123'; item._isUncaught = true; item._originalArgs = ['c', 3]; item.data = {}; var options = { endpoint: 'api.rollbar.com', payload: { body: 'hey', x: 42 }, }; t.itemToPayload(item, options, function (e, i) { expect(i._isUncaught).to.eql(item._isUncaught); expect(i._originalArgs).to.eql(item._originalArgs); // This transform shouldn't apply any payload keys. expect(i.body).to.not.eql('hey'); expect(i.x).to.not.eql(42); done(e); }); }); it('ignores handles trailing slash in endpoint', function (done) { var args = ['a message', { custom: 'stuff' }]; var item = itemFromArgs(args); item.accessToken = 'abc123'; item.data = { message: 'a message' }; var options = { endpoint: 'api.rollbar.com/', }; t.itemToPayload(item, options, function (e, i) { expect(i.message).to.eql('a message'); done(e); }); }); }); describe('addPayloadOptions', function () { it('ignores options.payload.body but merges in other payload options', function (done) { var args = ['a message', { custom: 'stuff' }]; var item = itemFromArgs(args); item.accessToken = 'abc123'; var options = { endpoint: 'api.rollbar.com', payload: { body: 'hey', x: 42 }, }; t.addPayloadOptions(item, options, function (e, i) { expect(i.data.body).to.not.eql('hey'); expect(i.data.x).to.eql(42); done(e); }); }); }); describe('addTelemetryData', function () { it('adds the data to the right place if events exist', function (done) { var item = { data: { body: { message: 'hello world', }, }, telemetryEvents: [ { type: 'log', body: { subtype: 'console', message: 'bork', }, timestamp_ms: 12345, level: 'info', }, { type: 'manual', body: { hello: 'world', }, timestamp_ms: 88889, level: 'info', }, ], }; var options = {}; t.addTelemetryData(item, options, function (e, i) { expect(i.data.body.telemetry.length).to.eql(2); expect(i.data.body.telemetry[0].type).to.eql('log'); done(e); }); }); }); describe('addConfiguredOptions', function () { it('adds the configured options', function (done) { var item = { data: { body: { message: 'hello world', }, notifier: { name: 'rollbar-js', }, }, }; var options = { accessToken: 'abc123', foo: 'bar', captureUncaught: true, _configuredOptions: { accessToken: 'abc123', captureUncaught: true, }, }; t.addConfiguredOptions(item, options, function (e, i) { expect(i.data.notifier.configured_options).to.eql({ captureUncaught: true, }); done(e); }); }); }); describe('userTransform', function () { it('calls user transform if is present and a function', function (done) { var args = ['a message']; var item = itemFromArgs(args); var options = { endpoint: 'api.rollbar.com', transform: function (newItem, item) { newItem.origin = item; newItem.message = 'HELLO'; }, }; var payload = { access_token: '123', data: item, }; expect(payload.data.message).to.not.eql('HELLO'); t.userTransform(fakeLogger)(payload, options, function (e, i) { expect(i.data.origin).to.be.an('object'); expect(i.data.message).to.eql('HELLO'); done(e); }); }); it('does nothing if transform is not a function', function (done) { var args = ['a message']; var item = itemFromArgs(args); var options = { endpoint: 'api.rollbar.com', transform: 'hi there', }; var payload = { access_token: '123', data: item, }; expect(payload.data.message).to.not.eql('HELLO'); t.userTransform(fakeLogger)(payload, options, function (e, i) { expect(i.data.message).to.not.eql('HELLO'); done(e); }); }); it('does nothing if transform throws', function (done) { var args = ['a message']; var item = itemFromArgs(args); var options = { endpoint: 'api.rollbar.com', transform: function (i) { i.data.message = 'HELLO'; throw 'bork'; }, }; var payload = { access_token: '123', data: item, }; expect(payload.data.message).to.not.eql('HELLO'); t.userTransform(fakeLogger)(payload, options, function (e, i) { expect(i.data.message).to.not.eql('HELLO'); expect(options.transform).to.not.be.ok(); done(e); }); }); it('waits for promise resolution if transform returns a promise', function (done) { var args = ['a message']; var item = itemFromArgs(args); var payload = { access_token: '123', data: item, }; var options = { endpoint: 'api.rollbar.com', transform: function (newItem) { newItem.message = 'HELLO'; return Promise.resolve(); }, }; t.userTransform(fakeLogger)(payload, options, function (e, i) { expect(i.data.message).to.eql('HELLO'); done(e); }); expect(payload.data.message).to.not.eql('HELLO'); }); it('uses resolved value if transform returns a promise with a value', function (done) { var args = ['a message']; var item = itemFromArgs(args); var payload = { access_token: '123', data: item, }; var options = { endpoint: 'api.rollbar.com', transform: function (newItem) { return Promise.resolve({ message: 'HELLO' }); }, }; t.userTransform(fakeLogger)(payload, options, function (e, i) { expect(i.data.message).to.eql('HELLO'); expect(i.data).to.not.eql(item); done(e); }); expect(payload.data.message).to.not.eql('HELLO'); }); it('uses untransformed value if transform returns a promise that rejects', function (done) { var args = ['a message']; var item = itemFromArgs(args); var err = { message: 'HELLO' }; var payload = { access_token: '123', data: item, }; var options = { endpoint: 'api.rollbar.com', transform: function (newItem) { return Promise.reject(err); }, }; t.userTransform(fakeLogger)(payload, options, function (e, i) { expect(i.data.message).to.not.eql('HELLO'); expect(i.data).to.eql(item); expect(e).to.eql(err); done(); }); expect(payload.data.message).to.not.eql('HELLO'); }); });