@@ -2,6 +2,7 @@ import React from 'react';
22import { Provider } from 'react-redux' ;
33import configureStore from 'redux-mock-store' ;
44import { useDispatch } from 'react-redux' ;
5+ import * as FileActions from '../actions/files' ;
56
67import {
78 fireEvent ,
@@ -10,19 +11,25 @@ import {
1011 waitFor ,
1112 within
1213} from '../../../test-utils' ;
13- import { FileNode } from './FileNode' ;
14+ import FileNode from './FileNode' ;
1415
1516jest . mock ( 'react-redux' , ( ) => ( {
1617 ...jest . requireActual ( 'react-redux' ) ,
1718 useDispatch : jest . fn ( )
1819} ) ) ;
1920
21+ jest . mock ( '../actions/files' , ( ) => ( {
22+ updateFileName : jest . fn ( )
23+ } ) ) ;
24+
25+ const mockStore = configureStore ( [ ] ) ;
26+
2027describe ( '<FileNode />' , ( ) => {
2128 const mockDispatch = jest . fn ( ) ;
22- const mockStore = configureStore ( [ ] ) ;
2329
2430 beforeEach ( ( ) => {
2531 useDispatch . mockReturnValue ( mockDispatch ) ;
32+ jest . clearAllMocks ( ) ;
2633 } ) ;
2734
2835 const changeName = ( newFileName ) => {
@@ -39,138 +46,123 @@ describe('<FileNode />', () => {
3946 await waitFor ( ( ) => within ( name ) . queryByText ( expectedName ) ) ;
4047 } ;
4148
42- const renderFileNode = ( fileType , extraProps = { } ) => {
49+ const renderFileNode = ( fileType , extraState = { } ) => {
4350 const initialState = {
4451 files : [
4552 {
4653 id : '0' ,
4754 name : fileType === 'folder' ? 'afolder' : 'test.jsx' ,
48- fileType
55+ fileType,
56+ parentId : 'root' ,
57+ children : [ ] ,
58+ isSelectedFile : false ,
59+ isFolderClosed : false
4960 }
5061 ] ,
51- user : { authenticated : false }
62+ user : { authenticated : false } ,
63+ ...extraState
5264 } ;
5365
5466 const store = mockStore ( initialState ) ;
5567
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-
7668 render (
7769 < Provider store = { store } >
78- < FileNode { ... props } />
70+ < FileNode id = "0" canEdit />
7971 </ Provider >
8072 ) ;
8173
82- return { store, props } ;
74+ return { store } ;
8375 } ;
8476
8577 describe ( 'fileType: file' , ( ) => {
8678 it ( 'cannot change to an empty name' , async ( ) => {
87- const { props } = renderFileNode ( 'file' ) ;
79+ renderFileNode ( 'file' ) ;
8880
8981 changeName ( '' ) ;
9082
9183 await waitFor ( ( ) => expect ( mockDispatch ) . not . toHaveBeenCalled ( ) ) ;
92- await expectFileNameToBe ( props . name ) ;
84+ await expectFileNameToBe ( 'test.jsx' ) ;
9385 } ) ;
9486
9587 it ( 'can change to a valid filename' , async ( ) => {
9688 const newName = 'newname.jsx' ;
97- const { props } = renderFileNode ( 'file' ) ;
89+ renderFileNode ( 'file' ) ;
9890
9991 changeName ( newName ) ;
10092
10193 await waitFor ( ( ) =>
102- expect ( props . updateFileName ) . toHaveBeenCalledWith ( props . id , newName )
94+ expect ( FileActions . updateFileName ) . toHaveBeenCalledWith ( '0' , newName )
10395 ) ;
10496 await expectFileNameToBe ( newName ) ;
10597 } ) ;
10698
10799 it ( 'must have an extension' , async ( ) => {
108100 const newName = 'newname' ;
109- const { props } = renderFileNode ( 'file' ) ;
101+ renderFileNode ( 'file' ) ;
110102
111103 changeName ( newName ) ;
112104
113105 await waitFor ( ( ) => expect ( mockDispatch ) . not . toHaveBeenCalled ( ) ) ;
114- await expectFileNameToBe ( props . name ) ;
106+ await expectFileNameToBe ( 'test.jsx' ) ;
115107 } ) ;
116108
117109 it ( 'can change to a different extension' , async ( ) => {
118110 const mockConfirm = jest . fn ( ( ) => true ) ;
119111 window . confirm = mockConfirm ;
120112
121113 const newName = 'newname.gif' ;
122- const { props } = renderFileNode ( 'file' ) ;
114+ renderFileNode ( 'file' ) ;
123115
124116 changeName ( newName ) ;
125117
126118 expect ( mockConfirm ) . toHaveBeenCalled ( ) ;
127119 await waitFor ( ( ) =>
128- expect ( props . updateFileName ) . toHaveBeenCalledWith ( props . id , newName )
120+ expect ( FileActions . updateFileName ) . toHaveBeenCalledWith ( '0' , newName )
129121 ) ;
130122 await expectFileNameToBe ( newName ) ;
131123 } ) ;
132124
133125 it ( 'cannot be just an extension' , async ( ) => {
134126 const newName = '.jsx' ;
135- const { props } = renderFileNode ( 'file' ) ;
127+ renderFileNode ( 'file' ) ;
136128
137129 changeName ( newName ) ;
138130
139131 await waitFor ( ( ) => expect ( mockDispatch ) . not . toHaveBeenCalled ( ) ) ;
140- await expectFileNameToBe ( props . name ) ;
132+ await expectFileNameToBe ( 'test.jsx' ) ;
141133 } ) ;
142134 } ) ;
143135
144136 describe ( 'fileType: folder' , ( ) => {
145137 it ( 'cannot change to an empty name' , async ( ) => {
146- const { props } = renderFileNode ( 'folder' ) ;
138+ renderFileNode ( 'folder' ) ;
147139
148140 changeName ( '' ) ;
149141
150142 await waitFor ( ( ) => expect ( mockDispatch ) . not . toHaveBeenCalled ( ) ) ;
151- await expectFileNameToBe ( props . name ) ;
143+ await expectFileNameToBe ( 'afolder' ) ;
152144 } ) ;
153145
154146 it ( 'can change to another name' , async ( ) => {
155147 const newName = 'foldername' ;
156- const { props } = renderFileNode ( 'folder' ) ;
148+ renderFileNode ( 'folder' ) ;
157149
158150 changeName ( newName ) ;
159151
160152 await waitFor ( ( ) =>
161- expect ( props . updateFileName ) . toHaveBeenCalledWith ( props . id , newName )
153+ expect ( FileActions . updateFileName ) . toHaveBeenCalledWith ( '0' , newName )
162154 ) ;
163155 await expectFileNameToBe ( newName ) ;
164156 } ) ;
165157
166158 it ( 'cannot have a file extension' , async ( ) => {
167159 const newName = 'foldername.jsx' ;
168- const { props } = renderFileNode ( 'folder' ) ;
160+ renderFileNode ( 'folder' ) ;
169161
170162 changeName ( newName ) ;
171163
172164 await waitFor ( ( ) => expect ( mockDispatch ) . not . toHaveBeenCalled ( ) ) ;
173- await expectFileNameToBe ( props . name ) ;
165+ await expectFileNameToBe ( 'afolder' ) ;
174166 } ) ;
175167 } ) ;
176168} ) ;
0 commit comments