fallback to json dance if structureClone fails
[squeep-logger-json-console] / test / lib / logger.js
index 70695a988088a56c9862e3977925a27a4ff8282d..939c61f4f25960fbe19790e492db0dd7db91fd6f 100644 (file)
@@ -11,13 +11,26 @@ const asyncLocalStorage = new AsyncLocalStorage();
 describe('Logger', function () {
   let config, logger, commonObject, scope, message;
 
+  function sanitizeCredential(data, sanitize = true) {
+    let unclean = false;
+    const credentialLength = data?.ctx?.parsedBody?.credential?.length;
+    if (credentialLength) {
+      unclean = true;
+    }
+    if (unclean && sanitize) {
+      data.ctx.parsedBody.credential = '*'.repeat(credentialLength);
+    }
+    return unclean;
+  }
+
   beforeEach(function () {
     config = {};
     commonObject = {
       nodeId: '3c100e84-9a7f-11ec-9b4e-0025905f714a',
     };
     logger = new Logger(config, commonObject);
-    Object.keys(Logger.nullLogger).forEach((level) => sinon.stub(logger.backend, level));
+    const logWrapper = process.env['VERBOSE_TESTS'] ? sinon.spy : sinon.stub;
+    Object.keys(Logger.nullLogger).forEach((level) => logWrapper(logger.backend, level));
     scope = 'testScope';
     message = 'message';
   });
@@ -48,7 +61,7 @@ describe('Logger', function () {
   it('logs Errors', function () {
     logger.error(scope, message, { e: new Error('an error') });
     assert(logger.backend.error.called);
-    assert(logger.backend.error.args[0][0].includes('an error'));
+    assert(logger.backend.error.args[0][0].includes('an error'), logger.backend.error.args[0][0]);
   });
 
   it('covers config settings', function () {
@@ -75,17 +88,7 @@ describe('Logger', function () {
   });
 
   it('sanitizes', function () {
-    logger.dataSanitizers.push((data, sanitize = true) => {
-      let unclean = false;
-      const credentialLength = data?.ctx?.parsedBody?.credential?.length;
-      if (credentialLength) {
-        unclean = true;
-      }
-      if (unclean && sanitize) {
-        data.ctx.parsedBody.credential = '*'.repeat(credentialLength);
-      }
-      return unclean;
-    });
+    logger.dataSanitizers.push(sanitizeCredential);
     logger.info(scope, message, {
       ctx: {
         parsedBody: {
@@ -148,4 +151,27 @@ describe('Logger', function () {
     assert(logger.backend.info.called);
     assert(!logger.backend.info.args[0][0].includes('"foo":"bar"'));
   });
+
+  it('covers circular objects', function () {
+    const data = { foo: 'bar' };
+    data.self = data;
+    logger.info(scope, message, data);
+    assert(logger.backend.info.called);
+    assert(logger.backend.info.args[0][0].includes('[Circular]'));
+  });
+
+  it('covers non-serializable objects', function () {
+    logger.dataSanitizers.push(sanitizeCredential);
+    const data = {
+      ctx: {
+        parsedBody: {
+          credential: 'foo',
+        },
+      },
+      foo: new WeakMap(),
+    };
+    logger.info(scope, message, data);
+    assert(logger.backend.info.called);
+  });
+
 }); // Logger
\ No newline at end of file