13
13
// limitations under the License.
14
14
15
15
import React from 'react' ;
16
- import { shallow } from 'enzyme' ;
17
- import { render } from '@testing-library/react' ;
16
+ import { fireEvent , render , screen } from '@testing-library/react' ;
17
+ import { legacy_createStore as createStore } from 'redux' ;
18
+ import { Provider } from 'react-redux' ;
18
19
19
20
import TraceTimelineViewer , { TraceTimelineViewerImpl } from './index' ;
20
21
import * as KeyboardShortcuts from '../keyboard-shortcuts' ;
21
22
import traceGenerator from '../../../demo/trace-generators' ;
22
23
import transformTraceData from '../../../model/transform-trace-data' ;
23
- import TimelineHeaderRow from './TimelineHeaderRow' ;
24
24
25
25
jest . mock ( './VirtualizedTraceView' , ( ) => ( ) => < div data-testid = "virtualized-trace-view-mock" /> ) ;
26
+ jest . mock ( './TimelineHeaderRow' , ( ) => props => (
27
+ < div data-testid = "timeline-header-row-mock" >
28
+ < button data-testid = "collapse-all-button" type = "button" onClick = { props . onCollapseAll } >
29
+ Collapse All
30
+ </ button >
31
+ < button data-testid = "expand-all-button" type = "button" onClick = { props . onExpandAll } >
32
+ Expand All
33
+ </ button >
34
+ < button data-testid = "collapse-one-button" type = "button" onClick = { props . onCollapseOne } >
35
+ Collapse One
36
+ </ button >
37
+ < button data-testid = "expand-one-button" type = "button" onClick = { props . onExpandOne } >
38
+ Expand One
39
+ </ button >
40
+ </ div >
41
+ ) ) ;
26
42
27
43
describe ( '<TraceTimelineViewer>' , ( ) => {
28
44
const trace = transformTraceData ( traceGenerator . trace ( { } ) ) ;
@@ -40,46 +56,54 @@ describe('<TraceTimelineViewer>', () => {
40
56
expandOne : jest . fn ( ) ,
41
57
collapseOne : jest . fn ( ) ,
42
58
} ;
43
- const options = {
44
- context : {
45
- store : {
46
- getState ( ) {
47
- return { traceTimeline : { spanNameColumnWidth : 0.25 } } ;
48
- } ,
49
- subscribe ( ) { } ,
50
- dispatch ( ) { } ,
51
- } ,
52
- } ,
59
+
60
+ const defaultState = {
61
+ traceTimeline : { spanNameColumnWidth : 0.25 } ,
53
62
} ;
54
63
55
- let wrapper ;
56
- let connectedWrapper ;
64
+ function renderWithRedux ( ui , { initialState = defaultState } = { } ) {
65
+ const store = createStore ( ( state = initialState ) => state ) ;
66
+
67
+ return {
68
+ ...render ( < Provider store = { store } > { ui } </ Provider > ) ,
69
+ store,
70
+ } ;
71
+ }
57
72
58
73
beforeEach ( ( ) => {
59
- wrapper = shallow ( < TraceTimelineViewerImpl { ...props } /> , options ) ;
60
- connectedWrapper = shallow ( < TraceTimelineViewer store = { options . context . store } { ...props } /> , options ) ;
61
- jest . spyOn ( KeyboardShortcuts , 'merge' ) ;
74
+ props . expandAll . mockClear ( ) ;
75
+ props . collapseAll . mockClear ( ) ;
76
+ props . expandOne . mockClear ( ) ;
77
+ props . collapseOne . mockClear ( ) ;
78
+ jest . spyOn ( KeyboardShortcuts , 'merge' ) . mockClear ( ) ;
62
79
} ) ;
63
80
64
81
afterEach ( ( ) => {
65
82
KeyboardShortcuts . merge . mockRestore ( ) ;
66
83
} ) ;
67
84
68
85
it ( 'it does not explode' , ( ) => {
69
- expect ( wrapper ) . toBeDefined ( ) ;
70
- expect ( connectedWrapper ) . toBeDefined ( ) ;
86
+ render ( < TraceTimelineViewerImpl { ... props } /> ) ;
87
+ renderWithRedux ( < TraceTimelineViewer { ... props } /> ) ;
71
88
} ) ;
72
89
73
90
it ( 'it sets up actions' , ( ) => {
74
- const headerRow = wrapper . find ( TimelineHeaderRow ) ;
75
- headerRow . props ( ) . onCollapseAll ( ) ;
76
- headerRow . props ( ) . onExpandAll ( ) ;
77
- headerRow . props ( ) . onExpandOne ( ) ;
78
- headerRow . props ( ) . onCollapseOne ( ) ;
79
- expect ( props . collapseAll . mock . calls . length ) . toBe ( 1 ) ;
80
- expect ( props . expandAll . mock . calls . length ) . toBe ( 1 ) ;
81
- expect ( props . expandOne . mock . calls . length ) . toBe ( 1 ) ;
82
- expect ( props . collapseOne . mock . calls . length ) . toBe ( 1 ) ;
91
+ render ( < TraceTimelineViewerImpl { ...props } /> ) ;
92
+
93
+ fireEvent . click ( screen . getByTestId ( 'collapse-all-button' ) ) ;
94
+ expect ( props . collapseAll ) . toHaveBeenCalledTimes ( 1 ) ;
95
+ expect ( props . collapseAll ) . toHaveBeenCalledWith ( props . trace . spans ) ;
96
+
97
+ fireEvent . click ( screen . getByTestId ( 'expand-all-button' ) ) ;
98
+ expect ( props . expandAll ) . toHaveBeenCalledTimes ( 1 ) ;
99
+ expect ( props . expandAll ) . toHaveBeenCalledWith ( ) ;
100
+
101
+ fireEvent . click ( screen . getByTestId ( 'collapse-one-button' ) ) ;
102
+ expect ( props . collapseOne ) . toHaveBeenCalledTimes ( 1 ) ;
103
+ expect ( props . collapseOne ) . toHaveBeenCalledWith ( props . trace . spans ) ;
104
+ fireEvent . click ( screen . getByTestId ( 'expand-one-button' ) ) ;
105
+ expect ( props . expandOne ) . toHaveBeenCalledTimes ( 1 ) ;
106
+ expect ( props . expandOne ) . toHaveBeenCalledWith ( props . trace . spans ) ;
83
107
} ) ;
84
108
85
109
it ( 'it should call mergeShortcuts with the correct callbacks on mount' , ( ) => {
0 commit comments