1
1
import React from 'react' ;
2
+ import { Provider } from 'react-redux' ;
3
+ import configureStore from 'redux-mock-store' ;
4
+ import { useDispatch } from 'react-redux' ;
2
5
3
6
import {
4
7
fireEvent ,
@@ -9,7 +12,19 @@ import {
9
12
} from '../../../test-utils' ;
10
13
import { FileNode } from './FileNode' ;
11
14
15
+ jest . mock ( 'react-redux' , ( ) => ( {
16
+ ...jest . requireActual ( 'react-redux' ) ,
17
+ useDispatch : jest . fn ( )
18
+ } ) ) ;
19
+
12
20
describe ( '<FileNode />' , ( ) => {
21
+ const mockDispatch = jest . fn ( ) ;
22
+ const mockStore = configureStore ( [ ] ) ;
23
+
24
+ beforeEach ( ( ) => {
25
+ useDispatch . mockReturnValue ( mockDispatch ) ;
26
+ } ) ;
27
+
13
28
const changeName = ( newFileName ) => {
14
29
const renameButton = screen . getByText ( / R e n a m e / i) ;
15
30
fireEvent . click ( renameButton ) ;
@@ -25,6 +40,19 @@ describe('<FileNode />', () => {
25
40
} ;
26
41
27
42
const renderFileNode = ( fileType , extraProps = { } ) => {
43
+ const initialState = {
44
+ files : [
45
+ {
46
+ id : '0' ,
47
+ name : fileType === 'folder' ? 'afolder' : 'test.jsx' ,
48
+ fileType
49
+ }
50
+ ] ,
51
+ user : { authenticated : false }
52
+ } ;
53
+
54
+ const store = mockStore ( initialState ) ;
55
+
28
56
const props = {
29
57
...extraProps ,
30
58
id : '0' ,
@@ -45,24 +73,28 @@ describe('<FileNode />', () => {
45
73
setProjectName : jest . fn ( )
46
74
} ;
47
75
48
- render ( < FileNode { ...props } /> ) ;
76
+ render (
77
+ < Provider store = { store } >
78
+ < FileNode { ...props } />
79
+ </ Provider >
80
+ ) ;
49
81
50
- return props ;
82
+ return { store , props } ;
51
83
} ;
52
84
53
85
describe ( 'fileType: file' , ( ) => {
54
86
it ( 'cannot change to an empty name' , async ( ) => {
55
- const props = renderFileNode ( 'file' ) ;
87
+ const { props } = renderFileNode ( 'file' ) ;
56
88
57
89
changeName ( '' ) ;
58
90
59
- await waitFor ( ( ) => expect ( props . updateFileName ) . not . toHaveBeenCalled ( ) ) ;
91
+ await waitFor ( ( ) => expect ( mockDispatch ) . not . toHaveBeenCalled ( ) ) ;
60
92
await expectFileNameToBe ( props . name ) ;
61
93
} ) ;
62
94
63
95
it ( 'can change to a valid filename' , async ( ) => {
64
96
const newName = 'newname.jsx' ;
65
- const props = renderFileNode ( 'file' ) ;
97
+ const { props } = renderFileNode ( 'file' ) ;
66
98
67
99
changeName ( newName ) ;
68
100
@@ -74,11 +106,11 @@ describe('<FileNode />', () => {
74
106
75
107
it ( 'must have an extension' , async ( ) => {
76
108
const newName = 'newname' ;
77
- const props = renderFileNode ( 'file' ) ;
109
+ const { props } = renderFileNode ( 'file' ) ;
78
110
79
111
changeName ( newName ) ;
80
112
81
- await waitFor ( ( ) => expect ( props . updateFileName ) . not . toHaveBeenCalled ( ) ) ;
113
+ await waitFor ( ( ) => expect ( mockDispatch ) . not . toHaveBeenCalled ( ) ) ;
82
114
await expectFileNameToBe ( props . name ) ;
83
115
} ) ;
84
116
@@ -87,41 +119,41 @@ describe('<FileNode />', () => {
87
119
window . confirm = mockConfirm ;
88
120
89
121
const newName = 'newname.gif' ;
90
- const props = renderFileNode ( 'file' ) ;
122
+ const { props } = renderFileNode ( 'file' ) ;
91
123
92
124
changeName ( newName ) ;
93
125
94
126
expect ( mockConfirm ) . toHaveBeenCalled ( ) ;
95
127
await waitFor ( ( ) =>
96
128
expect ( props . updateFileName ) . toHaveBeenCalledWith ( props . id , newName )
97
129
) ;
98
- await expectFileNameToBe ( props . name ) ;
130
+ await expectFileNameToBe ( newName ) ;
99
131
} ) ;
100
132
101
133
it ( 'cannot be just an extension' , async ( ) => {
102
134
const newName = '.jsx' ;
103
- const props = renderFileNode ( 'file' ) ;
135
+ const { props } = renderFileNode ( 'file' ) ;
104
136
105
137
changeName ( newName ) ;
106
138
107
- await waitFor ( ( ) => expect ( props . updateFileName ) . not . toHaveBeenCalled ( ) ) ;
139
+ await waitFor ( ( ) => expect ( mockDispatch ) . not . toHaveBeenCalled ( ) ) ;
108
140
await expectFileNameToBe ( props . name ) ;
109
141
} ) ;
110
142
} ) ;
111
143
112
144
describe ( 'fileType: folder' , ( ) => {
113
145
it ( 'cannot change to an empty name' , async ( ) => {
114
- const props = renderFileNode ( 'folder' ) ;
146
+ const { props } = renderFileNode ( 'folder' ) ;
115
147
116
148
changeName ( '' ) ;
117
149
118
- await waitFor ( ( ) => expect ( props . updateFileName ) . not . toHaveBeenCalled ( ) ) ;
150
+ await waitFor ( ( ) => expect ( mockDispatch ) . not . toHaveBeenCalled ( ) ) ;
119
151
await expectFileNameToBe ( props . name ) ;
120
152
} ) ;
121
153
122
154
it ( 'can change to another name' , async ( ) => {
123
155
const newName = 'foldername' ;
124
- const props = renderFileNode ( 'folder' ) ;
156
+ const { props } = renderFileNode ( 'folder' ) ;
125
157
126
158
changeName ( newName ) ;
127
159
@@ -133,11 +165,11 @@ describe('<FileNode />', () => {
133
165
134
166
it ( 'cannot have a file extension' , async ( ) => {
135
167
const newName = 'foldername.jsx' ;
136
- const props = renderFileNode ( 'folder' ) ;
168
+ const { props } = renderFileNode ( 'folder' ) ;
137
169
138
170
changeName ( newName ) ;
139
171
140
- await waitFor ( ( ) => expect ( props . updateFileName ) . not . toHaveBeenCalled ( ) ) ;
172
+ await waitFor ( ( ) => expect ( mockDispatch ) . not . toHaveBeenCalled ( ) ) ;
141
173
await expectFileNameToBe ( props . name ) ;
142
174
} ) ;
143
175
} ) ;
0 commit comments