gitlab-org--gitlab-foss/spec/javascripts/raven/raven_config_spec.js

217 lines
5.4 KiB
JavaScript
Raw Normal View History

import Raven from 'raven-js';
2017-04-15 07:29:46 -04:00
import RavenConfig from '~/raven/raven_config';
describe('RavenConfig', () => {
describe('init', () => {
2017-04-14 16:09:16 -04:00
let options;
beforeEach(() => {
2017-04-14 16:09:16 -04:00
options = {
sentryDsn: '//sentryDsn',
ravenAssetUrl: '//ravenAssetUrl',
currentUserId: 1,
whitelistUrls: ['//gitlabUrl'],
isProduction: true,
};
spyOn(RavenConfig, 'configure');
spyOn(RavenConfig, 'bindRavenErrors');
spyOn(RavenConfig, 'setUser');
2017-04-14 16:09:16 -04:00
RavenConfig.init(options);
});
2017-04-14 16:09:16 -04:00
it('should set the options property', () => {
expect(RavenConfig.options).toEqual(options);
});
2017-04-14 16:09:16 -04:00
it('should call the configure method', () => {
expect(RavenConfig.configure).toHaveBeenCalled();
});
2017-04-14 16:09:16 -04:00
it('should call the error bindings method', () => {
expect(RavenConfig.bindRavenErrors).toHaveBeenCalled();
});
2017-04-14 16:09:16 -04:00
it('should call setUser', () => {
expect(RavenConfig.setUser).toHaveBeenCalled();
});
it('should not call setUser if there is no current user ID', () => {
2017-04-14 16:09:16 -04:00
RavenConfig.setUser.calls.reset();
RavenConfig.init({
sentryDsn: '//sentryDsn',
ravenAssetUrl: '//ravenAssetUrl',
currentUserId: undefined,
whitelistUrls: ['//gitlabUrl'],
isProduction: true,
});
expect(RavenConfig.setUser).not.toHaveBeenCalled();
});
});
describe('configure', () => {
2017-04-14 16:09:16 -04:00
let options;
let raven;
2017-04-14 16:09:16 -04:00
beforeEach(() => {
options = {
sentryDsn: '//sentryDsn',
whitelistUrls: ['//gitlabUrl'],
isProduction: true,
};
2017-04-14 16:09:16 -04:00
raven = jasmine.createSpyObj('raven', ['install']);
2017-04-14 16:09:16 -04:00
spyOn(Raven, 'config').and.returnValue(raven);
2017-04-14 16:09:16 -04:00
RavenConfig.configure.call({
options,
});
2017-04-14 16:09:16 -04:00
});
2017-04-14 16:09:16 -04:00
it('should call Raven.config', () => {
expect(Raven.config).toHaveBeenCalledWith(options.sentryDsn, {
whitelistUrls: options.whitelistUrls,
environment: 'production',
});
2017-04-14 16:09:16 -04:00
});
2017-04-14 16:09:16 -04:00
it('should call Raven.install', () => {
expect(raven.install).toHaveBeenCalled();
});
it('should set .environment to development if isProduction is false', () => {
options.isProduction = false;
RavenConfig.configure.call({
options,
});
2017-04-14 16:09:16 -04:00
expect(Raven.config).toHaveBeenCalledWith(options.sentryDsn, {
whitelistUrls: options.whitelistUrls,
environment: 'development',
});
});
});
describe('setUser', () => {
2017-04-14 16:09:16 -04:00
let ravenConfig;
beforeEach(() => {
ravenConfig = { options: { currentUserId: 1 } };
spyOn(Raven, 'setUserContext');
RavenConfig.setUser.call(ravenConfig);
});
it('should call .setUserContext', function () {
expect(Raven.setUserContext).toHaveBeenCalledWith({
id: ravenConfig.options.currentUserId,
});
});
});
describe('bindRavenErrors', () => {
let $document;
let $;
2017-04-14 16:09:16 -04:00
beforeEach(() => {
$document = jasmine.createSpyObj('$document', ['on']);
$ = jasmine.createSpy('$').and.returnValue($document);
2017-04-15 07:29:46 -04:00
window.$ = $;
2017-04-14 16:09:16 -04:00
RavenConfig.bindRavenErrors();
});
it('should query for document using jquery', () => {
2017-04-15 07:29:46 -04:00
expect(window.$).toHaveBeenCalledWith(document);
2017-04-14 16:09:16 -04:00
});
it('should call .on', function () {
expect($document.on).toHaveBeenCalledWith('ajaxError.raven', RavenConfig.handleRavenErrors);
});
});
describe('handleRavenErrors', () => {
let event;
let req;
let config;
let err;
beforeEach(() => {
event = {};
req = { status: 'status', responseText: 'responseText', statusText: 'statusText' };
config = { type: 'type', url: 'url', data: 'data' };
err = {};
spyOn(Raven, 'captureMessage');
RavenConfig.handleRavenErrors(event, req, config, err);
});
it('should call Raven.captureMessage', () => {
expect(Raven.captureMessage).toHaveBeenCalledWith(err, {
extra: {
type: config.type,
url: config.url,
data: config.data,
status: req.status,
response: req.responseText.substring(0, 100),
error: err,
event,
},
});
});
describe('if no err is provided', () => {
beforeEach(() => {
Raven.captureMessage.calls.reset();
RavenConfig.handleRavenErrors(event, req, config);
});
it('should use req.statusText as the error value', () => {
expect(Raven.captureMessage).toHaveBeenCalledWith(req.statusText, {
extra: {
type: config.type,
url: config.url,
data: config.data,
status: req.status,
response: req.responseText.substring(0, 100),
error: req.statusText,
event,
},
});
});
});
2017-04-15 07:29:46 -04:00
describe('if no req.responseText is provided', () => {
beforeEach(() => {
req.responseText = undefined;
Raven.captureMessage.calls.reset();
RavenConfig.handleRavenErrors(event, req, config, err);
});
it('should use `Unknown response text` as the response', () => {
expect(Raven.captureMessage).toHaveBeenCalledWith(err, {
extra: {
type: config.type,
url: config.url,
data: config.data,
status: req.status,
response: 'Unknown response text',
error: err,
event,
},
});
});
});
});
});