@@ -7,16 +7,7 @@ import * as Instabug from '../../src/modules/Instabug';
7
7
import * as NetworkLogger from '../../src/modules/NetworkLogger' ;
8
8
import { NativeCrashReporting } from '../../src/native/NativeCrashReporting' ;
9
9
import { InvocationEvent , NetworkData , NonFatalErrorLevel } from '../../src' ;
10
- import InstabugUtils , {
11
- getStackTrace ,
12
- registerFilteringAndObfuscationListener ,
13
- registerFilteringListener ,
14
- registerObfuscationListener ,
15
- reportNetworkLog ,
16
- resetNativeObfuscationListener ,
17
- sendCrashReport ,
18
- updateNetworkLogSnapshot ,
19
- } from '../../src/utils/InstabugUtils' ;
10
+ import * as InstabugUtils from '../../src/utils/InstabugUtils' ;
20
11
21
12
import {
22
13
NativeNetworkLogger ,
@@ -203,9 +194,9 @@ describe('Instabug Utils', () => {
203
194
const remoteSenderCallback = NativeCrashReporting . sendHandledJSCrash ;
204
195
Platform . OS = 'android' ;
205
196
const errorMock = new TypeError ( 'Invalid type' ) ;
206
- const jsStackTrace = getStackTrace ( errorMock ) ;
197
+ const jsStackTrace = InstabugUtils . getStackTrace ( errorMock ) ;
207
198
208
- sendCrashReport ( errorMock , ( data ) =>
199
+ InstabugUtils . sendCrashReport ( errorMock , ( data ) =>
209
200
remoteSenderCallback ( data , null , null , NonFatalErrorLevel . error ) ,
210
201
) ;
211
202
@@ -231,9 +222,9 @@ describe('Instabug Utils', () => {
231
222
const remoteSenderCallback = NativeCrashReporting . sendHandledJSCrash ;
232
223
Platform . OS = 'ios' ;
233
224
const errorMock = new TypeError ( 'Invalid type' ) ;
234
- const jsStackTrace = getStackTrace ( errorMock ) ;
225
+ const jsStackTrace = InstabugUtils . getStackTrace ( errorMock ) ;
235
226
236
- sendCrashReport ( errorMock , ( data ) =>
227
+ InstabugUtils . sendCrashReport ( errorMock , ( data ) =>
237
228
remoteSenderCallback ( data , null , null , NonFatalErrorLevel . error ) ,
238
229
) ;
239
230
const expectedMap = {
@@ -290,7 +281,7 @@ describe('reportNetworkLog', () => {
290
281
291
282
const requestHeaders = JSON . stringify ( network . requestHeaders ) ;
292
283
const responseHeaders = JSON . stringify ( network . responseHeaders ) ;
293
- reportNetworkLog ( network ) ;
284
+ InstabugUtils . reportNetworkLog ( network ) ;
294
285
295
286
expect ( NativeInstabug . networkLogAndroid ) . toHaveBeenCalledTimes ( 1 ) ;
296
287
expect ( NativeInstabug . networkLogAndroid ) . toHaveBeenCalledWith (
@@ -335,7 +326,7 @@ describe('reportNetworkLog', () => {
335
326
it ( 'reportNetworkLog should send network logs to native with the correct parameters on iOS' , ( ) => {
336
327
Platform . OS = 'ios' ;
337
328
338
- reportNetworkLog ( network ) ;
329
+ InstabugUtils . reportNetworkLog ( network ) ;
339
330
340
331
expect ( NativeInstabug . networkLogIOS ) . toHaveBeenCalledTimes ( 1 ) ;
341
332
expect ( NativeInstabug . networkLogIOS ) . toHaveBeenCalledWith (
@@ -397,7 +388,7 @@ describe('test registerNetworkLogsListener usage', () => {
397
388
} ;
398
389
399
390
it ( 'registerObfuscationListener should call NetworkLogger.registerNetworkLogsListener() with NetworkListenerType = NetworkListenerType.obfuscation' , ( ) => {
400
- registerObfuscationListener ( ) ;
391
+ InstabugUtils . registerObfuscationListener ( ) ;
401
392
expect ( NetworkLogger . registerNetworkLogsListener ) . toBeCalledTimes ( 1 ) ;
402
393
expect ( NetworkLogger . registerNetworkLogsListener ) . toBeCalledWith (
403
394
NetworkListenerType . obfuscation ,
@@ -407,7 +398,7 @@ describe('test registerNetworkLogsListener usage', () => {
407
398
408
399
it ( 'registerFilteringListener should call NetworkLogger.registerNetworkLogsListener() with NetworkListenerType = NetworkListenerType.filtering' , ( ) => {
409
400
const testText = 'true' ;
410
- registerFilteringListener ( testText ) ;
401
+ InstabugUtils . registerFilteringListener ( testText ) ;
411
402
412
403
expect ( NetworkLogger . registerNetworkLogsListener ) . toBeCalledTimes ( 1 ) ;
413
404
expect ( NetworkLogger . registerNetworkLogsListener ) . toBeCalledWith (
@@ -418,7 +409,7 @@ describe('test registerNetworkLogsListener usage', () => {
418
409
419
410
it ( 'registerFilteringAndObfuscationListener should call NetworkLogger.registerNetworkLogsListener() with NetworkListenerType = NetworkListenerType.both' , ( ) => {
420
411
const testText = 'true' ;
421
- registerFilteringAndObfuscationListener ( testText ) ;
412
+ InstabugUtils . registerFilteringAndObfuscationListener ( testText ) ;
422
413
423
414
expect ( NetworkLogger . registerNetworkLogsListener ) . toBeCalledTimes ( 1 ) ;
424
415
expect ( NetworkLogger . registerNetworkLogsListener ) . toBeCalledWith (
@@ -429,23 +420,23 @@ describe('test registerNetworkLogsListener usage', () => {
429
420
430
421
it ( 'should call NetworkLoggerEmitter.removeAllListeners when call resetNativeObfuscationListener' , ( ) => {
431
422
jest . spyOn ( NetworkLoggerEmitter , 'removeAllListeners' ) . mockImplementation ( ) ;
432
- resetNativeObfuscationListener ( ) ;
423
+ InstabugUtils . resetNativeObfuscationListener ( ) ;
433
424
expect ( NetworkLoggerEmitter . removeAllListeners ) . toBeCalledTimes ( 1 ) ;
434
425
} ) ;
435
426
436
427
it ( 'should call NativeNetworkLogger.resetNetworkLogsListener when call resetNativeObfuscationListener on android platform' , ( ) => {
437
428
Platform . OS = 'android' ;
438
429
jest . spyOn ( NativeNetworkLogger , 'resetNetworkLogsListener' ) . mockImplementation ( ) ;
439
430
jest . spyOn ( NetworkLoggerEmitter , 'removeAllListeners' ) . mockImplementation ( ) ;
440
- resetNativeObfuscationListener ( ) ;
431
+ InstabugUtils . resetNativeObfuscationListener ( ) ;
441
432
expect ( NativeNetworkLogger . resetNetworkLogsListener ) . toBeCalledTimes ( 1 ) ;
442
433
expect ( NetworkLoggerEmitter . removeAllListeners ) . toBeCalledTimes ( 1 ) ;
443
434
} ) ;
444
435
445
436
it ( 'should call NativeNetworkLogger.updateNetworkLogSnapshot when call updateNetworkLogSnapshot with correct parameters' , ( ) => {
446
437
jest . spyOn ( NativeNetworkLogger , 'updateNetworkLogSnapshot' ) . mockImplementation ( ) ;
447
438
448
- updateNetworkLogSnapshot ( network ) ;
439
+ InstabugUtils . updateNetworkLogSnapshot ( network ) ;
449
440
expect ( NativeNetworkLogger . updateNetworkLogSnapshot ) . toBeCalledTimes ( 1 ) ;
450
441
expect ( NativeNetworkLogger . updateNetworkLogSnapshot ) . toHaveBeenCalledWith (
451
442
network . url ,
@@ -458,3 +449,98 @@ describe('test registerNetworkLogsListener usage', () => {
458
449
) ;
459
450
} ) ;
460
451
} ) ;
452
+
453
+ describe ( 'InstabugUtils' , ( ) => {
454
+ it ( 'setApmNetworkFlagsIfChanged should return true if flags change' , ( ) => {
455
+ const flags = {
456
+ isNativeInterceptionFeatureEnabled : true ,
457
+ hasAPMNetworkPlugin : true ,
458
+ shouldEnableNativeInterception : true ,
459
+ } ;
460
+ expect ( InstabugUtils . setApmNetworkFlagsIfChanged ( flags ) ) . toBe ( true ) ;
461
+ expect ( InstabugUtils . setApmNetworkFlagsIfChanged ( flags ) ) . toBe ( false ) ;
462
+ } ) ;
463
+
464
+ it ( 'generateTracePartialId should return a non-zero hex string and number' , ( ) => {
465
+ const { numberPartilId, hexStringPartialId } = InstabugUtils . generateTracePartialId ( ) ;
466
+ expect ( hexStringPartialId ) . toMatch ( / ^ [ 0 - 9 a - f ] { 8 } $ / ) ;
467
+ expect ( hexStringPartialId ) . not . toBe ( '00000000' ) ;
468
+ expect ( typeof numberPartilId ) . toBe ( 'number' ) ;
469
+ expect ( numberPartilId ) . not . toBe ( 0 ) ;
470
+ } ) ;
471
+
472
+ it ( 'generateW3CHeader should return a valid w3c header object' , ( ) => {
473
+ const now = Date . now ( ) ;
474
+ const result = InstabugUtils . generateW3CHeader ( now ) ;
475
+ expect ( result ) . toHaveProperty ( 'timestampInSeconds' ) ;
476
+ expect ( result ) . toHaveProperty ( 'partialId' ) ;
477
+ expect ( result ) . toHaveProperty ( 'w3cHeader' ) ;
478
+ expect ( typeof result . w3cHeader ) . toBe ( 'string' ) ;
479
+ expect ( result . w3cHeader . split ( '-' ) . length ) . toBe ( 4 ) ;
480
+ } ) ;
481
+
482
+ it ( 'isContentTypeNotAllowed should return false for allowed types and true for not allowed' , ( ) => {
483
+ expect ( InstabugUtils . isContentTypeNotAllowed ( 'application/json' ) ) . toBe ( false ) ;
484
+ expect ( InstabugUtils . isContentTypeNotAllowed ( 'text/plain' ) ) . toBe ( false ) ;
485
+ expect ( InstabugUtils . isContentTypeNotAllowed ( 'image/png' ) ) . toBe ( true ) ;
486
+ expect ( InstabugUtils . isContentTypeNotAllowed ( 'application/pdf' ) ) . toBe ( true ) ;
487
+ } ) ;
488
+ } ) ;
489
+
490
+ describe ( 'checkNetworkRequestHandlers' , ( ) => {
491
+ let registerNetworkLogsListenerSpy : jest . SpyInstance ;
492
+
493
+ beforeEach ( ( ) => {
494
+ jest . clearAllMocks ( ) ;
495
+ registerNetworkLogsListenerSpy = jest
496
+ . spyOn ( NetworkLogger , 'registerNetworkLogsListener' )
497
+ . mockImplementation ( jest . fn ( ) ) ;
498
+ } ) ;
499
+
500
+ it ( 'should register for both if obfuscation handler and filter expression exist' , ( ) => {
501
+ jest . spyOn ( NetworkLogger , 'getNetworkDataObfuscationHandler' ) . mockReturnValue ( jest . fn ( ) ) ;
502
+ jest . spyOn ( NetworkLogger , 'hasRequestFilterExpression' ) . mockReturnValue ( true ) ;
503
+ jest . spyOn ( NetworkLogger , 'getRequestFilterExpression' ) . mockReturnValue ( 'true' ) ;
504
+
505
+ InstabugUtils . checkNetworkRequestHandlers ( ) ;
506
+
507
+ expect ( registerNetworkLogsListenerSpy ) . toHaveBeenCalledWith (
508
+ NetworkListenerType . both ,
509
+ expect . any ( Function ) ,
510
+ ) ;
511
+ } ) ;
512
+
513
+ it ( 'should register for obfuscation only if only obfuscation handler exists' , ( ) => {
514
+ jest . spyOn ( NetworkLogger , 'getNetworkDataObfuscationHandler' ) . mockReturnValue ( jest . fn ( ) ) ;
515
+ jest . spyOn ( NetworkLogger , 'hasRequestFilterExpression' ) . mockReturnValue ( false ) ;
516
+
517
+ InstabugUtils . checkNetworkRequestHandlers ( ) ;
518
+
519
+ expect ( registerNetworkLogsListenerSpy ) . toHaveBeenCalledWith (
520
+ NetworkListenerType . obfuscation ,
521
+ expect . any ( Function ) ,
522
+ ) ;
523
+ } ) ;
524
+
525
+ it ( 'should register for filtering only if only filter expression exists' , ( ) => {
526
+ jest . spyOn ( NetworkLogger , 'getNetworkDataObfuscationHandler' ) . mockReturnValue ( undefined ) ;
527
+ jest . spyOn ( NetworkLogger , 'hasRequestFilterExpression' ) . mockReturnValue ( true ) ;
528
+ jest . spyOn ( NetworkLogger , 'getRequestFilterExpression' ) . mockReturnValue ( 'true' ) ;
529
+
530
+ InstabugUtils . checkNetworkRequestHandlers ( ) ;
531
+
532
+ expect ( registerNetworkLogsListenerSpy ) . toHaveBeenCalledWith (
533
+ NetworkListenerType . filtering ,
534
+ expect . any ( Function ) ,
535
+ ) ;
536
+ } ) ;
537
+
538
+ it ( 'should not register any listener if neither exist' , ( ) => {
539
+ jest . spyOn ( NetworkLogger , 'getNetworkDataObfuscationHandler' ) . mockReturnValue ( undefined ) ;
540
+ jest . spyOn ( NetworkLogger , 'hasRequestFilterExpression' ) . mockReturnValue ( false ) ;
541
+
542
+ InstabugUtils . checkNetworkRequestHandlers ( ) ;
543
+
544
+ expect ( registerNetworkLogsListenerSpy ) . not . toHaveBeenCalled ( ) ;
545
+ } ) ;
546
+ } ) ;
0 commit comments