1+ /**
2+ * Parses a time string in MM:SS format and converts it to total seconds
3+ * @param timeString - Time string in format "MM:SS" (e.g., "01:30" for 1 minute 30 seconds)
4+ * @returns Total number of seconds
5+ * @example
6+ * ```typescript
7+ * parseTimeString("01:30"); // Returns 90 (1 minute 30 seconds)
8+ * parseTimeString("00:45"); // Returns 45 (45 seconds)
9+ * parseTimeString("10:00"); // Returns 600 (10 minutes)
10+ * ```
11+ */
12+ export function parseTimeString ( timeString : string ) : number {
13+ const parts = timeString . split ( ':' ) ;
14+ const minutes = parseInt ( parts [ 0 ] , 10 ) || 0 ;
15+ const seconds = parseInt ( parts [ 1 ] , 10 ) || 0 ;
16+ return minutes * 60 + seconds ;
17+ }
18+
19+ /**
20+ * Waits for WebSocket disconnection by monitoring console messages for specific disconnection indicators
21+ * @param consoleMessages - Array of console messages to monitor
22+ * @param timeoutMs - Maximum time to wait for disconnection in milliseconds (default: 15000)
23+ * @returns Promise<boolean> - True if disconnection is detected, false if timeout is reached
24+ * @description Monitors for network disconnection messages or WebSocket offline status changes
25+ * @example
26+ * ```typescript
27+ * consoleMessages.length = 0; // Clear existing messages
28+ * await page.context().setOffline(true);
29+ * const isDisconnected = await waitForWebSocketDisconnection(consoleMessages);
30+ * expect(isDisconnected).toBe(true);
31+ * ```
32+ */
33+ export async function waitForWebSocketDisconnection ( consoleMessages : string [ ] , timeoutMs : number = 15000 ) : Promise < boolean > {
34+ const startTime = Date . now ( ) ;
35+ while ( Date . now ( ) - startTime < timeoutMs ) {
36+ const webSocketDisconnectLog = consoleMessages . find (
37+ ( msg ) =>
38+ msg . includes ( 'Failed to load resource: net::ERR_INTERNET_DISCONNECTED' ) ||
39+ msg . includes ( '[WebSocketStatus] event=checkOnlineStatus | online status= false' )
40+ ) ;
41+ if ( webSocketDisconnectLog ) {
42+ return true ;
43+ }
44+ await new Promise ( ( resolve ) => setTimeout ( resolve , 100 ) ) ;
45+ }
46+ return false ;
47+ }
48+
49+ /**
50+ * Waits for WebSocket reconnection by monitoring console messages for online status changes
51+ * @param consoleMessages - Array of console messages to monitor
52+ * @param timeoutMs - Maximum time to wait for reconnection in milliseconds (default: 15000)
53+ * @returns Promise<boolean> - True if reconnection is detected, false if timeout is reached
54+ * @description Monitors for WebSocket online status change messages indicating successful reconnection
55+ * @example
56+ * ```typescript
57+ * consoleMessages.length = 0; // Clear existing messages
58+ * await page.context().setOffline(false);
59+ * const isReconnected = await waitForWebSocketReconnection(consoleMessages);
60+ * expect(isReconnected).toBe(true);
61+ * ```
62+ */
63+ export async function waitForWebSocketReconnection ( consoleMessages : string [ ] , timeoutMs : number = 15000 ) : Promise < boolean > {
64+ const startTime = Date . now ( ) ;
65+ while ( Date . now ( ) - startTime < timeoutMs ) {
66+ const webSocketReconnectLog = consoleMessages . find ( ( msg ) =>
67+ msg . includes ( '[WebSocketStatus] event=checkOnlineStatus | online status= true' )
68+ ) ;
69+ if ( webSocketReconnectLog ) {
70+ return true ;
71+ }
72+ await new Promise ( ( resolve ) => setTimeout ( resolve , 100 ) ) ;
73+ }
74+ return false ;
75+ }
0 commit comments