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