Skip to content

Commit

Permalink
Merge pull request #847 from rollbar/wj-react-native-callbacks
Browse files Browse the repository at this point in the history
Enable onSendCallback and transform callabck for react-native
  • Loading branch information
waltjones authored May 7, 2020
2 parents 9209f74 + 5ca9143 commit e0bc6d0
Show file tree
Hide file tree
Showing 5 changed files with 177 additions and 44 deletions.
40 changes: 0 additions & 40 deletions sdks/rollbar.js/src/react-native/predicates.js

This file was deleted.

7 changes: 4 additions & 3 deletions sdks/rollbar.js/src/react-native/rollbar.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ var urllib = require('../browser/url');

var transforms = require('./transforms');
var sharedTransforms = require('../transforms');
var predicates = require('./predicates');
var sharedPredicates = require('../predicates');

function Rollbar(options, client) {
if (_.isType(options, 'string')) {
Expand Down Expand Up @@ -279,15 +279,16 @@ function addTransformsToNotifier(notifier) {
.addTransform(sharedTransforms.addTelemetryData)
.addTransform(sharedTransforms.addConfigToPayload)
.addTransform(transforms.scrubPayload)
.addTransform(sharedTransforms.userTransform(logger))
.addTransform(sharedTransforms.addConfiguredOptions)
.addTransform(sharedTransforms.addDiagnosticKeys)
.addTransform(sharedTransforms.itemToPayload);
}

function addPredicatesToQueue(queue) {
queue
.addPredicate(predicates.checkLevel)
.addPredicate(predicates.userCheckIgnore);
.addPredicate(sharedPredicates.checkLevel)
.addPredicate(sharedPredicates.userCheckIgnore(logger));
}

Rollbar.prototype._createItem = function(args) {
Expand Down
92 changes: 92 additions & 0 deletions sdks/rollbar.js/test/browser.rollbar.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -713,6 +713,98 @@ describe('onerror', function() {
})
});

describe('callback options', function() {
beforeEach(function (done) {
window.server = sinon.createFakeServer();
done();
});

afterEach(function () {
window.rollbar.configure({ autoInstrument: false });
window.server.restore();
});

function stubResponse(server) {
server.respondWith('POST', 'api/1/item',
[
200,
{ 'Content-Type': 'application/json' },
'{"err": 0, "result":{ "uuid": "d4c7acef55bf4c9ea95e4fe9428a8287"}}'
]
);
}

it('should use checkIgnore when set', function(done) {
var server = window.server;
stubResponse(server);
server.requests.length = 0;

var options = {
accessToken: 'POST_CLIENT_ITEM_TOKEN',
checkIgnore: function(_isUncaught, _args, _payload) {
return true;
}
};
var rollbar = window.rollbar = new Rollbar(options);

rollbar.log('test'); // generate a payload to ignore

server.respond();

expect(server.requests.length).to.eql(0);

done();
});

it('should use onSendCallback when set', function(done) {
var server = window.server;
stubResponse(server);
server.requests.length = 0;

var options = {
accessToken: 'POST_CLIENT_ITEM_TOKEN',
onSendCallback: function(_isUncaught, _args, payload) {
payload.foo = 'bar';
}
};
var rollbar = window.rollbar = new Rollbar(options);

rollbar.log('test'); // generate a payload to inspect

server.respond();

expect(server.requests.length).to.eql(1);
var body = JSON.parse(server.requests[0].requestBody);
expect(body.data.foo).to.eql('bar');

done();
});

it('should use transform when set', function(done) {
var server = window.server;
stubResponse(server);
server.requests.length = 0;

var options = {
accessToken: 'POST_CLIENT_ITEM_TOKEN',
transform: function(data, _item) {
data.foo = 'baz';
}
};
var rollbar = window.rollbar = new Rollbar(options);

rollbar.log('test'); // generate a payload to inspect

server.respond();

expect(server.requests.length).to.eql(1);
var body = JSON.parse(server.requests[0].requestBody);
expect(body.data.foo).to.eql('baz');

done();
});
});

describe('options.autoInstrument', function() {
beforeEach(function (done) {
window.server = sinon.createFakeServer();
Expand Down
3 changes: 2 additions & 1 deletion sdks/rollbar.js/test/examples/webpack.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,9 @@ describe('webpack app', function() {

// This has become necessary because Travis switched their Chrome stable
// version _down_ from 76 to 62, which handles this test case differently.
// 2020-05-06: Travis Chrome 62 is now returning the original message.
var version = parseInt(window.navigator.userAgent.match(new RegExp('^.*HeadlessChrome/([0-9]*).*$'))[1]);
var message = version > 62 ? 'webpack test error' : 'Script error.';
var message = version >= 62 ? 'webpack test error' : 'Script error.';

expect(body.data.body.trace.exception.message).to.eql(message);

Expand Down
79 changes: 79 additions & 0 deletions sdks/rollbar.js/test/react-native.rollbar.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -299,6 +299,85 @@ describe('captureEvent', function() {
});
});

describe('callback options', function() {
beforeEach(function (done) {
// In react-native environment, stub fetch() instead of XMLHttpRequest
window.fetchStub = sinon.stub(window, 'fetch');
done();
});

afterEach(function () {
window.fetch.restore();
});

function stubResponse(code, err, message) {
var uuid = 'd4c7acef55bf4c9ea95e4fe9428a8287';

window.fetch.returns(Promise.resolve(new Response(
JSON.stringify({ err: err, message: message, result: { uuid: uuid }}),
{ status: code, statusText: message, headers: { 'Content-Type': 'application/json' }}
)));
}

it('should use checkIgnore when set', function(done) {
stubResponse(200, 0, 'OK');

var options = {
accessToken: 'POST_CLIENT_ITEM_TOKEN',
checkIgnore: function(_isUncaught, _args, _payload) {
return true;
}
};
var rollbar = new Rollbar(options);

rollbar.log('test'); // generate a payload to ignore

expect(window.fetchStub.called).to.not.be.ok();

done();
});

it('should use onSendCallback when set', function(done) {
stubResponse(200, 0, 'OK');

var options = {
accessToken: 'POST_CLIENT_ITEM_TOKEN',
onSendCallback: function(_isUncaught, _args, payload) {
payload.foo = 'bar';
}
};
var rollbar = new Rollbar(options);

rollbar.log('test'); // generate a payload to inspect

expect(window.fetchStub.called).to.be.ok();
var body = JSON.parse(window.fetchStub.getCall(0).args[1].body);
expect(body.data.foo).to.eql('bar');

done();
});

it('should use transform when set', function(done) {
stubResponse(200, 0, 'OK');

var options = {
accessToken: 'POST_CLIENT_ITEM_TOKEN',
transform: function(data, _item) {
data.foo = 'baz';
}
};
var rollbar = new Rollbar(options);

rollbar.log('test'); // generate a payload to inspect

expect(window.fetchStub.called).to.be.ok();
var body = JSON.parse(window.fetchStub.getCall(0).args[1].body);
expect(body.data.foo).to.eql('baz');

done();
});
});

describe('createItem', function() {
it('should handle multiple strings', function(done) {
var client = new (TestClientGen())();
Expand Down

0 comments on commit e0bc6d0

Please sign in to comment.