Skip to content

Commit d26e9dd

Browse files
committed
update test to add useDispatch
1 parent fc6fef3 commit d26e9dd

File tree

1 file changed

+48
-16
lines changed

1 file changed

+48
-16
lines changed

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

Lines changed: 48 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
import React from 'react';
2+
import { Provider } from 'react-redux';
3+
import configureStore from 'redux-mock-store';
4+
import { useDispatch } from 'react-redux';
25

36
import {
47
fireEvent,
@@ -9,7 +12,19 @@ import {
912
} from '../../../test-utils';
1013
import { FileNode } from './FileNode';
1114

15+
jest.mock('react-redux', () => ({
16+
...jest.requireActual('react-redux'),
17+
useDispatch: jest.fn()
18+
}));
19+
1220
describe('<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(/Rename/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

Comments
 (0)