1+ // SPDX-FileCopyrightText: 2022 SAP SE or an SAP affiliate company and CLA-assistant contributors
2+ //
3+ // SPDX-License-Identifier: Apache-2.0
4+
5+ /*global describe, it, beforeEach, afterEach*/
6+ const assert = require ( 'assert' )
7+ const sinon = require ( 'sinon' )
8+ const bunyan = require ( 'bunyan' )
9+
10+ describe ( 'logger service' , ( ) => {
11+ let logStub
12+ let logger
13+
14+ beforeEach ( ( ) => {
15+ logStub = {
16+ info : sinon . stub ( ) ,
17+ error : sinon . stub ( ) ,
18+ warn : sinon . stub ( ) ,
19+ debug : sinon . stub ( )
20+ }
21+ // Stub bunyan.createLogger to return our stub
22+ sinon . stub ( bunyan , 'createLogger' ) . returns ( logStub )
23+ // Clear require cache to force reload of logger
24+ delete require . cache [ require . resolve ( '../../../server/src/services/logger' ) ]
25+ logger = require ( '../../../server/src/services/logger' )
26+ } )
27+
28+ afterEach ( ( ) => {
29+ sinon . restore ( )
30+ } )
31+
32+ describe ( 'startRequest' , ( ) => {
33+ it ( 'should log request start with context' , ( ) => {
34+ const req = {
35+ method : 'GET' ,
36+ url : '/test' ,
37+ headers : {
38+ 'x-request-id' : '123'
39+ }
40+ }
41+ logger . startRequest ( req )
42+ assert ( logStub . info . calledOnce )
43+ const logCall = logStub . info . getCall ( 0 ) . args [ 0 ]
44+ assert . equal ( logCall . event , 'REQUEST_STARTED' )
45+ assert . equal ( logCall . msg , 'Started GET /test' )
46+ assert . deepEqual ( logCall . req , {
47+ method : 'GET' ,
48+ url : '/test' ,
49+ headers : {
50+ 'x-request-id' : '123'
51+ }
52+ } )
53+ } )
54+ } )
55+
56+ describe ( 'endRequest' , ( ) => {
57+ it ( 'should log request end with duration and status' , ( ) => {
58+ const req = {
59+ method : 'GET' ,
60+ url : '/test' ,
61+ headers : {
62+ 'x-request-id' : '123'
63+ }
64+ }
65+ const res = {
66+ statusCode : 200
67+ }
68+ const duration = 100
69+ logger . endRequest ( req , res , duration )
70+ assert ( logStub . info . calledOnce )
71+ const logCall = logStub . info . getCall ( 0 ) . args [ 0 ]
72+ assert . equal ( logCall . event , 'REQUEST_COMPLETED' )
73+ assert . equal ( logCall . msg , 'Completed GET /test in 100ms' )
74+ assert . deepEqual ( logCall . req , {
75+ method : 'GET' ,
76+ url : '/test' ,
77+ headers : {
78+ 'x-request-id' : '123'
79+ }
80+ } )
81+ assert . deepEqual ( logCall . res , {
82+ statusCode : 200
83+ } )
84+ assert . equal ( logCall . duration_ms , duration )
85+ } )
86+ } )
87+
88+ describe ( 'info' , ( ) => {
89+ it ( 'should log info with context' , ( ) => {
90+ const message = 'test message'
91+ const context = { key : 'value' }
92+ logger . info ( message , context )
93+ assert ( logStub . info . calledOnce )
94+ const logCall = logStub . info . getCall ( 0 ) . args [ 0 ]
95+ assert . equal ( logCall . event , 'INFO' )
96+ assert . equal ( logCall . msg , message )
97+ assert . equal ( logCall . key , 'value' )
98+ } )
99+ } )
100+
101+ describe ( 'error' , ( ) => {
102+ it ( 'should log error with context' , ( ) => {
103+ const error = new Error ( 'test error' )
104+ const context = { key : 'value' }
105+ logger . error ( error , context )
106+ assert ( logStub . error . calledOnce )
107+ const logCall = logStub . error . getCall ( 0 ) . args [ 0 ]
108+ assert . equal ( logCall . event , 'ERROR' )
109+ assert . equal ( logCall . msg , 'test error' )
110+ assert . equal ( logCall . error , error )
111+ assert . equal ( logCall . key , 'value' )
112+ } )
113+ } )
114+
115+ describe ( 'warn' , ( ) => {
116+ it ( 'should log warning with context' , ( ) => {
117+ const message = 'test warning'
118+ const context = { key : 'value' }
119+ logger . warn ( message , context )
120+ assert ( logStub . warn . calledOnce )
121+ const logCall = logStub . warn . getCall ( 0 ) . args [ 0 ]
122+ assert . equal ( logCall . event , 'WARNING' )
123+ assert . equal ( logCall . msg , message )
124+ assert . equal ( logCall . key , 'value' )
125+ } )
126+ } )
127+
128+ describe ( 'debug' , ( ) => {
129+ it ( 'should log debug with context' , ( ) => {
130+ const message = 'test debug'
131+ const context = { key : 'value' }
132+ logger . debug ( message , context )
133+ assert ( logStub . debug . calledOnce )
134+ const logCall = logStub . debug . getCall ( 0 ) . args [ 0 ]
135+ assert . equal ( logCall . event , 'DEBUG' )
136+ assert . equal ( logCall . msg , message )
137+ assert . equal ( logCall . key , 'value' )
138+ } )
139+ } )
140+ } )
0 commit comments