1
1
/* eslint-disable global-require */
2
+ // eslint-disable-next-line max-classes-per-file
2
3
describe ( 'error-handler' , ( ) => {
3
4
let config ;
4
5
@@ -29,80 +30,136 @@ describe('error-handler', () => {
29
30
process . on = jest . fn ( ) . mockReturnValue ( true ) ;
30
31
} ) ;
31
32
32
- describe ( 'triggers process.on' , ( ) => {
33
- beforeEach ( ( ) => {
34
- const { runErrorHandler } = require ( '../error-handler' ) ;
35
- runErrorHandler ( mockLogger ) ;
36
- } ) ;
33
+ describe ( 'errorHandlerWrapper' , ( ) => {
34
+ [
35
+ {
36
+ label : 'Error -1001' ,
37
+ code : - 1001 ,
38
+ sendSlack : false ,
39
+ featureToggleNotifyDebug : false
40
+ } ,
41
+ {
42
+ label : 'Error -1021' ,
43
+ code : - 1021 ,
44
+ sendSlack : false ,
45
+ featureToggleNotifyDebug : true
46
+ } ,
47
+ {
48
+ label : 'Error ECONNRESET' ,
49
+ code : 'ECONNRESET' ,
50
+ sendSlack : false ,
51
+ featureToggleNotifyDebug : false
52
+ } ,
53
+ {
54
+ label : 'Error ECONNREFUSED' ,
55
+ code : 'ECONNREFUSED' ,
56
+ sendSlack : false ,
57
+ featureToggleNotifyDebug : true
58
+ } ,
59
+ {
60
+ label : 'Error something else - with notify debug' ,
61
+ code : 'something' ,
62
+ sendSlack : true ,
63
+ featureToggleNotifyDebug : true
64
+ } ,
65
+ {
66
+ label : 'Error something else - without notify debug' ,
67
+ code : 'something' ,
68
+ sendSlack : true ,
69
+ featureToggleNotifyDebug : false
70
+ }
71
+ ] . forEach ( errorInfo => {
72
+ describe ( `${ errorInfo . label } ` , ( ) => {
73
+ beforeEach ( async ( ) => {
74
+ config . get = jest . fn ( key => {
75
+ if ( key === 'featureToggle.notifyDebug' ) {
76
+ return errorInfo . featureToggleNotifyDebug ;
77
+ }
78
+ return null ;
79
+ } ) ;
37
80
38
- it ( 'with unhandledRejection' , ( ) => {
39
- expect ( process . on ) . toHaveBeenCalledWith (
40
- 'unhandledRejection' ,
41
- expect . any ( Function )
42
- ) ;
81
+ const { errorHandlerWrapper } = require ( '../error-handler' ) ;
82
+ await errorHandlerWrapper ( mockLogger , 'WhateverJob' , ( ) => {
83
+ throw new ( class CustomError extends Error {
84
+ constructor ( ) {
85
+ super ( ) ;
86
+ this . code = errorInfo . code ;
87
+ this . message = `${ errorInfo . code } ` ;
88
+ }
89
+ } ) ( ) ;
90
+ } ) ;
91
+ } ) ;
92
+
93
+ if ( errorInfo . sendSlack ) {
94
+ it ( 'triggers slack.sendMessage' , ( ) => {
95
+ expect ( mockSlack . sendMessage ) . toHaveBeenCalled ( ) ;
96
+ } ) ;
97
+ } else {
98
+ it ( 'does not trigger slack.sendMessage' , ( ) => {
99
+ expect ( mockSlack . sendMessage ) . not . toHaveBeenCalled ( ) ;
100
+ } ) ;
101
+ }
102
+ } ) ;
43
103
} ) ;
44
104
45
- it ( 'with uncaughtException' , ( ) => {
46
- expect ( process . on ) . toHaveBeenCalledWith (
47
- 'uncaughtException' ,
48
- expect . any ( Function )
49
- ) ;
105
+ describe ( `redlock error` , ( ) => {
106
+ beforeEach ( async ( ) => {
107
+ config . get = jest . fn ( _key => null ) ;
108
+
109
+ const { errorHandlerWrapper } = require ( '../error-handler' ) ;
110
+ await errorHandlerWrapper ( mockLogger , 'WhateverJob' , ( ) => {
111
+ throw new ( class CustomError extends Error {
112
+ constructor ( ) {
113
+ super ( ) ;
114
+ this . code = 500 ;
115
+ this . message = `redlock:lock-XRPBUSD` ;
116
+ }
117
+ } ) ( ) ;
118
+ } ) ;
119
+ } ) ;
120
+
121
+ it ( 'do not trigger slack.sendMessagage' , ( ) => {
122
+ expect ( mockSlack . sendMessage ) . not . toHaveBeenCalled ( ) ;
123
+ } ) ;
50
124
} ) ;
51
125
} ) ;
52
126
53
- [
54
- {
55
- label : 'Error -1001' ,
56
- code : - 1001 ,
57
- sendSlack : false ,
58
- featureToggleNotifyDebug : false
59
- } ,
60
- {
61
- label : 'Error -1021' ,
62
- code : - 1021 ,
63
- sendSlack : false ,
64
- featureToggleNotifyDebug : true
65
- } ,
66
- {
67
- label : 'Error ECONNRESET' ,
68
- code : 'ECONNRESET' ,
69
- sendSlack : false ,
70
- featureToggleNotifyDebug : false
71
- } ,
72
- {
73
- label : 'Error ECONNREFUSED' ,
74
- code : 'ECONNREFUSED' ,
75
- sendSlack : false ,
76
- featureToggleNotifyDebug : true
77
- } ,
78
- {
79
- label : 'Error something else - with notify debug' ,
80
- code : 'something' ,
81
- sendSlack : true ,
82
- featureToggleNotifyDebug : true
83
- } ,
84
- {
85
- label : 'Error something else - without notify debug' ,
86
- code : 'something' ,
87
- sendSlack : true ,
88
- featureToggleNotifyDebug : false
89
- }
90
- ] . forEach ( errorInfo => {
91
- describe ( `${ errorInfo . label } ` , ( ) => {
127
+ describe ( 'runErrorHandler' , ( ) => {
128
+ describe ( 'triggers process.on' , ( ) => {
129
+ beforeEach ( ( ) => {
130
+ const { runErrorHandler } = require ( '../error-handler' ) ;
131
+ runErrorHandler ( mockLogger ) ;
132
+ } ) ;
133
+
134
+ it ( 'with unhandledRejection' , ( ) => {
135
+ expect ( process . on ) . toHaveBeenCalledWith (
136
+ 'unhandledRejection' ,
137
+ expect . any ( Function )
138
+ ) ;
139
+ } ) ;
140
+
141
+ it ( 'with uncaughtException' , ( ) => {
142
+ expect ( process . on ) . toHaveBeenCalledWith (
143
+ 'uncaughtException' ,
144
+ expect . any ( Function )
145
+ ) ;
146
+ } ) ;
147
+ } ) ;
148
+
149
+ describe ( `when uncaughtException received without notifyDebug` , ( ) => {
92
150
beforeEach ( async ( ) => {
93
151
config . get = jest . fn ( key => {
94
152
if ( key === 'featureToggle.notifyDebug' ) {
95
- return errorInfo . featureToggleNotifyDebug ;
153
+ return false ;
96
154
}
97
155
return null ;
98
156
} ) ;
99
157
100
158
process . on = jest . fn ( ) . mockImplementation ( ( event , error ) => {
101
159
if ( event === 'uncaughtException' ) {
102
160
error ( {
103
- message : errorInfo . label ,
104
- code : errorInfo . code ,
105
- stack : errorInfo . code
161
+ message : `something-unexpected` ,
162
+ code : 1000
106
163
} ) ;
107
164
}
108
165
} ) ;
@@ -111,53 +168,54 @@ describe('error-handler', () => {
111
168
runErrorHandler ( mockLogger ) ;
112
169
} ) ;
113
170
114
- if ( errorInfo . sendSlack ) {
115
- it ( 'triggers slack.sendMessage' , ( ) => {
116
- expect ( mockSlack . sendMessage ) . toHaveBeenCalled ( ) ;
117
- } ) ;
118
- } else {
119
- it ( 'does not trigger slack.sendMessage' , ( ) => {
120
- expect ( mockSlack . sendMessage ) . not . toHaveBeenCalled ( ) ;
121
- } ) ;
122
- }
123
- } ) ;
124
- } ) ;
125
-
126
- describe ( `redlock error` , ( ) => {
127
- beforeEach ( async ( ) => {
128
- process . on = jest . fn ( ) . mockImplementation ( ( event , error ) => {
129
- if ( event === 'uncaughtException' ) {
130
- error ( {
131
- message : `redlock:bot-lock:XRPBUSD` ,
132
- code : 500
133
- } ) ;
134
- }
171
+ it ( 'triggers slack.sendMessage' , ( ) => {
172
+ expect ( mockSlack . sendMessage ) . toHaveBeenCalled ( ) ;
135
173
} ) ;
136
-
137
- const { runErrorHandler } = require ( '../error-handler' ) ;
138
- runErrorHandler ( mockLogger ) ;
139
174
} ) ;
140
175
141
- it ( 'do not trigger slack.sendMessagage' , ( ) => {
142
- expect ( mockSlack . sendMessage ) . not . toHaveBeenCalled ( ) ;
143
- } ) ;
144
- } ) ;
176
+ describe ( `when uncaughtException received with notifyDebug` , ( ) => {
177
+ beforeEach ( async ( ) => {
178
+ config . get = jest . fn ( key => {
179
+ if ( key === 'featureToggle.notifyDebug' ) {
180
+ return true ;
181
+ }
182
+ return null ;
183
+ } ) ;
145
184
146
- describe ( `any warning received on unhandledRejection` , ( ) => {
147
- it ( 'do not trigger slack.sendMessage' , async ( ) => {
148
- expect ( ( ) => {
149
185
process . on = jest . fn ( ) . mockImplementation ( ( event , error ) => {
150
- if ( event === 'unhandledRejection ' ) {
186
+ if ( event === 'uncaughtException ' ) {
151
187
error ( {
152
- message : `redlock:bot-lock:XRPBUSD ` ,
153
- code : 500
188
+ message : `something-unexpected ` ,
189
+ code : 1000
154
190
} ) ;
155
191
}
156
192
} ) ;
157
193
158
194
const { runErrorHandler } = require ( '../error-handler' ) ;
159
195
runErrorHandler ( mockLogger ) ;
160
- } ) . toThrow ( `redlock:bot-lock:XRPBUSD` ) ;
196
+ } ) ;
197
+
198
+ it ( 'triggers slack.sendMessage' , ( ) => {
199
+ expect ( mockSlack . sendMessage ) . toHaveBeenCalled ( ) ;
200
+ } ) ;
201
+ } ) ;
202
+
203
+ describe ( `when unhandledRejection received` , ( ) => {
204
+ it ( 'throws an error' , async ( ) => {
205
+ expect ( ( ) => {
206
+ process . on = jest . fn ( ) . mockImplementation ( ( event , error ) => {
207
+ if ( event === 'unhandledRejection' ) {
208
+ error ( {
209
+ message : `something-unhandled` ,
210
+ code : 2000
211
+ } ) ;
212
+ }
213
+ } ) ;
214
+
215
+ const { runErrorHandler } = require ( '../error-handler' ) ;
216
+ runErrorHandler ( mockLogger ) ;
217
+ } ) . toThrow ( `something-unhandled` ) ;
218
+ } ) ;
161
219
} ) ;
162
220
} ) ;
163
221
} ) ;
0 commit comments