11import 'jest-extended' ;
2+ import isString = require( 'lodash.isstring' ) ;
23import { Writable } from 'stream' ;
4+ import loggerFactory from '..' ;
35import { levels } from '../levels' ;
46
5- let loggerFactory ;
6-
7- beforeEach ( ( ) => {
8- jest . resetModules ( ) ;
9- loggerFactory = require ( '..' ) . default ;
10- } ) ;
11-
127test ( 'can create default logger' , ( ) => {
138 const logger = loggerFactory ( ) ;
149 expect ( logger ) . toBeDefined ( ) ;
@@ -17,6 +12,13 @@ test('can create default logger', () => {
1712test ( 'can create named logger' , ( ) => {
1813 const logger = loggerFactory ( 'myApp' ) ;
1914 expect ( logger ) . toBeDefined ( ) ;
15+ expect ( ( logger . options as any ) . loggerName ) . toBe ( 'myApp' ) ;
16+ } ) ;
17+
18+ test . skip ( 'can create logger with options' , ( ) => { // TODO: will work after pretty mechanics update - broken bc of deps update
19+ const logger = loggerFactory ( { pretty : true } ) ;
20+ expect ( logger ) . toBeDefined ( ) ;
21+ expect ( logger . options . pretty ) . toBe ( true ) ;
2022} ) ;
2123
2224const testWriteStream = ( resolve , assert ) => ( {
@@ -55,15 +57,15 @@ test('can use warning level', () =>
5557
5658test ( 'child logger has warning level' , ( ) =>
5759 new Promise ( ( resolve , reject ) => {
58- loggerFactory ( {
60+ const rootLogger = loggerFactory ( {
5961 streams : [
6062 testWriteStream ( resolve , json => {
6163 expect ( json . message ) . toContain ( 'Hello' ) ;
6264 expect ( json . level ) . toBe ( levels . warn ) ;
6365 } ) ,
6466 ] ,
6567 } ) ;
66- const childLogger = loggerFactory ( 'child' ) ;
68+ const childLogger = rootLogger ( 'child' ) ;
6769
6870 childLogger . warning ( 'Hello' ) ;
6971 } ) ) ;
@@ -126,34 +128,74 @@ exampleMessages.forEach(data => {
126128 test ( `logger name is shown in non-pretty ${ data . type } message` , ( ) =>
127129 new Promise ( resolve => {
128130 const loggerName = 'database' ;
129- loggerFactory ( {
131+ const rootLogger = loggerFactory ( {
130132 pretty : false ,
131133 streams : [
132134 testWriteStream ( resolve , json => {
133135 expect ( json . message ) . toStartWith ( `[${ loggerName } ] ` ) ;
134136 } ) ,
135137 ] ,
136138 } ) ;
137- const logger = loggerFactory ( loggerName ) ;
139+ const logger = rootLogger ( loggerName ) ;
138140
139- logger . fatal ( data . logData ) ;
141+ if ( isString ( data . logData ) ) {
142+ logger . fatal ( data . logData ) ;
143+ } else {
144+ logger . fatal ( data . logData , 'Data' ) ;
145+ }
140146 } ) ) ;
141147} ) ;
142148
143149exampleMessages . forEach ( data => {
144150 test ( `logger name is propagated to pretty object with ${ data . type } message` , ( ) =>
145151 new Promise ( resolve => {
146152 const loggerName = 'database' ;
147- loggerFactory ( {
153+ const rootLogger = loggerFactory ( {
148154 pretty : true ,
149155 streams : [
150156 testWriteStream ( resolve , json => {
151157 expect ( json . name ) . toEqual ( loggerName ) ;
152158 } ) ,
153159 ] ,
154160 } ) ;
155- const logger = loggerFactory ( loggerName ) ;
161+ const logger = rootLogger ( loggerName ) ;
156162
157- logger . fatal ( data . logData ) ;
163+ if ( isString ( data . logData ) ) {
164+ logger . fatal ( data . logData ) ;
165+ } else {
166+ logger . fatal ( data . logData , 'Data' ) ;
167+ }
158168 } ) ) ;
159169} ) ;
170+
171+ test ( 'multiple logger configs are not affected' , ( ) => {
172+ const primaryLogger = loggerFactory ( { disableStackdriverFormat : true , ignoredHttpMethods : [ 'POST' ] } ) ;
173+ const secondaryLogger = loggerFactory ( { disableStackdriverFormat : false , ignoredHttpMethods : [ 'GET' ] } ) ;
174+
175+ expect ( primaryLogger . options . disableStackdriverFormat ) . toBe ( true ) ;
176+ expect ( primaryLogger . options . ignoredHttpMethods ) . toIncludeSameMembers ( [ 'POST' ] ) ;
177+ expect ( secondaryLogger . options . disableStackdriverFormat ) . toBe ( false ) ;
178+ expect ( secondaryLogger . options . ignoredHttpMethods ) . toIncludeSameMembers ( [ 'GET' ] ) ;
179+ } ) ;
180+
181+ test ( 'Child logger takes parent config' , ( ) => {
182+ const logger = loggerFactory ( { disableStackdriverFormat : true } ) ;
183+ const childLogger = logger ( 'child' ) ;
184+
185+ expect ( childLogger . options . disableStackdriverFormat ) . toBe ( true ) ;
186+ } ) ;
187+
188+ test ( 'Child logger inherits parent name' , ( ) => {
189+ const logger = loggerFactory ( 'parent' , { disableStackdriverFormat : true } ) ;
190+ const childLogger = logger ( 'child' ) ;
191+
192+ expect ( childLogger . options . loggerName ) . toBe ( 'parentchild' ) ;
193+ } ) ;
194+
195+ test ( 'Child logger can create another child' , ( ) => {
196+ const logger = loggerFactory ( 'parent' , { disableStackdriverFormat : true } ) ;
197+ const childLogger = logger ( 'child' ) ;
198+ const kid = childLogger ( 'grandkid' ) ;
199+
200+ expect ( kid . options . loggerName ) . toBe ( 'parentchildgrandkid' ) ;
201+ } ) ;
0 commit comments