@@ -6,15 +6,52 @@ beforeAll(() => {});
6
6
describe ( '<FileNode />' , ( ) => {
7
7
let component ;
8
8
let props = { } ;
9
+ let input ;
10
+ let renameTriggerButton ;
11
+ const changeName = ( newFileName ) => {
12
+ renameTriggerButton . simulate ( 'click' ) ;
13
+ input . simulate ( 'change' , { target : { value : newFileName } } ) ;
14
+ input . simulate ( 'blur' ) ;
15
+ } ;
16
+ const getState = ( ) => component . state ( ) ;
17
+ const getUpdatedName = ( ) => getState ( ) . updatedName ;
9
18
10
- describe ( 'with valid props' , ( ) => {
19
+ describe ( 'with valid props, regardless of filetype' , ( ) => {
20
+ [ '' ] . forEach ( ( fileType ) => {
21
+ beforeEach ( ( ) => {
22
+ props = {
23
+ ...props ,
24
+ id : '0' ,
25
+ name : 'test.jsx' ,
26
+ fileType,
27
+ canEdit : true ,
28
+ children : [ ] ,
29
+ authenticated : false ,
30
+ setSelectedFile : jest . fn ( ) ,
31
+ deleteFile : jest . fn ( ) ,
32
+ updateFileName : jest . fn ( ) ,
33
+ resetSelectedFile : jest . fn ( ) ,
34
+ newFile : jest . fn ( ) ,
35
+ newFolder : jest . fn ( ) ,
36
+ showFolderChildren : jest . fn ( ) ,
37
+ hideFolderChildren : jest . fn ( ) ,
38
+ openUploadFileModal : jest . fn ( )
39
+ } ;
40
+ component = shallow ( < FileNode { ...props } /> ) ;
41
+ } ) ;
42
+ } ) ;
43
+ } ) ;
44
+
45
+ describe ( 'as file with valid props' , ( ) => {
11
46
beforeEach ( ( ) => {
12
47
props = {
13
48
...props ,
14
49
id : '0' ,
15
- children : [ ] ,
16
50
name : 'test.jsx' ,
17
- fileType : 'dunno' ,
51
+ fileType : 'file' ,
52
+ canEdit : true ,
53
+ children : [ ] ,
54
+ authenticated : false ,
18
55
setSelectedFile : jest . fn ( ) ,
19
56
deleteFile : jest . fn ( ) ,
20
57
updateFileName : jest . fn ( ) ,
@@ -23,22 +60,12 @@ describe('<FileNode />', () => {
23
60
newFolder : jest . fn ( ) ,
24
61
showFolderChildren : jest . fn ( ) ,
25
62
hideFolderChildren : jest . fn ( ) ,
26
- canEdit : true ,
27
- authenticated : false ,
28
63
openUploadFileModal : jest . fn ( )
29
64
} ;
30
65
component = shallow ( < FileNode { ...props } /> ) ;
31
66
} ) ;
32
67
33
68
describe ( 'when changing name' , ( ) => {
34
- let input ;
35
- let renameTriggerButton ;
36
- const changeName = ( newFileName ) => {
37
- renameTriggerButton . simulate ( 'click' ) ;
38
- input . simulate ( 'change' , { target : { value : newFileName } } ) ;
39
- input . simulate ( 'blur' ) ;
40
- } ;
41
-
42
69
beforeEach ( ( ) => {
43
70
input = component . find ( '.sidebar__file-item-input' ) ;
44
71
renameTriggerButton = component
@@ -55,17 +82,88 @@ describe('<FileNode />', () => {
55
82
beforeEach ( ( ) => changeName ( newName ) ) ;
56
83
57
84
it ( 'should save the name' , ( ) => {
85
+ console . log ( 'component.state' ) ;
86
+ console . log ( component . state ( ) ) ;
58
87
expect ( props . updateFileName ) . toBeCalledWith ( props . id , newName ) ;
59
88
} ) ;
60
89
} ) ;
61
90
91
+ // Failure Scenarios
92
+
62
93
describe ( 'to an empty filename' , ( ) => {
63
94
const newName = '' ;
64
95
beforeEach ( ( ) => changeName ( newName ) ) ;
65
96
66
- it ( 'should not save the name' , ( ) => {
67
- expect ( props . updateFileName ) . not . toHaveBeenCalled ( ) ;
68
- } ) ;
97
+
98
+ it ( 'should not save' , ( ) => expect ( props . updateFileName ) . not . toHaveBeenCalled ( ) ) ;
99
+ it ( 'should reset name' , ( ) => expect ( getUpdatedName ( ) ) . toEqual ( props . name ) ) ;
100
+ } ) ;
101
+
102
+ describe ( 'to an extensionless filename' , ( ) => {
103
+ const newName = 'extensionless' ;
104
+ beforeEach ( ( ) => changeName ( newName ) ) ;
105
+
106
+ it ( 'should not save' , ( ) => expect ( props . updateFileName ) . not . toHaveBeenCalled ( ) ) ;
107
+ it ( 'should reset name' , ( ) => expect ( getUpdatedName ( ) ) . toEqual ( props . name ) ) ;
108
+ } ) ;
109
+
110
+ describe ( 'to different extension' , ( ) => {
111
+ const newName = 'name.gif' ;
112
+ beforeEach ( ( ) => changeName ( newName ) ) ;
113
+
114
+ it ( 'should not save' , ( ) => expect ( props . updateFileName ) . not . toHaveBeenCalled ( ) ) ;
115
+ it ( 'should reset name' , ( ) => expect ( getUpdatedName ( ) ) . toEqual ( props . name ) ) ;
116
+ } ) ;
117
+
118
+ describe ( 'to just an extension' , ( ) => {
119
+ const newName = '.jsx' ;
120
+ beforeEach ( ( ) => changeName ( newName ) ) ;
121
+
122
+ it ( 'should not save' , ( ) => expect ( props . updateFileName ) . not . toHaveBeenCalled ( ) ) ;
123
+ it ( 'should reset name' , ( ) => expect ( getUpdatedName ( ) ) . toEqual ( props . name ) ) ;
124
+ } ) ;
125
+ } ) ;
126
+ } ) ;
127
+
128
+
129
+ describe ( 'as folder with valid props' , ( ) => {
130
+ beforeEach ( ( ) => {
131
+ props = {
132
+ ...props ,
133
+ id : '0' ,
134
+ children : [ ] ,
135
+ name : 'filename' ,
136
+ fileType : 'folder' ,
137
+ canEdit : true ,
138
+ authenticated : false ,
139
+ setSelectedFile : jest . fn ( ) ,
140
+ deleteFile : jest . fn ( ) ,
141
+ updateFileName : jest . fn ( ) ,
142
+ resetSelectedFile : jest . fn ( ) ,
143
+ newFile : jest . fn ( ) ,
144
+ newFolder : jest . fn ( ) ,
145
+ showFolderChildren : jest . fn ( ) ,
146
+ hideFolderChildren : jest . fn ( ) ,
147
+ openUploadFileModal : jest . fn ( )
148
+ } ;
149
+ component = shallow ( < FileNode { ...props } /> ) ;
150
+ } ) ;
151
+
152
+ describe ( 'when changing name' , ( ) => {
153
+ beforeEach ( ( ) => {
154
+ input = component . find ( '.sidebar__file-item-input' ) ;
155
+ renameTriggerButton = component
156
+ . find ( '.sidebar__file-item-option' )
157
+ . first ( ) ;
158
+ component . setState ( { isEditing : true } ) ;
159
+ } ) ;
160
+
161
+ describe ( 'to a filename' , ( ) => {
162
+ const newName = 'filename.jsx' ;
163
+ beforeEach ( ( ) => changeName ( newName ) ) ;
164
+
165
+ it ( 'should not save' , ( ) => expect ( props . updateFileName ) . not . toHaveBeenCalled ( ) ) ;
166
+ it ( 'should reset name' , ( ) => expect ( getUpdatedName ( ) ) . toEqual ( props . name ) ) ;
69
167
} ) ;
70
168
} ) ;
71
169
} ) ;
0 commit comments