11import React from 'react' ;
2+ import { Provider } from 'react-redux' ;
3+ import configureStore from 'redux-mock-store' ;
4+ import { useDispatch } from 'react-redux' ;
25
36import {
47 fireEvent ,
@@ -9,7 +12,19 @@ import {
912} from '../../../test-utils' ;
1013import { FileNode } from './FileNode' ;
1114
15+ jest . mock ( 'react-redux' , ( ) => ( {
16+ ...jest . requireActual ( 'react-redux' ) ,
17+ useDispatch : jest . fn ( )
18+ } ) ) ;
19+
1220describe ( '<FileNode />' , ( ) => {
21+ const mockDispatch = jest . fn ( ) ;
22+ const mockStore = configureStore ( [ ] ) ;
23+
24+ beforeEach ( ( ) => {
25+ useDispatch . mockReturnValue ( mockDispatch ) ;
26+ } ) ;
27+
1328 const changeName = ( newFileName ) => {
1429 const renameButton = screen . getByText ( / R e n a m e / i) ;
1530 fireEvent . click ( renameButton ) ;
@@ -25,6 +40,19 @@ describe('<FileNode />', () => {
2540 } ;
2641
2742 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+
2856 const props = {
2957 ...extraProps ,
3058 id : '0' ,
@@ -45,24 +73,28 @@ describe('<FileNode />', () => {
4573 setProjectName : jest . fn ( )
4674 } ;
4775
48- render ( < FileNode { ...props } /> ) ;
76+ render (
77+ < Provider store = { store } >
78+ < FileNode { ...props } />
79+ </ Provider >
80+ ) ;
4981
50- return props ;
82+ return { store , props } ;
5183 } ;
5284
5385 describe ( 'fileType: file' , ( ) => {
5486 it ( 'cannot change to an empty name' , async ( ) => {
55- const props = renderFileNode ( 'file' ) ;
87+ const { props } = renderFileNode ( 'file' ) ;
5688
5789 changeName ( '' ) ;
5890
59- await waitFor ( ( ) => expect ( props . updateFileName ) . not . toHaveBeenCalled ( ) ) ;
91+ await waitFor ( ( ) => expect ( mockDispatch ) . not . toHaveBeenCalled ( ) ) ;
6092 await expectFileNameToBe ( props . name ) ;
6193 } ) ;
6294
6395 it ( 'can change to a valid filename' , async ( ) => {
6496 const newName = 'newname.jsx' ;
65- const props = renderFileNode ( 'file' ) ;
97+ const { props } = renderFileNode ( 'file' ) ;
6698
6799 changeName ( newName ) ;
68100
@@ -74,11 +106,11 @@ describe('<FileNode />', () => {
74106
75107 it ( 'must have an extension' , async ( ) => {
76108 const newName = 'newname' ;
77- const props = renderFileNode ( 'file' ) ;
109+ const { props } = renderFileNode ( 'file' ) ;
78110
79111 changeName ( newName ) ;
80112
81- await waitFor ( ( ) => expect ( props . updateFileName ) . not . toHaveBeenCalled ( ) ) ;
113+ await waitFor ( ( ) => expect ( mockDispatch ) . not . toHaveBeenCalled ( ) ) ;
82114 await expectFileNameToBe ( props . name ) ;
83115 } ) ;
84116
@@ -87,41 +119,41 @@ describe('<FileNode />', () => {
87119 window . confirm = mockConfirm ;
88120
89121 const newName = 'newname.gif' ;
90- const props = renderFileNode ( 'file' ) ;
122+ const { props } = renderFileNode ( 'file' ) ;
91123
92124 changeName ( newName ) ;
93125
94126 expect ( mockConfirm ) . toHaveBeenCalled ( ) ;
95127 await waitFor ( ( ) =>
96128 expect ( props . updateFileName ) . toHaveBeenCalledWith ( props . id , newName )
97129 ) ;
98- await expectFileNameToBe ( props . name ) ;
130+ await expectFileNameToBe ( newName ) ;
99131 } ) ;
100132
101133 it ( 'cannot be just an extension' , async ( ) => {
102134 const newName = '.jsx' ;
103- const props = renderFileNode ( 'file' ) ;
135+ const { props } = renderFileNode ( 'file' ) ;
104136
105137 changeName ( newName ) ;
106138
107- await waitFor ( ( ) => expect ( props . updateFileName ) . not . toHaveBeenCalled ( ) ) ;
139+ await waitFor ( ( ) => expect ( mockDispatch ) . not . toHaveBeenCalled ( ) ) ;
108140 await expectFileNameToBe ( props . name ) ;
109141 } ) ;
110142 } ) ;
111143
112144 describe ( 'fileType: folder' , ( ) => {
113145 it ( 'cannot change to an empty name' , async ( ) => {
114- const props = renderFileNode ( 'folder' ) ;
146+ const { props } = renderFileNode ( 'folder' ) ;
115147
116148 changeName ( '' ) ;
117149
118- await waitFor ( ( ) => expect ( props . updateFileName ) . not . toHaveBeenCalled ( ) ) ;
150+ await waitFor ( ( ) => expect ( mockDispatch ) . not . toHaveBeenCalled ( ) ) ;
119151 await expectFileNameToBe ( props . name ) ;
120152 } ) ;
121153
122154 it ( 'can change to another name' , async ( ) => {
123155 const newName = 'foldername' ;
124- const props = renderFileNode ( 'folder' ) ;
156+ const { props } = renderFileNode ( 'folder' ) ;
125157
126158 changeName ( newName ) ;
127159
@@ -133,11 +165,11 @@ describe('<FileNode />', () => {
133165
134166 it ( 'cannot have a file extension' , async ( ) => {
135167 const newName = 'foldername.jsx' ;
136- const props = renderFileNode ( 'folder' ) ;
168+ const { props } = renderFileNode ( 'folder' ) ;
137169
138170 changeName ( newName ) ;
139171
140- await waitFor ( ( ) => expect ( props . updateFileName ) . not . toHaveBeenCalled ( ) ) ;
172+ await waitFor ( ( ) => expect ( mockDispatch ) . not . toHaveBeenCalled ( ) ) ;
141173 await expectFileNameToBe ( props . name ) ;
142174 } ) ;
143175 } ) ;
0 commit comments