@easyflow/javascript-sdk 2.1.8 → 2.1.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +87 -7
- package/dist/index.d.ts +421 -0
- package/package.json +19 -6
- package/.babelrc +0 -5
- package/.github/workflows/deploy-sdk-cf.yml +0 -49
- package/.github/workflows/release-sdk-cdn.yml +0 -144
- package/.github/workflows/release-sdk.yml +0 -112
- package/.prettierrc +0 -6
- package/CDN-DEPLOYMENT.md +0 -175
- package/DEMO.md +0 -258
- package/DEPLOYMENT.md +0 -224
- package/INTEGRATION-GUIDE.md +0 -521
- package/coverage/base.css +0 -224
- package/coverage/block-navigation.js +0 -87
- package/coverage/easyflow-javascript-sdk/index.html +0 -116
- package/coverage/easyflow-javascript-sdk/libs/constants.mjs.html +0 -268
- package/coverage/easyflow-javascript-sdk/libs/errors.mjs.html +0 -271
- package/coverage/easyflow-javascript-sdk/libs/exception-handler.mjs.html +0 -148
- package/coverage/easyflow-javascript-sdk/libs/fingerprint.mjs.html +0 -895
- package/coverage/easyflow-javascript-sdk/libs/http.mjs.html +0 -502
- package/coverage/easyflow-javascript-sdk/libs/index.html +0 -266
- package/coverage/easyflow-javascript-sdk/libs/logger.mjs.html +0 -568
- package/coverage/easyflow-javascript-sdk/libs/sanitizer.mjs.html +0 -1099
- package/coverage/easyflow-javascript-sdk/libs/security.mjs.html +0 -733
- package/coverage/easyflow-javascript-sdk/libs/types.mjs.html +0 -508
- package/coverage/easyflow-javascript-sdk/libs/utils.mjs.html +0 -379
- package/coverage/easyflow-javascript-sdk/libs/validator.mjs.html +0 -2623
- package/coverage/easyflow-javascript-sdk/sdk.mjs.html +0 -2434
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +0 -131
- package/coverage/lcov-report/base.css +0 -224
- package/coverage/lcov-report/block-navigation.js +0 -87
- package/coverage/lcov-report/easyflow-javascript-sdk/index.html +0 -116
- package/coverage/lcov-report/easyflow-javascript-sdk/libs/constants.mjs.html +0 -268
- package/coverage/lcov-report/easyflow-javascript-sdk/libs/errors.mjs.html +0 -271
- package/coverage/lcov-report/easyflow-javascript-sdk/libs/exception-handler.mjs.html +0 -148
- package/coverage/lcov-report/easyflow-javascript-sdk/libs/fingerprint.mjs.html +0 -895
- package/coverage/lcov-report/easyflow-javascript-sdk/libs/http.mjs.html +0 -502
- package/coverage/lcov-report/easyflow-javascript-sdk/libs/index.html +0 -266
- package/coverage/lcov-report/easyflow-javascript-sdk/libs/logger.mjs.html +0 -568
- package/coverage/lcov-report/easyflow-javascript-sdk/libs/sanitizer.mjs.html +0 -1099
- package/coverage/lcov-report/easyflow-javascript-sdk/libs/security.mjs.html +0 -733
- package/coverage/lcov-report/easyflow-javascript-sdk/libs/types.mjs.html +0 -508
- package/coverage/lcov-report/easyflow-javascript-sdk/libs/utils.mjs.html +0 -379
- package/coverage/lcov-report/easyflow-javascript-sdk/libs/validator.mjs.html +0 -2623
- package/coverage/lcov-report/easyflow-javascript-sdk/sdk.mjs.html +0 -2434
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +0 -131
- package/coverage/lcov-report/prettify.css +0 -1
- package/coverage/lcov-report/prettify.js +0 -2
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +0 -196
- package/coverage/lcov.info +0 -1429
- package/coverage/prettify.css +0 -1
- package/coverage/prettify.js +0 -2
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +0 -196
- package/dist/435.easyflow-sdk.min.js +0 -1
- package/dist/easyflow-sdk.min.js +0 -1
- package/dist/easyflow-sdk.min.js.LICENSE.txt +0 -1
- package/dist/index.html +0 -756
- package/docs/index.html +0 -775
- package/examples/lovable-integration.html +0 -410
- package/index.html +0 -981
- package/jest.config.js +0 -37
- package/jsdoc.json +0 -42
- package/libs/auto-integration.mjs +0 -333
- package/libs/constants.mjs +0 -61
- package/libs/constants.spec.js +0 -198
- package/libs/errors.mjs +0 -62
- package/libs/errors.spec.js +0 -178
- package/libs/exception-handler.mjs +0 -21
- package/libs/exception-handler.spec.js +0 -237
- package/libs/fingerprint.mjs +0 -270
- package/libs/http.mjs +0 -163
- package/libs/http.spec.js +0 -427
- package/libs/integration-wrapper.mjs +0 -285
- package/libs/logger.mjs +0 -161
- package/libs/logger.spec.js +0 -389
- package/libs/sanitizer.mjs +0 -340
- package/libs/sanitizer.spec.js +0 -583
- package/libs/security.mjs +0 -217
- package/libs/types.mjs +0 -141
- package/libs/utils.mjs +0 -368
- package/libs/utils.spec.js +0 -231
- package/libs/validator.mjs +0 -952
- package/libs/validator.spec.js +0 -615
- package/mocks/offer.mock.js +0 -77
- package/scripts/publish-npm.sh +0 -82
- package/sdk.mjs +0 -945
- package/sdk.spec.js +0 -796
- package/test-setup.cjs +0 -211
- package/test.html +0 -154
- package/webpack.config.cjs +0 -41
package/libs/logger.spec.js
DELETED
|
@@ -1,389 +0,0 @@
|
|
|
1
|
-
import { jest } from '@jest/globals'
|
|
2
|
-
import { SecureLogger } from './logger.mjs'
|
|
3
|
-
|
|
4
|
-
// Mock console methods
|
|
5
|
-
const originalConsole = { ...console }
|
|
6
|
-
const mockConsole = {
|
|
7
|
-
error: jest.fn(),
|
|
8
|
-
warn: jest.fn(),
|
|
9
|
-
log: jest.fn(),
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
describe('SecureLogger', () => {
|
|
13
|
-
let logger
|
|
14
|
-
|
|
15
|
-
beforeEach(() => {
|
|
16
|
-
jest.clearAllMocks()
|
|
17
|
-
// Replace console methods with mocks
|
|
18
|
-
global.console = mockConsole
|
|
19
|
-
})
|
|
20
|
-
|
|
21
|
-
afterEach(() => {
|
|
22
|
-
// Restore original console methods
|
|
23
|
-
global.console = originalConsole
|
|
24
|
-
})
|
|
25
|
-
|
|
26
|
-
describe('constructor', () => {
|
|
27
|
-
test('should create logger with default error level', () => {
|
|
28
|
-
logger = new SecureLogger()
|
|
29
|
-
expect(logger.level).toBe('error')
|
|
30
|
-
expect(logger.levels).toEqual({
|
|
31
|
-
error: 0,
|
|
32
|
-
warn: 1,
|
|
33
|
-
info: 2,
|
|
34
|
-
debug: 3,
|
|
35
|
-
})
|
|
36
|
-
})
|
|
37
|
-
|
|
38
|
-
test('should create logger with custom level', () => {
|
|
39
|
-
logger = new SecureLogger('info')
|
|
40
|
-
expect(logger.level).toBe('info')
|
|
41
|
-
})
|
|
42
|
-
|
|
43
|
-
test('should create logger with debug level', () => {
|
|
44
|
-
logger = new SecureLogger('debug')
|
|
45
|
-
expect(logger.level).toBe('debug')
|
|
46
|
-
})
|
|
47
|
-
})
|
|
48
|
-
|
|
49
|
-
describe('log method', () => {
|
|
50
|
-
beforeEach(() => {
|
|
51
|
-
logger = new SecureLogger('info')
|
|
52
|
-
})
|
|
53
|
-
|
|
54
|
-
test('should log error message when level is error', () => {
|
|
55
|
-
logger.log('error', 'Test error message', { error: 'details' })
|
|
56
|
-
|
|
57
|
-
expect(mockConsole.error).toHaveBeenCalledWith(
|
|
58
|
-
'[EasyflowSDK:ERROR] Test error message',
|
|
59
|
-
{ error: 'details' }
|
|
60
|
-
)
|
|
61
|
-
})
|
|
62
|
-
|
|
63
|
-
test('should log warn message when level is warn', () => {
|
|
64
|
-
logger.log('warn', 'Test warning message', { warning: 'details' })
|
|
65
|
-
|
|
66
|
-
expect(mockConsole.warn).toHaveBeenCalledWith(
|
|
67
|
-
'[EasyflowSDK:WARN] Test warning message',
|
|
68
|
-
{ warning: 'details' }
|
|
69
|
-
)
|
|
70
|
-
})
|
|
71
|
-
|
|
72
|
-
test('should log info message when level is info', () => {
|
|
73
|
-
logger.log('info', 'Test info message', { info: 'details' })
|
|
74
|
-
|
|
75
|
-
expect(mockConsole.log).toHaveBeenCalledWith(
|
|
76
|
-
'[EasyflowSDK:INFO] Test info message',
|
|
77
|
-
{ info: 'details' }
|
|
78
|
-
)
|
|
79
|
-
})
|
|
80
|
-
|
|
81
|
-
test('should log debug message when level is debug', () => {
|
|
82
|
-
logger = new SecureLogger('debug')
|
|
83
|
-
logger.log('debug', 'Test debug message', { debug: 'details' })
|
|
84
|
-
|
|
85
|
-
expect(mockConsole.log).toHaveBeenCalledWith(
|
|
86
|
-
'[EasyflowSDK:DEBUG] Test debug message',
|
|
87
|
-
{ debug: 'details' }
|
|
88
|
-
)
|
|
89
|
-
})
|
|
90
|
-
|
|
91
|
-
test('should not log when message level is higher than logger level', () => {
|
|
92
|
-
logger = new SecureLogger('error')
|
|
93
|
-
logger.log('info', 'This should not be logged')
|
|
94
|
-
|
|
95
|
-
expect(mockConsole.log).not.toHaveBeenCalled()
|
|
96
|
-
expect(mockConsole.error).not.toHaveBeenCalled()
|
|
97
|
-
})
|
|
98
|
-
|
|
99
|
-
test('should log when message level is equal to logger level', () => {
|
|
100
|
-
logger = new SecureLogger('warn')
|
|
101
|
-
logger.log('warn', 'This should be logged')
|
|
102
|
-
|
|
103
|
-
expect(mockConsole.warn).toHaveBeenCalledWith(
|
|
104
|
-
'[EasyflowSDK:WARN] This should be logged',
|
|
105
|
-
null
|
|
106
|
-
)
|
|
107
|
-
})
|
|
108
|
-
|
|
109
|
-
test('should log when message level is lower than logger level', () => {
|
|
110
|
-
logger = new SecureLogger('debug')
|
|
111
|
-
logger.log('error', 'This should be logged')
|
|
112
|
-
|
|
113
|
-
expect(mockConsole.error).toHaveBeenCalledWith(
|
|
114
|
-
'[EasyflowSDK:ERROR] This should be logged',
|
|
115
|
-
null
|
|
116
|
-
)
|
|
117
|
-
})
|
|
118
|
-
|
|
119
|
-
test('should handle null data', () => {
|
|
120
|
-
logger.log('info', 'Test message', null)
|
|
121
|
-
|
|
122
|
-
expect(mockConsole.log).toHaveBeenCalledWith(
|
|
123
|
-
'[EasyflowSDK:INFO] Test message',
|
|
124
|
-
null
|
|
125
|
-
)
|
|
126
|
-
})
|
|
127
|
-
|
|
128
|
-
test('should handle undefined data', () => {
|
|
129
|
-
logger.log('info', 'Test message', undefined)
|
|
130
|
-
|
|
131
|
-
expect(mockConsole.log).toHaveBeenCalledWith(
|
|
132
|
-
'[EasyflowSDK:INFO] Test message',
|
|
133
|
-
null
|
|
134
|
-
)
|
|
135
|
-
})
|
|
136
|
-
})
|
|
137
|
-
|
|
138
|
-
describe('sanitizeData method', () => {
|
|
139
|
-
beforeEach(() => {
|
|
140
|
-
logger = new SecureLogger()
|
|
141
|
-
})
|
|
142
|
-
|
|
143
|
-
test('should return null for null data', () => {
|
|
144
|
-
const result = logger.sanitizeData(null)
|
|
145
|
-
expect(result).toBeNull()
|
|
146
|
-
})
|
|
147
|
-
|
|
148
|
-
test('should return null for undefined data', () => {
|
|
149
|
-
const result = logger.sanitizeData(undefined)
|
|
150
|
-
expect(result).toBeNull()
|
|
151
|
-
})
|
|
152
|
-
|
|
153
|
-
test('should redact sensitive fields', () => {
|
|
154
|
-
const data = {
|
|
155
|
-
cardNumber: '4111111111111111',
|
|
156
|
-
cvv: '123',
|
|
157
|
-
token: 'secret-token',
|
|
158
|
-
password: 'secret-password',
|
|
159
|
-
apiKey: 'secret-api-key',
|
|
160
|
-
private: 'private-data',
|
|
161
|
-
credential: 'credential-data',
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
const result = logger.sanitizeData(data)
|
|
165
|
-
|
|
166
|
-
expect(result.cardNumber).toBe('[REDACTED]')
|
|
167
|
-
expect(result.cvv).toBe('[REDACTED]')
|
|
168
|
-
expect(result.token).toBe('[REDACTED]')
|
|
169
|
-
expect(result.password).toBe('[REDACTED]')
|
|
170
|
-
expect(result.apiKey).toBe('[REDACTED]')
|
|
171
|
-
expect(result.private).toBe('[REDACTED]')
|
|
172
|
-
expect(result.credential).toBe('[REDACTED]')
|
|
173
|
-
})
|
|
174
|
-
|
|
175
|
-
test('should redact case-insensitive sensitive fields', () => {
|
|
176
|
-
const data = {
|
|
177
|
-
CardNumber: '4111111111111111',
|
|
178
|
-
CVV: '123',
|
|
179
|
-
Token: 'secret-token',
|
|
180
|
-
APIKEY: 'secret-api-key',
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
const result = logger.sanitizeData(data)
|
|
184
|
-
|
|
185
|
-
expect(result.CardNumber).toBe('[REDACTED]')
|
|
186
|
-
expect(result.CVV).toBe('[REDACTED]')
|
|
187
|
-
expect(result.Token).toBe('[REDACTED]')
|
|
188
|
-
expect(result.APIKEY).toBe('[REDACTED]')
|
|
189
|
-
})
|
|
190
|
-
|
|
191
|
-
test('should truncate long strings', () => {
|
|
192
|
-
const longString = 'a'.repeat(150)
|
|
193
|
-
const data = {
|
|
194
|
-
message: longString,
|
|
195
|
-
shortMessage: 'short',
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
const result = logger.sanitizeData(data)
|
|
199
|
-
|
|
200
|
-
expect(result.message).toBe('a'.repeat(100) + '...')
|
|
201
|
-
expect(result.shortMessage).toBe('short')
|
|
202
|
-
})
|
|
203
|
-
|
|
204
|
-
test('should handle nested objects', () => {
|
|
205
|
-
const data = {
|
|
206
|
-
user: {
|
|
207
|
-
cardNumber: '4111111111111111',
|
|
208
|
-
name: 'John Doe',
|
|
209
|
-
},
|
|
210
|
-
payment: {
|
|
211
|
-
token: 'secret-token',
|
|
212
|
-
amount: 1000,
|
|
213
|
-
},
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
const result = logger.sanitizeData(data)
|
|
217
|
-
|
|
218
|
-
expect(result.user.cardNumber).toBe('[REDACTED]')
|
|
219
|
-
expect(result.user.name).toBe('John Doe')
|
|
220
|
-
expect(result.payment.token).toBe('[REDACTED]')
|
|
221
|
-
expect(result.payment.amount).toBe(1000)
|
|
222
|
-
})
|
|
223
|
-
|
|
224
|
-
test('should handle arrays', () => {
|
|
225
|
-
const data = {
|
|
226
|
-
payments: [
|
|
227
|
-
{ cardNumber: '4111111111111111', amount: 100 },
|
|
228
|
-
{ cardNumber: '5555555555554444', amount: 200 },
|
|
229
|
-
],
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
const result = logger.sanitizeData(data)
|
|
233
|
-
|
|
234
|
-
expect(result.payments[0].cardNumber).toBe('[REDACTED]')
|
|
235
|
-
expect(result.payments[0].amount).toBe(100)
|
|
236
|
-
expect(result.payments[1].cardNumber).toBe('[REDACTED]')
|
|
237
|
-
expect(result.payments[1].amount).toBe(200)
|
|
238
|
-
})
|
|
239
|
-
|
|
240
|
-
test('should preserve non-sensitive data', () => {
|
|
241
|
-
const data = {
|
|
242
|
-
orderId: 'order-123',
|
|
243
|
-
amount: 1000,
|
|
244
|
-
status: 'pending',
|
|
245
|
-
customer: {
|
|
246
|
-
name: 'John Doe',
|
|
247
|
-
email: 'john@example.com',
|
|
248
|
-
},
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
const result = logger.sanitizeData(data)
|
|
252
|
-
|
|
253
|
-
expect(result.orderId).toBe('order-123')
|
|
254
|
-
expect(result.amount).toBe(1000)
|
|
255
|
-
expect(result.status).toBe('pending')
|
|
256
|
-
expect(result.customer.name).toBe('John Doe')
|
|
257
|
-
expect(result.customer.email).toBe('john@example.com')
|
|
258
|
-
})
|
|
259
|
-
|
|
260
|
-
test('should handle mixed sensitive and non-sensitive data', () => {
|
|
261
|
-
const data = {
|
|
262
|
-
orderId: 'order-123',
|
|
263
|
-
cardNumber: '4111111111111111',
|
|
264
|
-
amount: 1000,
|
|
265
|
-
token: 'secret-token',
|
|
266
|
-
customer: {
|
|
267
|
-
name: 'John Doe',
|
|
268
|
-
cvv: '123',
|
|
269
|
-
},
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
const result = logger.sanitizeData(data)
|
|
273
|
-
|
|
274
|
-
expect(result.orderId).toBe('order-123')
|
|
275
|
-
expect(result.cardNumber).toBe('[REDACTED]')
|
|
276
|
-
expect(result.amount).toBe(1000)
|
|
277
|
-
expect(result.token).toBe('[REDACTED]')
|
|
278
|
-
expect(result.customer.name).toBe('John Doe')
|
|
279
|
-
expect(result.customer.cvv).toBe('[REDACTED]')
|
|
280
|
-
})
|
|
281
|
-
})
|
|
282
|
-
|
|
283
|
-
describe('convenience methods', () => {
|
|
284
|
-
beforeEach(() => {
|
|
285
|
-
logger = new SecureLogger('debug')
|
|
286
|
-
})
|
|
287
|
-
|
|
288
|
-
test('should call log with error level', () => {
|
|
289
|
-
logger.error('Error message', { error: 'details' })
|
|
290
|
-
|
|
291
|
-
expect(mockConsole.error).toHaveBeenCalledWith(
|
|
292
|
-
'[EasyflowSDK:ERROR] Error message',
|
|
293
|
-
{ error: 'details' }
|
|
294
|
-
)
|
|
295
|
-
})
|
|
296
|
-
|
|
297
|
-
test('should call log with warn level', () => {
|
|
298
|
-
logger.warn('Warning message', { warning: 'details' })
|
|
299
|
-
|
|
300
|
-
expect(mockConsole.warn).toHaveBeenCalledWith(
|
|
301
|
-
'[EasyflowSDK:WARN] Warning message',
|
|
302
|
-
{ warning: 'details' }
|
|
303
|
-
)
|
|
304
|
-
})
|
|
305
|
-
|
|
306
|
-
test('should call log with info level', () => {
|
|
307
|
-
logger.info('Info message', { info: 'details' })
|
|
308
|
-
|
|
309
|
-
expect(mockConsole.log).toHaveBeenCalledWith(
|
|
310
|
-
'[EasyflowSDK:INFO] Info message',
|
|
311
|
-
{ info: 'details' }
|
|
312
|
-
)
|
|
313
|
-
})
|
|
314
|
-
|
|
315
|
-
test('should call log with debug level', () => {
|
|
316
|
-
logger.debug('Debug message', { debug: 'details' })
|
|
317
|
-
|
|
318
|
-
expect(mockConsole.log).toHaveBeenCalledWith(
|
|
319
|
-
'[EasyflowSDK:DEBUG] Debug message',
|
|
320
|
-
{ debug: 'details' }
|
|
321
|
-
)
|
|
322
|
-
})
|
|
323
|
-
|
|
324
|
-
test('should handle null data in convenience methods', () => {
|
|
325
|
-
logger.error('Error message')
|
|
326
|
-
logger.warn('Warning message')
|
|
327
|
-
logger.info('Info message')
|
|
328
|
-
logger.debug('Debug message')
|
|
329
|
-
|
|
330
|
-
expect(mockConsole.error).toHaveBeenCalledWith(
|
|
331
|
-
'[EasyflowSDK:ERROR] Error message',
|
|
332
|
-
null
|
|
333
|
-
)
|
|
334
|
-
expect(mockConsole.warn).toHaveBeenCalledWith(
|
|
335
|
-
'[EasyflowSDK:WARN] Warning message',
|
|
336
|
-
null
|
|
337
|
-
)
|
|
338
|
-
expect(mockConsole.log).toHaveBeenCalledWith(
|
|
339
|
-
'[EasyflowSDK:INFO] Info message',
|
|
340
|
-
null
|
|
341
|
-
)
|
|
342
|
-
expect(mockConsole.log).toHaveBeenCalledWith(
|
|
343
|
-
'[EasyflowSDK:DEBUG] Debug message',
|
|
344
|
-
null
|
|
345
|
-
)
|
|
346
|
-
})
|
|
347
|
-
})
|
|
348
|
-
|
|
349
|
-
describe('level filtering', () => {
|
|
350
|
-
test('should filter messages based on logger level', () => {
|
|
351
|
-
logger = new SecureLogger('warn')
|
|
352
|
-
|
|
353
|
-
logger.error('Error message')
|
|
354
|
-
logger.warn('Warning message')
|
|
355
|
-
logger.info('Info message')
|
|
356
|
-
logger.debug('Debug message')
|
|
357
|
-
|
|
358
|
-
expect(mockConsole.error).toHaveBeenCalledTimes(1)
|
|
359
|
-
expect(mockConsole.warn).toHaveBeenCalledTimes(1)
|
|
360
|
-
expect(mockConsole.log).not.toHaveBeenCalled()
|
|
361
|
-
})
|
|
362
|
-
|
|
363
|
-
test('should allow all messages when level is debug', () => {
|
|
364
|
-
logger = new SecureLogger('debug')
|
|
365
|
-
|
|
366
|
-
logger.error('Error message')
|
|
367
|
-
logger.warn('Warning message')
|
|
368
|
-
logger.info('Info message')
|
|
369
|
-
logger.debug('Debug message')
|
|
370
|
-
|
|
371
|
-
expect(mockConsole.error).toHaveBeenCalledTimes(1)
|
|
372
|
-
expect(mockConsole.warn).toHaveBeenCalledTimes(1)
|
|
373
|
-
expect(mockConsole.log).toHaveBeenCalledTimes(2)
|
|
374
|
-
})
|
|
375
|
-
|
|
376
|
-
test('should only allow error messages when level is error', () => {
|
|
377
|
-
logger = new SecureLogger('error')
|
|
378
|
-
|
|
379
|
-
logger.error('Error message')
|
|
380
|
-
logger.warn('Warning message')
|
|
381
|
-
logger.info('Info message')
|
|
382
|
-
logger.debug('Debug message')
|
|
383
|
-
|
|
384
|
-
expect(mockConsole.error).toHaveBeenCalledTimes(1)
|
|
385
|
-
expect(mockConsole.warn).not.toHaveBeenCalled()
|
|
386
|
-
expect(mockConsole.log).not.toHaveBeenCalled()
|
|
387
|
-
})
|
|
388
|
-
})
|
|
389
|
-
})
|