@@ -7,16 +7,7 @@ import * as Instabug from '../../src/modules/Instabug';
77import * as NetworkLogger from '../../src/modules/NetworkLogger' ;
88import { NativeCrashReporting } from '../../src/native/NativeCrashReporting' ;
99import { 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' ;
2011
2112import {
2213 NativeNetworkLogger ,
@@ -203,9 +194,9 @@ describe('Instabug Utils', () => {
203194 const remoteSenderCallback = NativeCrashReporting . sendHandledJSCrash ;
204195 Platform . OS = 'android' ;
205196 const errorMock = new TypeError ( 'Invalid type' ) ;
206- const jsStackTrace = getStackTrace ( errorMock ) ;
197+ const jsStackTrace = InstabugUtils . getStackTrace ( errorMock ) ;
207198
208- sendCrashReport ( errorMock , ( data ) =>
199+ InstabugUtils . sendCrashReport ( errorMock , ( data ) =>
209200 remoteSenderCallback ( data , null , null , NonFatalErrorLevel . error ) ,
210201 ) ;
211202
@@ -231,9 +222,9 @@ describe('Instabug Utils', () => {
231222 const remoteSenderCallback = NativeCrashReporting . sendHandledJSCrash ;
232223 Platform . OS = 'ios' ;
233224 const errorMock = new TypeError ( 'Invalid type' ) ;
234- const jsStackTrace = getStackTrace ( errorMock ) ;
225+ const jsStackTrace = InstabugUtils . getStackTrace ( errorMock ) ;
235226
236- sendCrashReport ( errorMock , ( data ) =>
227+ InstabugUtils . sendCrashReport ( errorMock , ( data ) =>
237228 remoteSenderCallback ( data , null , null , NonFatalErrorLevel . error ) ,
238229 ) ;
239230 const expectedMap = {
@@ -290,7 +281,7 @@ describe('reportNetworkLog', () => {
290281
291282 const requestHeaders = JSON . stringify ( network . requestHeaders ) ;
292283 const responseHeaders = JSON . stringify ( network . responseHeaders ) ;
293- reportNetworkLog ( network ) ;
284+ InstabugUtils . reportNetworkLog ( network ) ;
294285
295286 expect ( NativeInstabug . networkLogAndroid ) . toHaveBeenCalledTimes ( 1 ) ;
296287 expect ( NativeInstabug . networkLogAndroid ) . toHaveBeenCalledWith (
@@ -335,7 +326,7 @@ describe('reportNetworkLog', () => {
335326 it ( 'reportNetworkLog should send network logs to native with the correct parameters on iOS' , ( ) => {
336327 Platform . OS = 'ios' ;
337328
338- reportNetworkLog ( network ) ;
329+ InstabugUtils . reportNetworkLog ( network ) ;
339330
340331 expect ( NativeInstabug . networkLogIOS ) . toHaveBeenCalledTimes ( 1 ) ;
341332 expect ( NativeInstabug . networkLogIOS ) . toHaveBeenCalledWith (
@@ -397,7 +388,7 @@ describe('test registerNetworkLogsListener usage', () => {
397388 } ;
398389
399390 it ( 'registerObfuscationListener should call NetworkLogger.registerNetworkLogsListener() with NetworkListenerType = NetworkListenerType.obfuscation' , ( ) => {
400- registerObfuscationListener ( ) ;
391+ InstabugUtils . registerObfuscationListener ( ) ;
401392 expect ( NetworkLogger . registerNetworkLogsListener ) . toBeCalledTimes ( 1 ) ;
402393 expect ( NetworkLogger . registerNetworkLogsListener ) . toBeCalledWith (
403394 NetworkListenerType . obfuscation ,
@@ -407,7 +398,7 @@ describe('test registerNetworkLogsListener usage', () => {
407398
408399 it ( 'registerFilteringListener should call NetworkLogger.registerNetworkLogsListener() with NetworkListenerType = NetworkListenerType.filtering' , ( ) => {
409400 const testText = 'true' ;
410- registerFilteringListener ( testText ) ;
401+ InstabugUtils . registerFilteringListener ( testText ) ;
411402
412403 expect ( NetworkLogger . registerNetworkLogsListener ) . toBeCalledTimes ( 1 ) ;
413404 expect ( NetworkLogger . registerNetworkLogsListener ) . toBeCalledWith (
@@ -418,7 +409,7 @@ describe('test registerNetworkLogsListener usage', () => {
418409
419410 it ( 'registerFilteringAndObfuscationListener should call NetworkLogger.registerNetworkLogsListener() with NetworkListenerType = NetworkListenerType.both' , ( ) => {
420411 const testText = 'true' ;
421- registerFilteringAndObfuscationListener ( testText ) ;
412+ InstabugUtils . registerFilteringAndObfuscationListener ( testText ) ;
422413
423414 expect ( NetworkLogger . registerNetworkLogsListener ) . toBeCalledTimes ( 1 ) ;
424415 expect ( NetworkLogger . registerNetworkLogsListener ) . toBeCalledWith (
@@ -429,23 +420,23 @@ describe('test registerNetworkLogsListener usage', () => {
429420
430421 it ( 'should call NetworkLoggerEmitter.removeAllListeners when call resetNativeObfuscationListener' , ( ) => {
431422 jest . spyOn ( NetworkLoggerEmitter , 'removeAllListeners' ) . mockImplementation ( ) ;
432- resetNativeObfuscationListener ( ) ;
423+ InstabugUtils . resetNativeObfuscationListener ( ) ;
433424 expect ( NetworkLoggerEmitter . removeAllListeners ) . toBeCalledTimes ( 1 ) ;
434425 } ) ;
435426
436427 it ( 'should call NativeNetworkLogger.resetNetworkLogsListener when call resetNativeObfuscationListener on android platform' , ( ) => {
437428 Platform . OS = 'android' ;
438429 jest . spyOn ( NativeNetworkLogger , 'resetNetworkLogsListener' ) . mockImplementation ( ) ;
439430 jest . spyOn ( NetworkLoggerEmitter , 'removeAllListeners' ) . mockImplementation ( ) ;
440- resetNativeObfuscationListener ( ) ;
431+ InstabugUtils . resetNativeObfuscationListener ( ) ;
441432 expect ( NativeNetworkLogger . resetNetworkLogsListener ) . toBeCalledTimes ( 1 ) ;
442433 expect ( NetworkLoggerEmitter . removeAllListeners ) . toBeCalledTimes ( 1 ) ;
443434 } ) ;
444435
445436 it ( 'should call NativeNetworkLogger.updateNetworkLogSnapshot when call updateNetworkLogSnapshot with correct parameters' , ( ) => {
446437 jest . spyOn ( NativeNetworkLogger , 'updateNetworkLogSnapshot' ) . mockImplementation ( ) ;
447438
448- updateNetworkLogSnapshot ( network ) ;
439+ InstabugUtils . updateNetworkLogSnapshot ( network ) ;
449440 expect ( NativeNetworkLogger . updateNetworkLogSnapshot ) . toBeCalledTimes ( 1 ) ;
450441 expect ( NativeNetworkLogger . updateNetworkLogSnapshot ) . toHaveBeenCalledWith (
451442 network . url ,
@@ -458,3 +449,98 @@ describe('test registerNetworkLogsListener usage', () => {
458449 ) ;
459450 } ) ;
460451} ) ;
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