diff options
| author | Ruben Beltran del Rio <ruben@unlimited.pizza> | 2020-09-21 01:00:19 +0200 |
|---|---|---|
| committer | Ruben Beltran del Rio <ruben@unlimited.pizza> | 2020-09-21 01:00:19 +0200 |
| commit | ae85c067634676251e812765c81adfdef8f85f9d (patch) | |
| tree | ea1557df2172aeb30a363afec6a2183f05469d22 /test/loggers | |
| parent | 58906d77975b35fe93569f8083b90140124f9c41 (diff) | |
Update the code.
Diffstat (limited to 'test/loggers')
| -rw-r--r-- | test/loggers/console.js | 123 | ||||
| -rw-r--r-- | test/loggers/file.js | 106 |
2 files changed, 229 insertions, 0 deletions
diff --git a/test/loggers/console.js b/test/loggers/console.js new file mode 100644 index 0000000..3358837 --- /dev/null +++ b/test/loggers/console.js @@ -0,0 +1,123 @@ +'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 logs = [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(...logs); // should go to info + +logObjectA._level = 4; +logObjectB._level = 4; +overrideLogger.log(...logs); // should go to warn + +logObjectA._level = 1; +logObjectB._level = 3; +overrideLogger.log(...logs); // should go to error + +logObjectA._level = 0; +logObjectB._level = 2; +overrideLogger.log(...logs); // should go to error + +logObjectA._level = 7; +logObjectB._level = 8; +overrideLogger.log(...logs); // should go to log + +Tap.equal(dummyConsole.values.log, logs.length, + 'It should send debug messages to console\'s #log'); +Tap.equal(dummyConsole.values.info, logs.length, + 'It should send info and notice messages to console\'s #info'); +Tap.equal(dummyConsole.values.warn, logs.length, + 'It should send warn messages to console\'s #warn'); +Tap.equal(dummyConsole.values.error, logs.length * 2, + 'It should send error messages to console\'s #error'); + +/** + * TEST: #log() - with formatter + */ + +formattedLogger.log(...logs); // should go to log + +Tap.similar(dummyFormatter.values, logs, + 'If available, it should send the objects to the formatter'); diff --git a/test/loggers/file.js b/test/loggers/file.js new file mode 100644 index 0000000..5e73d82 --- /dev/null +++ b/test/loggers/file.js @@ -0,0 +1,106 @@ +'use strict'; + +const Fs = require('fs'); + +const Tap = require('tap'); + +const FileLogger = require('../../lib/loggers/file'); + +// Prepare the test + +const rawFile = './raw.log'; +const formatterFile = './formatter.log'; +const formatterString = 'example'; + +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 logs = [logObjectA, logObjectB]; + + +const dummyFormatter = { + values: [], + format: function (logObject) { + + this.values.push(logObject); + return formatterString; + } +}; + +const rawLogger = new FileLogger({ + file: rawFile +}); +const formatterLogger = new FileLogger({ + file: formatterFile, + formatter: dummyFormatter +}); + +/** + * TEST: #log() - regular + */ + +rawLogger.log(...logs); + +setTimeout(() => { + + Tap.test('raw file', (t) => { + + Fs.readFile(rawFile, { encoding: 'utf8' }, (_, contents) => { + + const lines = contents.trim().split('\n'); + + Tap.equal(lines.length, logs.length, + 'it should send all params to the file'); + + Tap.equal(JSON.stringify(logObjectA), lines[0], + 'it should log the raw json object'); + + Fs.unlink(rawFile, () => { + + t.end(); + }); + }); + }); +}, 10); // allow for flush +/** + * TEST: #log() - formatter + */ + +formatterLogger.log(...logs); + +setTimeout(() => { + + Tap.test('formatted file', (t) => { + + Fs.readFile(formatterFile, { encoding: 'utf8' }, (_, contents) => { + + const lines = contents.trim().split('\n'); + + Tap.equal(lines.length, logs.length, + 'it should send all params to the file'); + + Tap.equal(formatterString, lines[0], + 'it should log the formatted object'); + + Fs.unlink(formatterFile, () => { + + t.end(); + }); + }); + }); +}, 10); |