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
.deepStrictEqual(result
, value
);
28 describe('replacerError', function () {
29 it('ignores other values', function () {
30 shouldNotReplace(jsonReplacers
.replacerError
, 100);
32 it('renders an Error as an Object', function () {
33 const value
= new Error('oh no');
34 const result
= jsonReplacers
.replacerError(key
, value
);
35 assert
.strictEqual(result
.message
, 'oh no');
36 assert('stack' in result
);
40 describe('replacerBigInt', function () {
41 it('ignores other values', function () {
42 shouldNotReplace(jsonReplacers
.replacerBigInt
, 100);
44 it('renders a BigInt as a String', function () {
46 const result
= jsonReplacers
.replacerBigInt(key
, value
);
47 assert
.strictEqual(result
, '100');
51 describe('replacerHttpIncomingMessage', function () {
52 it('ignores other values', function () {
53 shouldNotReplace(jsonReplacers
.replacerHttpIncomingMessage
, { foo: 'bar' });
55 it('renders a ClientRequest as an Object', function () {
56 const value
= new http
.IncomingMessage();
58 value
.url
= new URL('http://example.com/');
59 const result
= jsonReplacers
.replacerHttpIncomingMessage(key
, value
);
60 assert
.strictEqual(result
.method
, 'GET');
61 assert
.strictEqual(result
.url
.href
, 'http://example.com/');
63 it('scrubs auth header from IncomingMessage Object', function () {
64 const value
= new http
.IncomingMessage();
65 value
.headers
.authorization
= 'Super secret scheme';
66 const result
= jsonReplacers
.replacerHttpIncomingMessage(key
, value
);
67 assert
.strictEqual(result
.headers
.authorization
, 'Super *************');
69 }); // replacerHttpIncomingMessage
71 describe('replacerHttpServerResponse', function () {
72 it('ignores other values', function () {
73 shouldNotReplace(jsonReplacers
.replacerHttpServerResponse
, { foo: 'bar' });
75 it('renders a ServerResponse as an Object', function () {
76 const value
= Object
.create(http
.ServerResponse
.prototype);
77 const result
= jsonReplacers
.replacerHttpServerResponse(key
, value
);
78 assert
.strictEqual(result
.statusCode
, 200);
80 }); // replacerHttpServerResponse