|
|
'use strict'; |
|
|
|
|
|
const bunyan = require('bunyan'); |
|
|
const sinon = require('sinon'); |
|
|
const should = require('chai').should(); |
|
|
const stream = require('../index.js'); |
|
|
|
|
|
module.exports = { |
|
|
givenLogger, |
|
|
givenClient, |
|
|
thenClientCapturesException, |
|
|
thenClientCapturesMessage |
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function givenLogger(client, level) { |
|
|
return bunyan.createLogger({ |
|
|
name: 'test-logger', |
|
|
streams: [ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
stream(client, level) |
|
|
] |
|
|
}); |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function givenClient() { |
|
|
const client = { captureException() { }, captureMessage() { } }; |
|
|
|
|
|
sinon.spy(client, 'captureException'); |
|
|
sinon.spy(client, 'captureMessage'); |
|
|
|
|
|
return client; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function thenClientCapturesException(client, expectedLevel, expectedErr, expectedExtra, expectedTags) { |
|
|
|
|
|
should.exist(expectedErr); |
|
|
|
|
|
|
|
|
should.exist(client); |
|
|
client.should.be.an('object'); |
|
|
|
|
|
|
|
|
|
|
|
assertSpyCallCount(client.captureException, 1); |
|
|
|
|
|
const fnArgs = client.captureException.args[0]; |
|
|
should.exist(fnArgs); |
|
|
fnArgs.should.have.length(2); |
|
|
|
|
|
|
|
|
assertError(fnArgs[0], expectedErr); |
|
|
|
|
|
|
|
|
const args = fnArgs[1]; |
|
|
should.exist(args); |
|
|
args.should.be.an('object'); |
|
|
|
|
|
|
|
|
assertLevel(args.level, expectedLevel); |
|
|
|
|
|
|
|
|
assertExtra(args.extra, expectedExtra); |
|
|
should.exist(args.extra.msg); |
|
|
|
|
|
|
|
|
assertTags(args.tags, expectedTags); |
|
|
|
|
|
|
|
|
assertSpyCallCount(client.captureMessage, 0); |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function thenClientCapturesMessage(client, expectedLevel, exptectedMessage, expectedExtra, expectedTags) { |
|
|
|
|
|
should.exist(exptectedMessage); |
|
|
|
|
|
|
|
|
should.exist(client); |
|
|
client.should.be.an('object'); |
|
|
|
|
|
|
|
|
|
|
|
assertSpyCallCount(client.captureMessage, 1); |
|
|
|
|
|
const fnArgs = client.captureMessage.args[0]; |
|
|
should.exist(fnArgs); |
|
|
fnArgs.should.have.length(2); |
|
|
|
|
|
|
|
|
const message = fnArgs[0]; |
|
|
should.exist(message); |
|
|
message.should.be.equal(exptectedMessage); |
|
|
|
|
|
|
|
|
const args = fnArgs[1]; |
|
|
should.exist(args); |
|
|
args.should.be.an('object'); |
|
|
|
|
|
|
|
|
assertLevel(args.level, expectedLevel); |
|
|
|
|
|
|
|
|
assertExtra(args.extra, expectedExtra); |
|
|
|
|
|
|
|
|
assertTags(args.tags, expectedTags); |
|
|
|
|
|
|
|
|
assertSpyCallCount(client.captureException, 0); |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function assertError(actual, expected) { |
|
|
actual.should.be.instanceOf(Error); |
|
|
should.exist(actual.message); |
|
|
actual.message.should.be.equal(expected.message); |
|
|
should.exist(actual.name); |
|
|
actual.name.should.be.equal(expected.name); |
|
|
should.exist(actual.stack); |
|
|
if (expected.signal) { |
|
|
should.exist(actual.signal); |
|
|
actual.signal.should.be.equal(expected.signal); |
|
|
} |
|
|
if (expected.code) { |
|
|
should.exist(actual.code); |
|
|
actual.code.should.be.equal(expected.code); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function assertExtra(actual, expected) { |
|
|
should.exist(actual); |
|
|
actual.should.be.an('object'); |
|
|
if (expected) { |
|
|
for (const key of Object.keys(expected)) { |
|
|
should.exist(actual[key]); |
|
|
actual[key].should.be.equal(expected[key]); |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function assertTags(actual, expected) { |
|
|
if (expected) { |
|
|
should.exist(actual); |
|
|
actual.should.be.an('object'); |
|
|
for (const key of Object.keys(expected)) { |
|
|
should.exist(actual[key]); |
|
|
actual[key].should.be.equal(expected[key]); |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function assertLevel(actual, expected) { |
|
|
should.exist(actual); |
|
|
actual.should.be.equal(expected); |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function assertSpyCallCount(fn, count) { |
|
|
should.exist(fn); |
|
|
should.exist(fn.called); |
|
|
|
|
|
fn.callCount.should.be.equal(count); |
|
|
} |
|
|
|