rollbar
Version:
Effortlessly track and debug errors in your JavaScript applications with Rollbar. This package includes advanced error tracking features and an intuitive interface to help you identify and fix issues more quickly.
131 lines (122 loc) • 4.31 kB
JavaScript
/* globals expect */
/* globals describe */
/* globals it */
/* globals sinon */
var API = require('../src/api');
var utility = require('../src/utility');
utility.setupJSON();
function TestTransportGenerator() {
var TestTransport = function (callbackError, callbackResponse) {
this.postArgs = [];
this.callbackError = callbackError;
this.callbackResponse = callbackResponse;
};
TestTransport.prototype.post = function () {
var args = arguments;
this.postArgs.push(args);
var callback = args[args.length - 1];
if (typeof callback === 'function') {
callback(this.callbackError, this.callbackResponse);
}
};
return TestTransport;
}
describe('Api()', function () {
it('use the defaults if no custom endpoint is given', function (done) {
var transport = new (TestTransportGenerator())();
var url = {
parse: function (e) {
expect(false).to.be.ok();
},
};
var backup = null;
var accessToken = 'abc123';
var options = { accessToken: accessToken };
var api = new API(options, transport, url, backup);
// I know this is testing internal state but it
// is the most expedient way to do this
expect(api.accessToken).to.eql(accessToken);
expect(api.transportOptions.hostname).to.eql('api.rollbar.com');
expect(api.transportOptions.path).to.match(/\/api\/1/);
expect(api.transportOptions.protocol).to.eql('https:');
done();
});
it('should parse the endpoint and use that if given', function (done) {
var transport = new (TestTransportGenerator())();
var endpoint = 'http://woo.foo.com/api/42';
var url = {
parse: function (e) {
expect(e).to.eql(endpoint);
return {
hostname: 'woo.foo.com',
protocol: 'http:',
pathname: '/api/42',
path: '/api/42',
};
},
};
var backup = null;
var accessToken = 'abc123';
var options = { accessToken: accessToken, endpoint: endpoint };
var api = new API(options, transport, url, backup);
expect(api.accessToken).to.eql(accessToken);
expect(api.transportOptions.hostname).to.eql('woo.foo.com');
expect(api.transportOptions.path).to.match(/\/api\/42/);
expect(api.transportOptions.protocol).to.eql('http:');
done();
});
});
describe('postItem', function () {
it('should call post on the transport object', function (done) {
var response = 'yes';
var transport = new (TestTransportGenerator())(null, response);
var url = {
parse: function (e) {
expect(false).to.be.ok();
},
};
var backup = null;
var accessToken = 'abc123';
var options = { accessToken: accessToken };
var api = new API(options, transport, url, backup);
var data = { a: 1 };
api.postItem(data, function (err, resp) {
expect(err).to.not.be.ok();
expect(resp).to.eql(response);
expect(transport.postArgs.length).to.eql(1);
expect(transport.postArgs[0][0]).to.eql(accessToken);
expect(transport.postArgs[0][1].path).to.match(/\/item\//);
expect(transport.postArgs[0][2].access_token).to.eql(accessToken);
expect(transport.postArgs[0][2].data.a).to.eql(1);
done();
});
});
it('should stringify context', function (done) {
var response = 'yes';
var transport = new (TestTransportGenerator())(null, response);
var url = {
parse: function (e) {
expect(false).to.be.ok();
},
};
var backup = null;
var accessToken = 'abc123';
var options = { accessToken: accessToken };
var api = new API(options, transport, url, backup);
var data = { a: 1, context: { some: [1, 2, 'stuff'] } };
api.postItem(data, function (err, resp) {
expect(err).to.not.be.ok();
expect(resp).to.eql(response);
expect(transport.postArgs.length).to.eql(1);
expect(transport.postArgs[0][0]).to.eql(accessToken);
expect(transport.postArgs[0][1].path).to.match(/\/item\//);
expect(transport.postArgs[0][1].method).to.eql('POST');
expect(transport.postArgs[0][2].access_token).to.eql(accessToken);
expect(transport.postArgs[0][2].data.a).to.eql(1);
expect(transport.postArgs[0][2].data.context).to.eql(
'{"some":[1,2,"stuff"]}',
);
done();
});
});
});