@@ -69,6 +69,7 @@ describe("Analytics Module", () => {
6969 afterEach ( ( ) => {
7070 vi . clearAllMocks ( ) ;
7171 base44 . cleanup ( ) ;
72+ vi . unstubAllGlobals ( ) ;
7273 sharedState = null ;
7374 } ) ;
7475
@@ -89,6 +90,38 @@ describe("Analytics Module", () => {
8990 } ) ;
9091 } ) ;
9192
93+ test ( "should have no analytics side effects when disabled in client config" , ( ) => {
94+ const storage = {
95+ getItem : vi . fn ( ( ) => null ) ,
96+ setItem : vi . fn ( ) ,
97+ } ;
98+ const addEventListener = vi . fn ( ) ;
99+ vi . stubGlobal ( "localStorage" , storage ) ;
100+ vi . stubGlobal ( "document" , { referrer : "" , visibilityState : "visible" } ) ;
101+ vi . stubGlobal ( "window" , {
102+ addEventListener,
103+ removeEventListener : vi . fn ( ) ,
104+ history : { replaceState : vi . fn ( ) } ,
105+ localStorage : storage ,
106+ location : { origin : "https://example.com" , pathname : "/" , search : "" } ,
107+ } ) ;
108+ const setIntervalSpy = vi . spyOn ( globalThis , "setInterval" ) ;
109+
110+ const disabled = createClient ( {
111+ serverUrl,
112+ appId,
113+ analytics : { enabled : false } ,
114+ } ) ;
115+ disabled . analytics . track ( { eventName : "should-not-track" } ) ;
116+
117+ expect ( sharedState ?. requestsQueue ) . toEqual ( [ ] ) ;
118+ expect ( storage . setItem ) . not . toHaveBeenCalled ( ) ;
119+ expect ( setIntervalSpy ) . not . toHaveBeenCalled ( ) ;
120+ expect ( addEventListener ) . not . toHaveBeenCalled ( ) ;
121+
122+ disabled . cleanup ( ) ;
123+ } ) ;
124+
92125 test ( "should clear the memoized session context on reset" , ( ) => {
93126 expect ( sharedState ?. sessionContext ) . toEqual ( { user_id : "test-user-id" } ) ;
94127
0 commit comments