1
1
import { cloneDeep } from 'lodash'
2
2
import React from 'react'
3
+ import { saveAs } from 'file-saver'
3
4
import { monitorSelector , resetProfiler , stopMonitor } from 'uiSrc/slices/cli/monitor'
4
- import { cleanup , fireEvent , mockedStore , render , screen } from 'uiSrc/utils/test-utils'
5
+ import { act , cleanup , fireEvent , mockedStore , render , screen } from 'uiSrc/utils/test-utils'
5
6
import MonitorLog from './MonitorLog'
6
7
7
8
let store : typeof mockedStore
8
9
let URLMock : jest . SpyInstance < object >
9
10
const mockURLrevokeObjectURL = 123123
10
11
12
+ jest . mock ( 'file-saver' , ( ) => ( {
13
+ ...jest . requireActual ( 'file-saver' ) ,
14
+ saveAs : jest . fn ( ) ,
15
+ } ) )
16
+
11
17
jest . mock ( 'uiSrc/slices/cli/monitor' , ( ) => ( {
12
18
...jest . requireActual ( 'uiSrc/slices/cli/monitor' ) ,
13
19
monitorSelector : jest . fn ( ) . mockReturnValue ( {
@@ -22,6 +28,7 @@ jest.mock('uiSrc/slices/cli/monitor', () => ({
22
28
} ) ,
23
29
} ) )
24
30
31
+ global . Blob = function ( content , options ) { return ( { content, options } ) }
25
32
global . fetch = jest . fn ( ( ) =>
26
33
Promise . resolve ( {
27
34
text : ( ) => Promise . resolve ( '123' ) ,
@@ -54,7 +61,8 @@ describe('MonitorLog', () => {
54
61
expect ( store . getActions ( ) ) . toEqual ( expectedActions )
55
62
} )
56
63
57
- it . skip ( 'should call download a file' , ( ) => {
64
+ it ( 'should call download a file' , async ( ) => {
65
+ const saveAsMock = jest . fn ( )
58
66
const monitorSelectorMock = jest . fn ( ) . mockReturnValue ( {
59
67
isSaveToFile : true ,
60
68
logFileId : 'logFileId' ,
@@ -65,11 +73,20 @@ describe('MonitorLog', () => {
65
73
duration : 123 ,
66
74
}
67
75
} ) ;
68
- ( monitorSelector as jest . Mock ) . mockImplementation ( monitorSelectorMock )
76
+
77
+ ( monitorSelector as jest . Mock ) . mockImplementation ( monitorSelectorMock ) ;
78
+ ( saveAs as jest . Mock ) . mockImplementation ( ( ) => saveAsMock )
69
79
70
80
render ( < MonitorLog /> )
71
- fireEvent . click ( screen . getByTestId ( 'download-log-btn' ) )
72
81
73
- expect ( URLMock ) . toBeCalled ( )
82
+ await act ( ( ) => {
83
+ fireEvent . click ( screen . getByTestId ( 'download-log-btn' ) )
84
+ } )
85
+
86
+ expect ( saveAs ) . toBeCalledWith (
87
+ { content : [ '123' ] , options : { type : 'text/plain;charset=utf-8' } } ,
88
+ 'filename.txt' ,
89
+ )
90
+ saveAs . mockRestore ( )
74
91
} )
75
92
} )
0 commit comments