Skip to content

Commit 7e46382

Browse files
committed
update FileNode tests
1 parent 902a33b commit 7e46382

File tree

1 file changed

+35
-43
lines changed

1 file changed

+35
-43
lines changed

client/modules/IDE/components/FileNode.unit.test.jsx

Lines changed: 35 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import React from 'react';
22
import { Provider } from 'react-redux';
33
import configureStore from 'redux-mock-store';
44
import { useDispatch } from 'react-redux';
5+
import * as FileActions from '../actions/files';
56

67
import {
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

1516
jest.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+
2027
describe('<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

Comments
 (0)