'use strict'; const Tap = require('tap'); const ConsoleLogger = require('../../lib/loggers/console'); // Prepare the test const dummyFormatter = { values: [], format: function (log) { this.values.push(log); return 'lol'; } }; const dummyConsole = { values: { log: 0, warn: 0, error: 0, info: 0 }, _log: function (type, ...logs) { this.values[type] += logs.length; }, log: function (...logs) { this._log('log', ...logs); }, warn: function (...logs) { this._log('warn', ...logs); }, error: function (...logs) { this._log('error', ...logs); }, info: function (...logs) { this._log('info', ...logs); } }; const logObjectA = { _timestamp: Date.now() + .134, _cologneLog: '1.0.0', _from: 'Dummy Logger', _level: 6, _levelString: 'info', message: 'MessageOne' }; const logObjectB = { _timestamp: Date.now() + .134, _cologneLog: '1.0.0', _from: 'Dummy Logger', _level: 6, _levelString: 'info', message: 'MessageTwo' }; const exampleLogs = [logObjectA, logObjectB]; const regularLogger = new ConsoleLogger({}); const overrideLogger = new ConsoleLogger({ console: dummyConsole }); const formattedLogger = new ConsoleLogger({ console: dummyConsole, formatter: dummyFormatter }); /** * TEST: #log() - regular */ Tap.equal(regularLogger.console, global.console, 'It should default to the global console'); /** * TEST: #log() - override */ logObjectA._level = 5; logObjectB._level = 6; overrideLogger.log(...exampleLogs); // should go to info logObjectA._level = 4; logObjectB._level = 4; overrideLogger.log(...exampleLogs); // should go to warn logObjectA._level = 1; logObjectB._level = 3; overrideLogger.log(...exampleLogs); // should go to error logObjectA._level = 0; logObjectB._level = 2; overrideLogger.log(...exampleLogs); // should go to error logObjectA._level = 7; logObjectB._level = 8; overrideLogger.log(...exampleLogs); // should go to log Tap.equal(dummyConsole.values.log, exampleLogs.length, 'It should send debug messages to console\'s #log'); Tap.equal(dummyConsole.values.info, exampleLogs.length, 'It should send info and notice messages to console\'s #info'); Tap.equal(dummyConsole.values.warn, exampleLogs.length, 'It should send warn messages to console\'s #warn'); Tap.equal(dummyConsole.values.error, exampleLogs.length * 2, 'It should send error messages to console\'s #error'); /** * TEST: #log() - with formatter */ formattedLogger.log(...exampleLogs); // should go to log Tap.similar(dummyFormatter.values, exampleLogs, 'If available, it should send the objects to the formatter');