aboutsummaryrefslogtreecommitdiff
path: root/test/loggers
diff options
context:
space:
mode:
authorRuben Beltran del Rio <ruben@unlimited.pizza>2020-09-21 01:00:19 +0200
committerRuben Beltran del Rio <ruben@unlimited.pizza>2020-09-21 01:00:19 +0200
commitae85c067634676251e812765c81adfdef8f85f9d (patch)
treeea1557df2172aeb30a363afec6a2183f05469d22 /test/loggers
parent58906d77975b35fe93569f8083b90140124f9c41 (diff)
Update the code.
Diffstat (limited to 'test/loggers')
-rw-r--r--test/loggers/console.js123
-rw-r--r--test/loggers/file.js106
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);