@brainbits/node-logger-plugin-sentry
Version:
Logger plugin sentry
179 lines (178 loc) • 5.54 kB
JavaScript
;
var Sentry = _interopRequireWildcard(require("@sentry/node"));
var _index = _interopRequireDefault(require("./index"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
jest.mock('@sentry/node');
describe('PluginSentry', () => {
let scope;
let config;
beforeEach(() => {
config = {
maxLevel: 'error',
levels: ['error', 'info', 'debug'],
sentry: {
maxBreadcrumbs: 3,
tags: {}
},
plugins: [],
blah: 'foo',
formatter: () => {}
};
scope = {
setLevel: jest.fn(),
setUser: jest.fn(),
setExtra: jest.fn(),
setTag: jest.fn(),
addBreadcrumb: jest.fn()
};
Sentry.withScope.mockImplementation(fn => fn(scope));
});
it('should call Sentry.captureException', () => {
const plugin = new _index.default(config);
const error = new Error('error message');
plugin.log({
message: error,
level: 'error'
});
expect(Sentry.captureException).toHaveBeenCalledWith(error);
});
it('should set correct level', () => {
const plugin = new _index.default(config);
plugin.log({
message: new Error('error message'),
level: 'error'
});
expect(scope.setLevel).toHaveBeenCalledWith('error');
});
it('should set correct user if given string', () => {
config.context = {
user: 'foobar'
};
const plugin = new _index.default(config);
plugin.log({
message: new Error('error message'),
level: 'error'
});
expect(scope.setUser).toHaveBeenCalledWith({
id: config.context.user
});
});
it('should set correct user if object with id given', () => {
config.context = {
user: {
id: 'foobar'
}
};
const plugin = new _index.default(config);
plugin.log({
message: new Error('error message'),
level: 'error'
});
expect(scope.setUser).toHaveBeenCalledWith(config.context.user);
});
it('should set correct user if object with username given', () => {
config.context = {
user: {
username: 'foobar'
}
};
const plugin = new _index.default(config);
plugin.log({
message: new Error('error message'),
level: 'error'
});
expect(scope.setUser).toHaveBeenCalledWith(config.context.user);
});
it('should set correct user if object with email given', () => {
config.context = {
user: {
email: 'foobar'
}
};
const plugin = new _index.default(config);
plugin.log({
message: new Error('error message'),
level: 'error'
});
expect(scope.setUser).toHaveBeenCalledWith(config.context.user);
});
it('should set correct user if object with ip_address given', () => {
config.context = {
user: {
ip_address: 'foobar'
}
};
const plugin = new _index.default(config);
plugin.log({
message: new Error('error message'),
level: 'error'
});
expect(scope.setUser).toHaveBeenCalledWith(config.context.user);
});
it('should set correct tags', () => {
const plugin = new _index.default(config);
plugin.log({
message: new Error('error message'),
level: 'error',
meta: {
tags: {
foo: 'bar'
}
}
});
expect(scope.setTag).toHaveBeenCalledWith('foo', 'bar');
});
it('should merge global tags with event specific tags', () => {
config.sentry.tags.test = 'baz';
const plugin = new _index.default(config);
plugin.log({
message: new Error('error message'),
level: 'error',
meta: {
tags: {
foo: 'bar'
}
}
});
expect(scope.setTag).toHaveBeenCalledWith('foo', 'bar');
expect(scope.setTag).toHaveBeenCalledWith('test', 'baz');
});
it('should set correct extras and omit user', () => {
config.context = {
user: 'baz',
foo: 'bar'
};
const plugin = new _index.default(config);
plugin.log({
message: new Error('error message'),
level: 'error'
});
expect(scope.setExtra).toHaveBeenCalledWith('foo', 'bar');
expect(scope.setExtra).not.toHaveBeenCalledWith('user', 'baz');
});
it('should add breadcrumbs for next exception', () => {
const plugin = new _index.default(config);
plugin.log({
message: 'some message',
level: 'info',
meta: {
foo: 'bar'
}
});
expect(Sentry.addBreadcrumb).not.toHaveBeenCalled();
plugin.log({
message: new Error(),
level: 'error'
});
expect(Sentry.addBreadcrumb).toHaveBeenCalledWith({
category: 'info',
level: 'info',
message: 'some message',
data: {
foo: 'bar'
}
});
});
});