split logger into separate module with minor improvements
[websub-hub] / test / src / logger.js
1 /* eslint-env mocha */
2 'use strict';
3
4 const assert = require('assert');
5 const sinon = require('sinon'); // eslint-disable-line node/no-unpublished-require
6 const Logger = require('../../src/logger');
7 const Config = require('../../config');
8
9 describe('Logger', function () {
10 let config;
11 let logger;
12
13 beforeEach(function () {
14 config = new Config('test');
15 logger = new Logger(config);
16 Object.keys(Logger.nullLogger).forEach((level) => sinon.stub(logger.backend, level));
17 });
18
19 afterEach(function () {
20 sinon.restore();
21 });
22
23 it('logs', function () {
24 logger.info('testScope', 'message', { baz: 'quux' }, { foo: 1 }, 'more other');
25 assert(logger.backend.info.called);
26 });
27
28 it('logs BigInts', function () {
29 logger.info('testScope', 'message', { aBigInteger: BigInt(2) });
30 assert(logger.backend.info.called);
31 assert(logger.backend.info.args[0][0].includes('"2"'));
32 });
33
34 it('logs Errors', function () {
35 logger.error('testScope', 'message', { e: new Error('an error') });
36 assert(logger.backend.error.called);
37 assert(logger.backend.error.args[0][0].includes('an error'));
38 });
39
40 it('masks credentials', function () {
41 logger.info('testScope', 'message', {
42 ctx: {
43 parsedBody: {
44 identity: 'username',
45 credential: 'password',
46 },
47 },
48 });
49 assert(logger.backend.info.called);
50 assert(logger.backend.info.args[0][0].includes('"username"'));
51 assert(logger.backend.info.args[0][0].includes('"********"'));
52 });
53
54 }); // Logger