1
+ import { describe , it , expect , beforeEach , afterEach , vi } from 'vitest' ;
1
2
import { getFailureLogs } from '../../src/tools/getFailureLogs' ;
2
3
import * as automate from '../../src/tools/failurelogs-utils/automate' ;
3
4
import * as appAutomate from '../../src/tools/failurelogs-utils/app-automate' ;
4
5
5
- jest . mock ( '../../src/config' , ( ) => ( {
6
+ vi . mock ( '../../src/config' , ( ) => ( {
6
7
__esModule : true ,
7
8
default : {
8
9
browserstackUsername : 'fake-user' ,
9
10
browserstackAccessKey : 'fake-key' ,
10
11
} ,
11
12
} ) ) ;
12
13
13
- jest . mock ( '../../src/lib/instrumentation' , ( ) => ( {
14
- trackMCP : jest . fn ( )
14
+ vi . mock ( '../../src/lib/instrumentation' , ( ) => ( {
15
+ trackMCP : vi . fn ( )
15
16
} ) ) ;
16
17
17
18
// Mock the utility functions with implementations
18
- jest . mock ( '../../src/tools/failurelogs-utils/automate' , ( ) => ( {
19
- retrieveNetworkFailures : jest . fn ( ) ,
20
- retrieveSessionFailures : jest . fn ( ) ,
21
- retrieveConsoleFailures : jest . fn ( ) ,
22
- filterSessionFailures : jest . fn ( ( text : string ) => {
19
+ vi . mock ( '../../src/tools/failurelogs-utils/automate' , ( ) => ( {
20
+ retrieveNetworkFailures : vi . fn ( ) ,
21
+ retrieveSessionFailures : vi . fn ( ) ,
22
+ retrieveConsoleFailures : vi . fn ( ) ,
23
+ filterSessionFailures : vi . fn ( ( text : string ) => {
23
24
const lines = text . split ( '\n' ) ;
24
25
return lines . filter ( ( line : string ) =>
25
26
line . includes ( 'ERROR' ) ||
26
27
line . includes ( 'EXCEPTION' ) ||
27
28
line . includes ( 'FATAL' )
28
29
) ;
29
30
} ) ,
30
- filterConsoleFailures : jest . fn ( ( text : string ) => {
31
+ filterConsoleFailures : vi . fn ( ( text : string ) => {
31
32
const lines = text . split ( '\n' ) ;
32
33
return lines . filter ( ( line : string ) =>
33
34
line . includes ( 'Failed to load resource' ) ||
@@ -36,31 +37,30 @@ jest.mock('../../src/tools/failurelogs-utils/automate', () => ({
36
37
} ) ,
37
38
} ) ) ;
38
39
39
- jest . mock ( '../../src/tools/failurelogs-utils/app-automate' , ( ) => ( {
40
- retrieveDeviceLogs : jest . fn ( ) ,
41
- retrieveAppiumLogs : jest . fn ( ) ,
42
- retrieveCrashLogs : jest . fn ( ) ,
43
- filterDeviceFailures : jest . fn ( ( ) => [ ] ) ,
44
- filterAppiumFailures : jest . fn ( ( ) => [ ] ) ,
45
- filterCrashFailures : jest . fn ( ( ) => [ ] ) ,
40
+ vi . mock ( '../../src/tools/failurelogs-utils/app-automate' , ( ) => ( {
41
+ retrieveDeviceLogs : vi . fn ( ) ,
42
+ retrieveAppiumLogs : vi . fn ( ) ,
43
+ retrieveCrashLogs : vi . fn ( ) ,
44
+ filterDeviceFailures : vi . fn ( ( ) => [ ] ) ,
45
+ filterAppiumFailures : vi . fn ( ( ) => [ ] ) ,
46
+ filterCrashFailures : vi . fn ( ( ) => [ ] ) ,
46
47
} ) ) ;
47
48
48
49
// Mock fetch
49
- const mockFetch = jest . fn ( ) ;
50
+ const mockFetch = vi . fn ( ) ;
50
51
global . fetch = mockFetch ;
51
52
52
53
describe ( 'BrowserStack Failure Logs' , ( ) => {
53
54
const mockSessionId = 'test-session-id' ;
54
55
const mockBuildId = 'test-build-id' ;
55
- const auth = Buffer . from ( 'fake-user:fake-key' ) . toString ( 'base64' ) ;
56
56
57
57
beforeEach ( ( ) => {
58
- jest . clearAllMocks ( ) ;
58
+ vi . clearAllMocks ( ) ;
59
59
mockFetch . mockClear ( ) ;
60
60
} ) ;
61
61
62
62
afterEach ( ( ) => {
63
- jest . resetAllMocks ( ) ;
63
+ vi . resetAllMocks ( ) ;
64
64
} ) ;
65
65
66
66
describe ( 'getFailureLogs - Input Validation' , ( ) => {
@@ -124,12 +124,12 @@ describe('BrowserStack Failure Logs', () => {
124
124
125
125
beforeEach ( ( ) => {
126
126
// Reset all mocks
127
- jest . clearAllMocks ( ) ;
127
+ vi . clearAllMocks ( ) ;
128
128
129
129
// Setup mock implementations with resolved values
130
- jest . mocked ( automate . retrieveNetworkFailures ) . mockResolvedValue ( mockNetworkFailures ) ;
131
- jest . mocked ( automate . retrieveSessionFailures ) . mockResolvedValue ( [ '[ERROR] Test failed' ] ) ;
132
- jest . mocked ( automate . retrieveConsoleFailures ) . mockResolvedValue ( [ 'Uncaught TypeError' ] ) ;
130
+ vi . mocked ( automate . retrieveNetworkFailures ) . mockResolvedValue ( mockNetworkFailures ) ;
131
+ vi . mocked ( automate . retrieveSessionFailures ) . mockResolvedValue ( [ '[ERROR] Test failed' ] ) ;
132
+ vi . mocked ( automate . retrieveConsoleFailures ) . mockResolvedValue ( [ 'Uncaught TypeError' ] ) ;
133
133
} ) ;
134
134
135
135
it ( 'should fetch network logs successfully' , async ( ) => {
@@ -141,7 +141,7 @@ describe('BrowserStack Failure Logs', () => {
141
141
response : { status : 404 , statusText : 'Not Found' }
142
142
}
143
143
] ;
144
- jest . mocked ( automate . retrieveNetworkFailures ) . mockResolvedValue ( mockFailures ) ;
144
+ vi . mocked ( automate . retrieveNetworkFailures ) . mockResolvedValue ( mockFailures ) ;
145
145
146
146
const result = await getFailureLogs ( {
147
147
sessionId : mockSessionId ,
@@ -185,9 +185,9 @@ describe('BrowserStack Failure Logs', () => {
185
185
const mockCrashLogs = [ 'Application crashed due to signal 11' ] ;
186
186
187
187
beforeEach ( ( ) => {
188
- jest . mocked ( appAutomate . retrieveDeviceLogs ) . mockResolvedValue ( mockDeviceLogs ) ;
189
- jest . mocked ( appAutomate . retrieveAppiumLogs ) . mockResolvedValue ( mockAppiumLogs ) ;
190
- jest . mocked ( appAutomate . retrieveCrashLogs ) . mockResolvedValue ( mockCrashLogs ) ;
188
+ vi . mocked ( appAutomate . retrieveDeviceLogs ) . mockResolvedValue ( mockDeviceLogs ) ;
189
+ vi . mocked ( appAutomate . retrieveAppiumLogs ) . mockResolvedValue ( mockAppiumLogs ) ;
190
+ vi . mocked ( appAutomate . retrieveCrashLogs ) . mockResolvedValue ( mockCrashLogs ) ;
191
191
} ) ;
192
192
193
193
it ( 'should fetch device logs successfully' , async ( ) => {
@@ -232,7 +232,7 @@ describe('BrowserStack Failure Logs', () => {
232
232
233
233
describe ( 'Error Handling' , ( ) => {
234
234
it ( 'should handle empty log responses' , async ( ) => {
235
- jest . mocked ( automate . retrieveNetworkFailures ) . mockResolvedValue ( [ ] ) ;
235
+ vi . mocked ( automate . retrieveNetworkFailures ) . mockResolvedValue ( [ ] ) ;
236
236
237
237
const result = await getFailureLogs ( {
238
238
sessionId : mockSessionId ,
@@ -247,7 +247,7 @@ describe('BrowserStack Failure Logs', () => {
247
247
describe ( 'Log Filtering' , ( ) => {
248
248
beforeEach ( ( ) => {
249
249
// Reset mock implementations before each test
250
- jest . mocked ( automate . filterSessionFailures ) . mockImplementation ( ( text : string ) => {
250
+ vi . mocked ( automate . filterSessionFailures ) . mockImplementation ( ( text : string ) => {
251
251
const lines = text . split ( '\n' ) ;
252
252
return lines . filter ( ( line : string ) =>
253
253
line . includes ( 'ERROR' ) ||
@@ -256,17 +256,17 @@ describe('BrowserStack Failure Logs', () => {
256
256
) ;
257
257
} ) ;
258
258
259
- jest . mocked ( automate . filterConsoleFailures ) . mockImplementation ( ( text : string ) => {
259
+ vi . mocked ( automate . filterConsoleFailures ) . mockImplementation ( ( text : string ) => {
260
260
const lines = text . split ( '\n' ) ;
261
261
return lines . filter ( ( line : string ) =>
262
262
line . includes ( 'Failed to load resource' ) ||
263
263
line . includes ( 'Uncaught TypeError' )
264
264
) ;
265
265
} ) ;
266
266
267
- jest . mocked ( appAutomate . filterDeviceFailures ) . mockReturnValue ( [ ] ) ;
268
- jest . mocked ( appAutomate . filterAppiumFailures ) . mockReturnValue ( [ ] ) ;
269
- jest . mocked ( appAutomate . filterCrashFailures ) . mockReturnValue ( [ ] ) ;
267
+ vi . mocked ( appAutomate . filterDeviceFailures ) . mockReturnValue ( [ ] ) ;
268
+ vi . mocked ( appAutomate . filterAppiumFailures ) . mockReturnValue ( [ ] ) ;
269
+ vi . mocked ( appAutomate . filterCrashFailures ) . mockReturnValue ( [ ] ) ;
270
270
} ) ;
271
271
272
272
it ( 'should filter session logs correctly' , ( ) => {
@@ -279,7 +279,7 @@ describe('BrowserStack Failure Logs', () => {
279
279
[INFO] Test completed
280
280
` ;
281
281
282
- const result = jest . mocked ( automate . filterSessionFailures ) ( logText ) ;
282
+ const result = vi . mocked ( automate . filterSessionFailures ) ( logText ) ;
283
283
expect ( result ) . toEqual ( [
284
284
'[ERROR] Test failed' ,
285
285
'[EXCEPTION] NullPointerException' ,
@@ -295,7 +295,7 @@ console.info('Test progress')
295
295
console.error('Uncaught TypeError')
296
296
` ;
297
297
298
- const result = jest . mocked ( automate . filterConsoleFailures ) ( logText ) ;
298
+ const result = vi . mocked ( automate . filterConsoleFailures ) ( logText ) ;
299
299
expect ( result ) . toEqual ( [
300
300
"console.error('Failed to load resource')" ,
301
301
"console.error('Uncaught TypeError')"
@@ -304,11 +304,11 @@ console.error('Uncaught TypeError')
304
304
305
305
it ( 'should handle empty inputs in filters' , ( ) => {
306
306
const emptyResult : string [ ] = [ ] ;
307
- jest . mocked ( automate . filterSessionFailures ) . mockReturnValue ( emptyResult ) ;
308
- jest . mocked ( automate . filterConsoleFailures ) . mockReturnValue ( emptyResult ) ;
309
- jest . mocked ( appAutomate . filterDeviceFailures ) . mockReturnValue ( emptyResult ) ;
310
- jest . mocked ( appAutomate . filterAppiumFailures ) . mockReturnValue ( emptyResult ) ;
311
- jest . mocked ( appAutomate . filterCrashFailures ) . mockReturnValue ( emptyResult ) ;
307
+ vi . mocked ( automate . filterSessionFailures ) . mockReturnValue ( emptyResult ) ;
308
+ vi . mocked ( automate . filterConsoleFailures ) . mockReturnValue ( emptyResult ) ;
309
+ vi . mocked ( appAutomate . filterDeviceFailures ) . mockReturnValue ( emptyResult ) ;
310
+ vi . mocked ( appAutomate . filterAppiumFailures ) . mockReturnValue ( emptyResult ) ;
311
+ vi . mocked ( appAutomate . filterCrashFailures ) . mockReturnValue ( emptyResult ) ;
312
312
313
313
expect ( automate . filterSessionFailures ( '' ) ) . toEqual ( [ ] ) ;
314
314
expect ( automate . filterConsoleFailures ( '' ) ) . toEqual ( [ ] ) ;
0 commit comments