X-Git-Url: https://git.squeep.com/?p=squeep-logger-json-console;a=blobdiff_plain;f=test%2Flib%2Fjson-replacers.js;fp=test%2Flib%2Fjson-replacers.js;h=1c26250c72d07c086cd791d95c3d404e616ec876;hp=0000000000000000000000000000000000000000;hb=229dafe0003708b9fad190b4c0fc68136efd4f8c;hpb=21506cf49b1d239d780b377651554dc868639477 diff --git a/test/lib/json-replacers.js b/test/lib/json-replacers.js new file mode 100644 index 0000000..1c26250 --- /dev/null +++ b/test/lib/json-replacers.js @@ -0,0 +1,88 @@ +/* eslint-env mocha */ +'use strict'; + +const assert = require('assert'); +const sinon = require('sinon'); // eslint-disable-line node/no-unpublished-require +const http = require('http'); +const jsonReplacers = require('../../lib/json-replacers'); + +describe('JSON Replacers', function () { + let key; + beforeEach(function () { + key = 'key'; + }); + afterEach(function () { + sinon.restore(); + }); + + /** + * Helper to check non-replacement. + * @param {(key, value)=>{result, value}} replacer + * @param {*} value + */ + function shouldNotReplace(replacer, value) { + const result = replacer(key, value); + assert.strictEqual(result.replaced, false); + assert.strictEqual(result.value, value); + } + + describe('replacerError', function () { + it('ignores other values', function () { + shouldNotReplace(jsonReplacers.replacerError, 100); + }); + it('renders an Error as an Object', function () { + const value = new Error('oh no'); + const result = jsonReplacers.replacerError(key, value); + assert.strictEqual(result.replaced, true); + assert.strictEqual(result.value.message, 'oh no'); + assert('stack' in result.value); + }); + }); // replacerError + + describe('replacerBigInt', function () { + it('ignores other values', function () { + shouldNotReplace(jsonReplacers.replacerBigInt, 100); + }); + it('renders a BigInt as a String', function () { + const value = 100n; + const result = jsonReplacers.replacerBigInt(key, value); + assert.strictEqual(result.replaced, true); + assert.strictEqual(result.value, '100'); + }); + }); // replacerBigInt + + describe('replacerHttpIncomingMessage', function () { + it('ignores other values', function () { + shouldNotReplace(jsonReplacers.replacerHttpIncomingMessage, { foo: 'bar' }); + }); + it('renders a ClientRequest as an Object', function () { + const value = new http.IncomingMessage(); + value.method = 'GET'; + value.url = new URL('http://example.com/'); + const result = jsonReplacers.replacerHttpIncomingMessage(key, value); + assert.strictEqual(result.replaced, true); + assert.strictEqual(result.value.method, 'GET'); + assert.strictEqual(result.value.url.href, 'http://example.com/'); + }); + it('scrubs auth header from IncomingMessage Object', function () { + const value = new http.IncomingMessage(); + value.headers.authorization = 'Super secret scheme'; + const result = jsonReplacers.replacerHttpIncomingMessage(key, value); + assert.strictEqual(result.replaced, true); + assert.strictEqual(result.value.headers.authorization, 'Super *************'); + }); + }); // replacerHttpIncomingMessage + + describe('replacerHttpServerResponse', function () { + it('ignores other values', function () { + shouldNotReplace(jsonReplacers.replacerHttpServerResponse, { foo: 'bar' }); + }); + it('renders a ServerResponse as an Object', function () { + const value = Object.create(http.ServerResponse.prototype); + const result = jsonReplacers.replacerHttpServerResponse(key, value); + assert.strictEqual(result.replaced, true); + assert.strictEqual(result.value.statusCode, 200); + }); + }); // replacerHttpServerResponse + +}); // JSON Replacers \ No newline at end of file