11import { IRateLimiter , RateLimiter , ReportingLogger } from '../../src/logging/reportingLogger' ;
2- import { LogRequestSeverity } from '../../src/logging/logRequest ' ;
2+ import { WSDKErrorSeverity } from '../../src/logging/wsdk-error ' ;
33import { ErrorCodes } from '../../src/logging/errorCodes' ;
44
55describe ( 'ReportingLogger' , ( ) => {
@@ -8,6 +8,7 @@ describe('ReportingLogger', () => {
88 const sdkVersion = '1.2.3' ;
99 let mockFetch : jest . Mock ;
1010 const accountId = '1234567890' ;
11+ const roktLauncherInstanceGuid = '1234567890' ;
1112 beforeEach ( ( ) => {
1213 mockFetch = jest . fn ( ) . mockResolvedValue ( { ok : true } ) ;
1314 global . fetch = mockFetch ;
@@ -24,7 +25,7 @@ describe('ReportingLogger', () => {
2425 ROKT_DOMAIN : 'set' ,
2526 fetch : mockFetch
2627 } ) ;
27- logger = new ReportingLogger ( baseUrl , sdkVersion , accountId ) ;
28+ logger = new ReportingLogger ( baseUrl , sdkVersion , accountId , roktLauncherInstanceGuid ) ;
2829 } ) ;
2930
3031 afterEach ( ( ) => {
@@ -40,44 +41,55 @@ describe('ReportingLogger', () => {
4041 expect ( fetchCall [ 0 ] ) . toContain ( '/v1/log' ) ;
4142 const body = JSON . parse ( fetchCall [ 1 ] . body ) ;
4243 expect ( body ) . toMatchObject ( {
43- severity : LogRequestSeverity . Error ,
44+ severity : WSDKErrorSeverity . ERROR ,
4445 code : ErrorCodes . UNHANDLED_EXCEPTION ,
45- stackTrace : 'stack'
46+ } ) ;
47+ expect ( fetchCall [ 1 ] . headers ) . toMatchObject ( {
48+ 'Accept' : 'text/plain;charset=UTF-8' ,
49+ 'Content-Type' : 'text/plain;charset=UTF-8' ,
50+ 'rokt-launcher-instance-guid' : roktLauncherInstanceGuid ,
51+ 'rokt-account-id' : accountId ,
4652 } ) ;
4753 } ) ;
4854
4955 it ( 'sends warning logs with correct params' , ( ) => {
50- logger . warning ( 'warn' ) ;
56+ logger . warning ( 'warn' , ErrorCodes . UNHANDLED_EXCEPTION ) ;
5157 expect ( mockFetch ) . toHaveBeenCalled ( ) ;
5258 const fetchCall = mockFetch . mock . calls [ 0 ] ;
5359 expect ( fetchCall [ 0 ] ) . toContain ( '/v1/log' ) ;
5460 const body = JSON . parse ( fetchCall [ 1 ] . body ) ;
5561 expect ( body ) . toMatchObject ( {
56- severity : LogRequestSeverity . Warning
62+ severity : WSDKErrorSeverity . WARNING ,
63+ code : ErrorCodes . UNHANDLED_EXCEPTION ,
64+ } ) ;
65+ expect ( fetchCall [ 1 ] . headers ) . toMatchObject ( {
66+ 'Accept' : 'text/plain;charset=UTF-8' ,
67+ 'Content-Type' : 'text/plain;charset=UTF-8' ,
68+ 'rokt-launcher-instance-guid' : roktLauncherInstanceGuid ,
69+ 'rokt-account-id' : accountId ,
5770 } ) ;
58- expect ( fetchCall [ 1 ] . headers [ 'rokt-account-id' ] ) . toBe ( accountId ) ;
5971 } ) ;
6072
6173 it ( 'does not log if ROKT_DOMAIN missing' , ( ) => {
6274 delete ( globalThis as any ) . ROKT_DOMAIN ;
63- logger = new ReportingLogger ( baseUrl , sdkVersion , accountId ) ;
64- logger . error ( 'x' ) ;
75+ logger = new ReportingLogger ( baseUrl , sdkVersion , accountId , roktLauncherInstanceGuid ) ;
76+ logger . error ( 'x' , ErrorCodes . UNHANDLED_EXCEPTION ) ;
6577 expect ( mockFetch ) . not . toHaveBeenCalled ( ) ;
6678 } ) ;
6779
6880 it ( 'does not log if feature flag and debug mode off' , ( ) => {
6981 window . mParticle . config . isWebSdkLoggingEnabled = false ;
7082 window . location . search = '' ;
71- logger = new ReportingLogger ( baseUrl , sdkVersion , accountId ) ;
72- logger . error ( 'x' ) ;
83+ logger = new ReportingLogger ( baseUrl , sdkVersion , accountId , roktLauncherInstanceGuid ) ;
84+ logger . error ( 'x' , ErrorCodes . UNHANDLED_EXCEPTION ) ;
7385 expect ( mockFetch ) . not . toHaveBeenCalled ( ) ;
7486 } ) ;
7587
7688 it ( 'logs if debug mode on even if feature flag off' , ( ) => {
7789 window . mParticle . config . isWebSdkLoggingEnabled = false ;
7890 window . location . search = '?mp_enable_logging=true' ;
79- logger = new ReportingLogger ( baseUrl , sdkVersion , accountId ) ;
80- logger . error ( 'x' ) ;
91+ logger = new ReportingLogger ( baseUrl , sdkVersion , accountId , roktLauncherInstanceGuid ) ;
92+ logger . error ( 'x' , ErrorCodes . UNHANDLED_EXCEPTION ) ;
8193 expect ( mockFetch ) . toHaveBeenCalled ( ) ;
8294 } ) ;
8395
@@ -88,29 +100,18 @@ describe('ReportingLogger', () => {
88100 return ++ count > 3 ;
89101 } ) ,
90102 } ;
91- logger = new ReportingLogger ( baseUrl , sdkVersion , accountId , mockRateLimiter ) ;
103+ logger = new ReportingLogger ( baseUrl , sdkVersion , accountId , roktLauncherInstanceGuid , mockRateLimiter ) ;
92104
93- for ( let i = 0 ; i < 5 ; i ++ ) logger . error ( 'err' ) ;
105+ for ( let i = 0 ; i < 5 ; i ++ ) logger . error ( 'err' , ErrorCodes . UNHANDLED_EXCEPTION ) ;
94106 expect ( mockFetch ) . toHaveBeenCalledTimes ( 3 ) ;
95107 } ) ;
96108
97- it ( 'uses default account id when accountId is empty' , ( ) => {
98- logger = new ReportingLogger ( baseUrl , sdkVersion , undefined ) ;
99- logger . error ( 'msg' ) ;
109+ it ( 'does not send account id when accountId is empty' , ( ) => {
110+ logger = new ReportingLogger ( baseUrl , sdkVersion , '' , roktLauncherInstanceGuid ) ;
111+ logger . error ( 'msg' , ErrorCodes . UNHANDLED_EXCEPTION ) ;
100112 expect ( mockFetch ) . toHaveBeenCalled ( ) ;
101113 const fetchCall = mockFetch . mock . calls [ 0 ] ;
102- expect ( fetchCall [ 1 ] . headers [ 'rokt-account-id' ] ) . toBe ( '0' ) ;
103- } ) ;
104-
105- it ( 'uses default user agent when user agent is empty' , ( ) => {
106- logger = new ReportingLogger ( baseUrl , sdkVersion , accountId ) ;
107- delete ( globalThis as any ) . navigator ;
108- delete ( globalThis as any ) . location ;
109- logger . error ( 'msg' ) ;
110- expect ( mockFetch ) . toHaveBeenCalled ( ) ;
111- const fetchCall = mockFetch . mock . calls [ 0 ] ;
112- const body = JSON . parse ( fetchCall [ 1 ] . body ) ;
113- expect ( body ) . toMatchObject ( { deviceInfo : 'no-user-agent-set' , url : 'no-url-set' } ) ;
114+ expect ( fetchCall [ 1 ] . headers [ 'rokt-account-id' ] ) . toBeUndefined ( ) ;
114115 } ) ;
115116} ) ;
116117
@@ -122,33 +123,33 @@ describe('RateLimiter', () => {
122123
123124 it ( 'allows up to 10 error logs then rate limits' , ( ) => {
124125 for ( let i = 0 ; i < 10 ; i ++ ) {
125- expect ( rateLimiter . incrementAndCheck ( LogRequestSeverity . Error ) ) . toBe ( false ) ;
126+ expect ( rateLimiter . incrementAndCheck ( WSDKErrorSeverity . ERROR ) ) . toBe ( false ) ;
126127 }
127- expect ( rateLimiter . incrementAndCheck ( LogRequestSeverity . Error ) ) . toBe ( true ) ;
128- expect ( rateLimiter . incrementAndCheck ( LogRequestSeverity . Error ) ) . toBe ( true ) ;
128+ expect ( rateLimiter . incrementAndCheck ( WSDKErrorSeverity . ERROR ) ) . toBe ( true ) ;
129+ expect ( rateLimiter . incrementAndCheck ( WSDKErrorSeverity . ERROR ) ) . toBe ( true ) ;
129130 } ) ;
130131
131132 it ( 'allows up to 10 warning logs then rate limits' , ( ) => {
132133 for ( let i = 0 ; i < 10 ; i ++ ) {
133- expect ( rateLimiter . incrementAndCheck ( LogRequestSeverity . Warning ) ) . toBe ( false ) ;
134+ expect ( rateLimiter . incrementAndCheck ( WSDKErrorSeverity . WARNING ) ) . toBe ( false ) ;
134135 }
135- expect ( rateLimiter . incrementAndCheck ( LogRequestSeverity . Warning ) ) . toBe ( true ) ;
136- expect ( rateLimiter . incrementAndCheck ( LogRequestSeverity . Warning ) ) . toBe ( true ) ;
136+ expect ( rateLimiter . incrementAndCheck ( WSDKErrorSeverity . WARNING ) ) . toBe ( true ) ;
137+ expect ( rateLimiter . incrementAndCheck ( WSDKErrorSeverity . WARNING ) ) . toBe ( true ) ;
137138 } ) ;
138139
139140 it ( 'allows up to 10 info logs then rate limits' , ( ) => {
140141 for ( let i = 0 ; i < 10 ; i ++ ) {
141- expect ( rateLimiter . incrementAndCheck ( LogRequestSeverity . Info ) ) . toBe ( false ) ;
142+ expect ( rateLimiter . incrementAndCheck ( WSDKErrorSeverity . INFO ) ) . toBe ( false ) ;
142143 }
143- expect ( rateLimiter . incrementAndCheck ( LogRequestSeverity . Info ) ) . toBe ( true ) ;
144- expect ( rateLimiter . incrementAndCheck ( LogRequestSeverity . Info ) ) . toBe ( true ) ;
144+ expect ( rateLimiter . incrementAndCheck ( WSDKErrorSeverity . INFO ) ) . toBe ( true ) ;
145+ expect ( rateLimiter . incrementAndCheck ( WSDKErrorSeverity . INFO ) ) . toBe ( true ) ;
145146 } ) ;
146147
147148 it ( 'tracks rate limits independently per severity' , ( ) => {
148149 for ( let i = 0 ; i < 10 ; i ++ ) {
149- rateLimiter . incrementAndCheck ( LogRequestSeverity . Error ) ;
150+ rateLimiter . incrementAndCheck ( WSDKErrorSeverity . ERROR ) ;
150151 }
151- expect ( rateLimiter . incrementAndCheck ( LogRequestSeverity . Error ) ) . toBe ( true ) ;
152- expect ( rateLimiter . incrementAndCheck ( LogRequestSeverity . Warning ) ) . toBe ( false ) ;
152+ expect ( rateLimiter . incrementAndCheck ( WSDKErrorSeverity . ERROR ) ) . toBe ( true ) ;
153+ expect ( rateLimiter . incrementAndCheck ( WSDKErrorSeverity . WARNING ) ) . toBe ( false ) ;
153154 } ) ;
154155} ) ;
0 commit comments