1818import { expect } from 'chai' ;
1919import { LoggerProvider } from '@opentelemetry/sdk-logs' ;
2020import { Logger , LogRecord } from '@opentelemetry/api-logs' ;
21- import { startNewSession } from './helpers' ;
21+ import { isNode } from '@firebase/util' ;
22+ import { registerListeners , startNewSession } from './helpers' ;
2223import {
2324 LOG_ENTRY_ATTRIBUTE_KEYS ,
2425 TELEMETRY_SESSION_ID_KEY
@@ -34,6 +35,7 @@ describe('helpers', () => {
3435 let originalCrypto : Crypto | undefined ;
3536 let storage : Record < string , string > = { } ;
3637 let emittedLogs : LogRecord [ ] = [ ] ;
38+ let flushed = false ;
3739
3840 const fakeLoggerProvider = {
3941 getLogger : ( ) : Logger => {
@@ -43,7 +45,10 @@ describe('helpers', () => {
4345 }
4446 } ;
4547 } ,
46- forceFlush : ( ) => Promise . resolve ( ) ,
48+ forceFlush : ( ) => {
49+ flushed = true ;
50+ return Promise . resolve ( ) ;
51+ } ,
4752 shutdown : ( ) => Promise . resolve ( )
4853 } as unknown as LoggerProvider ;
4954
@@ -61,6 +66,7 @@ describe('helpers', () => {
6166
6267 beforeEach ( ( ) => {
6368 emittedLogs = [ ] ;
69+ flushed = false ;
6470 storage = { } ;
6571 // @ts -ignore
6672 originalSessionStorage = global . sessionStorage ;
@@ -96,6 +102,12 @@ describe('helpers', () => {
96102 value : originalCrypto ,
97103 writable : true
98104 } ) ;
105+ if ( ! isNode ( ) ) {
106+ Object . defineProperty ( document , 'visibilityState' , {
107+ value : 'visible' ,
108+ writable : true
109+ } ) ;
110+ }
99111 delete AUTO_CONSTANTS . appVersion ;
100112 } ) ;
101113
@@ -136,4 +148,36 @@ describe('helpers', () => {
136148 } ) ;
137149 } ) ;
138150 } ) ;
151+
152+ describe ( 'registerListeners' , ( ) => {
153+ if ( isNode ( ) ) {
154+ it ( 'should do nothing in node' , ( ) => {
155+ registerListeners ( fakeTelemetry ) ;
156+ } ) ;
157+ } else {
158+ it ( 'should flush logs when the visibility changes to hidden' , ( ) => {
159+ registerListeners ( fakeTelemetry ) ;
160+
161+ expect ( flushed ) . to . be . false ;
162+
163+ Object . defineProperty ( document , 'visibilityState' , {
164+ value : 'hidden' ,
165+ writable : true
166+ } ) ;
167+ window . dispatchEvent ( new Event ( 'visibilitychange' ) ) ;
168+
169+ expect ( flushed ) . to . be . true ;
170+ } ) ;
171+
172+ it ( 'should flush logs when the pagehide event fires' , ( ) => {
173+ registerListeners ( fakeTelemetry ) ;
174+
175+ expect ( flushed ) . to . be . false ;
176+
177+ window . dispatchEvent ( new Event ( 'pagehide' ) ) ;
178+
179+ expect ( flushed ) . to . be . true ;
180+ } ) ;
181+ }
182+ } ) ;
139183} ) ;
0 commit comments