4 const assert
= require('assert');
5 const sinon
= require('sinon'); // eslint-disable-line node/no-unpublished-require
6 const http
= require('http');
7 const jsonReplacers
= require('../../lib/json-replacers');
9 describe('JSON Replacers', function () {
11 beforeEach(function () {
14 afterEach(function () {
19 * Helper to check non-replacement.
20 * @param {(key, value)=>{result, value}} replacer
23 function shouldNotReplace(replacer
, value
) {
24 const result
= replacer(key
, value
);
25 assert
.strictEqual(result
.replaced
, false);
26 assert
.strictEqual(result
.value
, value
);
29 describe('replacerError', function () {
30 it('ignores other values', function () {
31 shouldNotReplace(jsonReplacers
.replacerError
, 100);
33 it('renders an Error as an Object', function () {
34 const value
= new Error('oh no');
35 const result
= jsonReplacers
.replacerError(key
, value
);
36 assert
.strictEqual(result
.replaced
, true);
37 assert
.strictEqual(result
.value
.message
, 'oh no');
38 assert('stack' in result
.value
);
42 describe('replacerBigInt', function () {
43 it('ignores other values', function () {
44 shouldNotReplace(jsonReplacers
.replacerBigInt
, 100);
46 it('renders a BigInt as a String', function () {
48 const result
= jsonReplacers
.replacerBigInt(key
, value
);
49 assert
.strictEqual(result
.replaced
, true);
50 assert
.strictEqual(result
.value
, '100');
54 describe('replacerHttpIncomingMessage', function () {
55 it('ignores other values', function () {
56 shouldNotReplace(jsonReplacers
.replacerHttpIncomingMessage
, { foo: 'bar' });
58 it('renders a ClientRequest as an Object', function () {
59 const value
= new http
.IncomingMessage();
61 value
.url
= new URL('http://example.com/');
62 const result
= jsonReplacers
.replacerHttpIncomingMessage(key
, value
);
63 assert
.strictEqual(result
.replaced
, true);
64 assert
.strictEqual(result
.value
.method
, 'GET');
65 assert
.strictEqual(result
.value
.url
.href
, 'http://example.com/');
67 it('scrubs auth header from IncomingMessage Object', function () {
68 const value
= new http
.IncomingMessage();
69 value
.headers
.authorization
= 'Super secret scheme';
70 const result
= jsonReplacers
.replacerHttpIncomingMessage(key
, value
);
71 assert
.strictEqual(result
.replaced
, true);
72 assert
.strictEqual(result
.value
.headers
.authorization
, 'Super *************');
74 }); // replacerHttpIncomingMessage
76 describe('replacerHttpServerResponse', function () {
77 it('ignores other values', function () {
78 shouldNotReplace(jsonReplacers
.replacerHttpServerResponse
, { foo: 'bar' });
80 it('renders a ServerResponse as an Object', function () {
81 const value
= Object
.create(http
.ServerResponse
.prototype);
82 const result
= jsonReplacers
.replacerHttpServerResponse(key
, value
);
83 assert
.strictEqual(result
.replaced
, true);
84 assert
.strictEqual(result
.value
.statusCode
, 200);
86 }); // replacerHttpServerResponse