Skip to content
This repository was archived by the owner on Jun 21, 2023. It is now read-only.

Commit 48b805e

Browse files
committed
Merge branch 'bugfix/simple-tests' into 'master'
Fix tests and add serializer tests See merge request Backend/ackee-node-logger!3
2 parents 270f1ea + 3117f7d commit 48b805e

5 files changed

Lines changed: 170 additions & 30 deletions

File tree

index.js

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,9 @@ const _ = require('lodash');
22
const pino = require('pino');
33
const multistream = require('pino-multi-stream').multistream;
44
const serializers = require('./serializers');
5+
const levels = require('./levels');
56
const { expressMiddleware, expressErrorMiddleware } = require('./express');
67

7-
const levels = {
8-
silent: Infinity,
9-
fatal: 60,
10-
error: 50,
11-
warn: 40,
12-
info: 30,
13-
debug: 20,
14-
trace: 10,
15-
};
16-
178
// This is a custom slightly edited version of pino-multistream's wirte method, whch adds support for maximum log level
189
// The original version was pino-multistream 3.1.2 (commit 71d98ae) - https://github.com/pinojs/pino-multi-stream/blob/71d98ae191e02c56e39e849d2c30d59c8c6db1b9/multistream.js#L43
1910
const maxLevelWrite = function(data) {

levels.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
const levels = {
2+
silent: Infinity,
3+
fatal: 60,
4+
error: 50,
5+
warn: 40,
6+
info: 30,
7+
debug: 20,
8+
trace: 10,
9+
};
10+
11+
module.exports = {
12+
levels,
13+
};

tests/helper.js

Lines changed: 0 additions & 10 deletions
This file was deleted.

tests/index.test.js

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,14 @@
1-
const loggerFactory = require('..');
2-
const { redirect } = require('./helper');
31
const express = require('express');
42
const supertest = require('supertest');
3+
const stream = require('stream');
4+
const { levels } = require('../levels');
5+
6+
let loggerFactory;
7+
8+
beforeEach(() => {
9+
jest.resetModules();
10+
loggerFactory = require('..'); // eslint-disable-line global-require
11+
});
512

613
test('can create default logger', () => {
714
const logger = loggerFactory();
@@ -14,12 +21,15 @@ test('can create named logger', () => {
1421
});
1522

1623
test('can use custom stream', () => {
17-
const logger = loggerFactory('', {
24+
const logger = loggerFactory({
1825
streams: [
1926
{
20-
stream: redirect((chunk, enc, cb) => {
21-
expect(chunk.msg).toBe('Hello');
22-
cb();
27+
stream: new stream.Writable({
28+
write: (chunk, encoding, next) => {
29+
const json = JSON.parse(chunk);
30+
expect(json.message).toBe('Hello');
31+
next();
32+
},
2333
}),
2434
},
2535
],
@@ -29,12 +39,16 @@ test('can use custom stream', () => {
2939
});
3040

3141
test('can use warning level', () => {
32-
const logger = loggerFactory('', {
42+
const logger = loggerFactory({
3343
streams: [
3444
{
35-
stream: redirect((chunk, enc, cb) => {
36-
expect(chunk.msg).toBe('Hello');
37-
cb();
45+
stream: new stream.Writable({
46+
write: (chunk, encoding, next) => {
47+
const json = JSON.parse(chunk);
48+
expect(json.message).toBe('Hello');
49+
expect(json.level).toBe(levels.warn);
50+
next();
51+
},
3852
}),
3953
},
4054
],

tests/serializers.test.js

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
const _ = require('lodash');
2+
const stream = require('stream');
3+
4+
let loggerFactory;
5+
6+
beforeEach(() => {
7+
jest.resetModules();
8+
loggerFactory = require('..'); // eslint-disable-line global-require
9+
});
10+
11+
test('Default serializers', () => {
12+
const error = {
13+
message: 'Bad error',
14+
code: 400,
15+
stack: 'Detailed stack',
16+
data: { user: 1 },
17+
devInfo: 'Lorem',
18+
userInfo: 'Ipsum',
19+
};
20+
const processEnv = {
21+
NODE_PATH: 'app:config',
22+
NODE_ENV: 'local',
23+
PATH: '.',
24+
USER: 'root',
25+
};
26+
const res = {
27+
out: 'Lorem ipsum',
28+
time: 14,
29+
noteToSelf: 'Send to user',
30+
};
31+
const req = {
32+
query: {
33+
password: '1234',
34+
passwordCheck: '1234',
35+
search: 'my cat',
36+
},
37+
body: {
38+
password: '1234',
39+
passwordCheck: '1234',
40+
catName: 'Cersei',
41+
},
42+
url: 'www.example.com',
43+
method: 'GET',
44+
extraData: 'Some server data',
45+
};
46+
47+
const logger = loggerFactory({
48+
streams: [
49+
{
50+
stream: new stream.Writable({
51+
write: (chunk, encoding, next) => {
52+
const json = JSON.parse(chunk);
53+
expect(json.error).toEqual(_.pick(error, ['message', 'code', 'stack', 'data']));
54+
expect(json.processEnv).toEqual({
55+
nodePath: processEnv.NODE_PATH,
56+
nodeEnv: processEnv.NODE_ENV,
57+
});
58+
expect(json.req).toEqual(
59+
_.pick(
60+
_.omit(req, [
61+
'body.password',
62+
'body.passwordCheck',
63+
'query.password',
64+
'query.passwordCheck',
65+
]),
66+
['url', 'body', 'query', 'method']
67+
)
68+
);
69+
expect(json.res).toEqual(_.pick(res, ['out', 'time']));
70+
next();
71+
},
72+
}),
73+
},
74+
],
75+
});
76+
77+
logger.info({ error, processEnv, req, res });
78+
});
79+
80+
test('Disable custom path', () => {
81+
const req = {
82+
body: {},
83+
query: {},
84+
url: 'www.example.com',
85+
method: 'GET',
86+
extraData: 'Some server data',
87+
};
88+
89+
const logger = loggerFactory({
90+
disableFields: ['req.url'],
91+
streams: [
92+
{
93+
stream: new stream.Writable({
94+
write: (chunk, encoding, next) => {
95+
const json = JSON.parse(chunk);
96+
expect(json.req).toEqual(_.pick(req, ['body', 'query', 'method']));
97+
next();
98+
},
99+
}),
100+
},
101+
],
102+
});
103+
104+
logger.info({ req });
105+
});
106+
107+
test('Enable custom path', () => {
108+
const req = {
109+
body: {},
110+
query: {},
111+
url: 'www.example.com',
112+
method: 'GET',
113+
extraData: 'Some server data',
114+
};
115+
116+
const logger = loggerFactory({
117+
enableFields: ['req.extraData'],
118+
streams: [
119+
{
120+
stream: new stream.Writable({
121+
write: (chunk, encoding, next) => {
122+
const json = JSON.parse(chunk);
123+
expect(json.req).toEqual(_.pick(req, ['body', 'query', 'method', 'url', 'extraData']));
124+
next();
125+
},
126+
}),
127+
},
128+
],
129+
});
130+
131+
logger.info({ req });
132+
});

0 commit comments

Comments
 (0)