Skip to content

Commit b2deea9

Browse files
committed
Added more testing coverage on Navbar
1 parent e494601 commit b2deea9

File tree

4 files changed

+103
-35
lines changed

4 files changed

+103
-35
lines changed

__tests__/NavBar.test.tsx

Lines changed: 95 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,50 @@ import '@testing-library/jest-dom/extend-expect';
44
import { MemoryRouter } from 'react-router-dom';
55
import { ThemeProvider, createTheme } from '@mui/material/styles';
66
import NavBar from '../app/src/components/top/NavBar';
7-
import navbarDropDown from '../app/src/components/top/navbarDropDown'
7+
import navBarButtons from '../app/src/components/top/NavBarButtons';
88
import * as projectFunctions from '../app/src/helperFunctions/projectGetSaveDel';
99
import { Provider } from 'react-redux';
1010
import { configureStore } from '@reduxjs/toolkit';
1111
import rootReducer from '../app/src/redux/reducers/rootReducer';
1212
import { initialState as appStateInitialState } from '../app/src/redux/reducers/slice/appStateSlice';
1313

14+
15+
16+
// Mock the non-serializable HTMLTypes
17+
const mockHTMLTypes = [
18+
{
19+
id: 11,
20+
tag: 'div',
21+
name: 'Div',
22+
style: {},
23+
placeHolderShort: 'div',
24+
placeHolderLong: '',
25+
framework: 'reactClassic',
26+
nestable: true,
27+
},
28+
{
29+
id: 1000,
30+
tag: 'separator',
31+
name: 'separator',
32+
style: { border: 'none' },
33+
placeHolderShort: '',
34+
placeHolderLong: '',
35+
framework: '',
36+
nestable: true,
37+
},
38+
{
39+
id: 1,
40+
tag: 'img',
41+
name: 'Img',
42+
style: {},
43+
placeHolderShort: 'image',
44+
placeHolderLong: '',
45+
framework: 'reactClassic',
46+
nestable: false,
47+
},
48+
];
49+
50+
1451
// Mocking the theme
1552
const theme = createTheme({
1653
spacing: (value) => `${value}px`,
@@ -36,9 +73,9 @@ jest.mock('file-saver', () => ({
3673
// console.error = jest.fn();
3774
// });
3875

39-
// afterAll(() => {
40-
// console.error = originalError;
41-
// });
76+
afterAll(() => {
77+
jest.resetAllMocks();
78+
});
4279

4380
// Mocking the render
4481
const renderNavBar = (store) => {
@@ -69,6 +106,7 @@ describe('NavBar Component', () => {
69106
...appStateInitialState,
70107
isLoggedIn: true,
71108
name: 'Mock Project Name',
109+
HTMLTypes: mockHTMLTypes,
72110
},
73111
},
74112
});
@@ -98,6 +136,7 @@ describe('NavBar Component', () => {
98136
...appStateInitialState,
99137
isLoggedIn: true,
100138
name: '',
139+
HTMLTypes: mockHTMLTypes,
101140
},
102141
},
103142
});
@@ -144,6 +183,7 @@ describe('NavBar Component', () => {
144183
...appStateInitialState,
145184
isLoggedIn: true,
146185
name: 'Mock Project Name',
186+
HTMLTypes: mockHTMLTypes,
147187
},
148188
},
149189
});
@@ -173,6 +213,7 @@ describe('NavBar Component', () => {
173213
...appStateInitialState,
174214
isLoggedIn: true,
175215
name: 'Mock Project Name',
216+
HTMLTypes: mockHTMLTypes,
176217
},
177218
},
178219
});
@@ -187,43 +228,64 @@ describe('NavBar Component', () => {
187228
const exportButton = getByText('< > Export');
188229
fireEvent.click(exportButton);
189230

190-
231+
// Check if the modal for export options is displayed
191232
await waitFor(() => {
192233
const exportModal = getByText('Click to download in zip file:');
193234
expect(exportModal).toBeInTheDocument();
194235
});
195236

196-
237+
// Simulate clicking the export components
197238
const exportComponentsOption = getByText('Export components');
198239
fireEvent.click(exportComponentsOption);
199240

200241
});
201-
202-
203-
204-
it('handles dropdown menu correctly', () => {
205-
const store = configureStore({
206-
reducer: rootReducer,
207-
preloadedState: {
208-
appState: {
209-
...appStateInitialState,
210-
isLoggedIn: true,
211-
name: 'Mock Project Name',
242+
test('handles dropdown menu correctly', async () => {
243+
const store = configureStore({
244+
reducer: rootReducer,
245+
preloadedState: {
246+
appState: {
247+
...appStateInitialState,
248+
},
212249
},
213-
},
214-
});
215-
216-
const { getByTestId } = renderNavBar(store);
217-
const moreVertButton = getByTestId('more-vert-button');
218-
219-
220-
expect(moreVertButton).toBeInTheDocument();
221-
222-
223-
fireEvent.click(moreVertButton);
224-
225-
226-
});
227-
250+
});
228251

229-
});
252+
// Render component
253+
const { getByTestId, getByText } = render(
254+
<Provider store={store}>
255+
<MemoryRouter>
256+
<ThemeProvider theme={theme}>
257+
<NavBar />
258+
</ThemeProvider>
259+
</MemoryRouter>
260+
</Provider>
261+
);
262+
263+
// Initially, the dropdown should have the "hideNavDropDown" class
264+
const dropdownMenu = getByTestId('navDropDown');
265+
expect(dropdownMenu).toHaveClass('hideNavDropDown');
266+
267+
// Find and click the button to open the dropdown
268+
const moreVertButton = getByTestId('more-vert-button');
269+
fireEvent.click(moreVertButton);
270+
271+
// After clicking, the dropdown should have the "navDropDown" class
272+
expect(dropdownMenu).toHaveClass('navDropDown');
273+
274+
275+
//clear canvas click
276+
const clearCanvasMenuItem = getByText('Clear Canvas');
277+
fireEvent.click(clearCanvasMenuItem);
278+
expect(dropdownMenu).toHaveClass('navDropDown');
279+
280+
// After clicking "Marketplace", it should remain open
281+
const marketplaceMenuItem = getByText('Marketplace');
282+
fireEvent.click(marketplaceMenuItem);
283+
expect(dropdownMenu).toHaveClass('navDropDown');
284+
285+
// Close the dropdown by clicking the button again
286+
fireEvent.click(moreVertButton);
287+
288+
// After closing, the dropdown should have the "hideNavDropDown" class
289+
expect(dropdownMenu).toHaveClass('hideNavDropDown');
290+
});
291+
});

app/src/components/top/NavBar.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ const NavBar = () => {
175175
onClick={() => setDropMenu(!dropMenu)}
176176
ref={menuButtonRef}
177177
>
178-
<MoreVertIcon style={{ color: 'white' }} />
178+
<MoreVertIcon style={{ color: 'white' }} data-testid="more-vert-button" />
179179
</Button>
180180
<NavBarButtons
181181
dropMenu={dropMenu}

app/src/components/top/NavBarButtons.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,7 @@ function navbarDropDown(props) {
332332

333333
return (
334334
// <div ref={dropdownRef} className={showMenu}> dropdownRef making the menu fly off and anchorel messingup
335-
<div ref={ref} className={showMenu}>
335+
<div data-testid="navDropDown" ref={ref} className={showMenu}>
336336
<Link to="/tutorial" style={{ textDecoration: 'none' }} target="_blank">
337337
<button>
338338
Tutorial

package.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,12 @@
259259
"__tests__/spec.ts",
260260
"__tests__/projects.test.ts"
261261
],
262+
"coveragePathIgnorePatterns": [
263+
"server/graphQL"
264+
],
265+
"testPathIgnorePatterns": [
266+
"server/graphQL"
267+
],
262268
"transform": {
263269
"\\.(ts|tsx)$": "ts-jest",
264270
"^.+\\.js?$": "babel-jest"

0 commit comments

Comments
 (0)