@@ -4,13 +4,50 @@ import '@testing-library/jest-dom/extend-expect';
4
4
import { MemoryRouter } from 'react-router-dom' ;
5
5
import { ThemeProvider , createTheme } from '@mui/material/styles' ;
6
6
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' ;
8
8
import * as projectFunctions from '../app/src/helperFunctions/projectGetSaveDel' ;
9
9
import { Provider } from 'react-redux' ;
10
10
import { configureStore } from '@reduxjs/toolkit' ;
11
11
import rootReducer from '../app/src/redux/reducers/rootReducer' ;
12
12
import { initialState as appStateInitialState } from '../app/src/redux/reducers/slice/appStateSlice' ;
13
13
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
+
14
51
// Mocking the theme
15
52
const theme = createTheme ( {
16
53
spacing : ( value ) => `${ value } px` ,
@@ -36,9 +73,9 @@ jest.mock('file-saver', () => ({
36
73
// console.error = jest.fn();
37
74
// });
38
75
39
- // afterAll(() => {
40
- // console.error = originalError ;
41
- // });
76
+ afterAll ( ( ) => {
77
+ jest . resetAllMocks ( ) ;
78
+ } ) ;
42
79
43
80
// Mocking the render
44
81
const renderNavBar = ( store ) => {
@@ -69,6 +106,7 @@ describe('NavBar Component', () => {
69
106
...appStateInitialState ,
70
107
isLoggedIn : true ,
71
108
name : 'Mock Project Name' ,
109
+ HTMLTypes : mockHTMLTypes ,
72
110
} ,
73
111
} ,
74
112
} ) ;
@@ -98,6 +136,7 @@ describe('NavBar Component', () => {
98
136
...appStateInitialState ,
99
137
isLoggedIn : true ,
100
138
name : '' ,
139
+ HTMLTypes : mockHTMLTypes ,
101
140
} ,
102
141
} ,
103
142
} ) ;
@@ -144,6 +183,7 @@ describe('NavBar Component', () => {
144
183
...appStateInitialState ,
145
184
isLoggedIn : true ,
146
185
name : 'Mock Project Name' ,
186
+ HTMLTypes : mockHTMLTypes ,
147
187
} ,
148
188
} ,
149
189
} ) ;
@@ -173,6 +213,7 @@ describe('NavBar Component', () => {
173
213
...appStateInitialState ,
174
214
isLoggedIn : true ,
175
215
name : 'Mock Project Name' ,
216
+ HTMLTypes : mockHTMLTypes ,
176
217
} ,
177
218
} ,
178
219
} ) ;
@@ -187,43 +228,65 @@ describe('NavBar Component', () => {
187
228
const exportButton = getByText ( '< > Export' ) ;
188
229
fireEvent . click ( exportButton ) ;
189
230
190
-
231
+ // Check if the modal for export options is displayed
191
232
await waitFor ( ( ) => {
192
233
const exportModal = getByText ( 'Click to download in zip file:' ) ;
193
234
expect ( exportModal ) . toBeInTheDocument ( ) ;
194
235
} ) ;
195
236
196
-
237
+ // Simulate clicking the export components
197
238
const exportComponentsOption = getByText ( 'Export components' ) ;
198
239
fireEvent . click ( exportComponentsOption ) ;
199
240
200
241
} ) ;
201
242
202
-
203
-
204
- xit ( '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' ,
243
+ test ( 'handles dropdown menu correctly' , async ( ) => {
244
+ const store = configureStore ( {
245
+ reducer : rootReducer ,
246
+ preloadedState : {
247
+ appState : {
248
+ ...appStateInitialState ,
249
+ } ,
212
250
} ,
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
-
251
+ } ) ;
228
252
229
- } ) ;
253
+ // Render component
254
+ const { getByTestId, getByText } = render (
255
+ < Provider store = { store } >
256
+ < MemoryRouter >
257
+ < ThemeProvider theme = { theme } >
258
+ < NavBar />
259
+ </ ThemeProvider >
260
+ </ MemoryRouter >
261
+ </ Provider >
262
+ ) ;
263
+
264
+ // Initially, the dropdown should have the "hideNavDropDown" class
265
+ const dropdownMenu = getByTestId ( 'navDropDown' ) ;
266
+ expect ( dropdownMenu ) . toHaveClass ( 'hideNavDropDown' ) ;
267
+
268
+ // Find and click the button to open the dropdown
269
+ const moreVertButton = getByTestId ( 'more-vert-button' ) ;
270
+ fireEvent . click ( moreVertButton ) ;
271
+
272
+ // After clicking, the dropdown should have the "navDropDown" class
273
+ expect ( dropdownMenu ) . toHaveClass ( 'navDropDown' ) ;
274
+
275
+
276
+ //clear canvas click
277
+ const clearCanvasMenuItem = getByText ( 'Clear Canvas' ) ;
278
+ fireEvent . click ( clearCanvasMenuItem ) ;
279
+ expect ( dropdownMenu ) . toHaveClass ( 'navDropDown' ) ;
280
+
281
+ // After clicking "Marketplace", it should remain open
282
+ const marketplaceMenuItem = getByText ( 'Marketplace' ) ;
283
+ fireEvent . click ( marketplaceMenuItem ) ;
284
+ expect ( dropdownMenu ) . toHaveClass ( 'navDropDown' ) ;
285
+
286
+ // Close the dropdown by clicking the button again
287
+ fireEvent . click ( moreVertButton ) ;
288
+
289
+ // After closing, the dropdown should have the "hideNavDropDown" class
290
+ expect ( dropdownMenu ) . toHaveClass ( 'hideNavDropDown' ) ;
291
+ } ) ;
292
+ } ) ;
0 commit comments