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