Skip to content

Commit 371327e

Browse files
authored
Refactor:src/screens/UserPortal/Events from Jest to Vitest (#2639)
* migrated UpcomingEvents tests from Jest to Vitest * Rename UpcomingEvents.test.tsx to UpcomingEvents.spec.tsx * add header comments for UpcomingEvents component tests * migrated Events tests from jest to vitest * Using hardcoded dates instead of dynamic dates to ensure consistent behavior * Fix: Make dates dynamic for Vitest compatibility with DatePicker
1 parent d9dc57d commit 371327e

File tree

1 file changed

+65
-41
lines changed

1 file changed

+65
-41
lines changed

src/screens/UserPortal/Events/Events.test.tsx renamed to src/screens/UserPortal/Events/Events.spec.tsx

Lines changed: 65 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React, { act } from 'react';
2-
import { fireEvent, render, screen } from '@testing-library/react';
2+
import { fireEvent, render, screen, waitFor } from '@testing-library/react';
33
import { MockedProvider } from '@apollo/react-testing';
44
import { I18nextProvider } from 'react-i18next';
55

@@ -19,35 +19,51 @@ import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
1919
import { ThemeProvider } from 'react-bootstrap';
2020
import { createTheme } from '@mui/material';
2121
import useLocalStorage from 'utils/useLocalstorage';
22+
import { vi } from 'vitest';
2223

23-
const { setItem, getItem } = useLocalStorage();
24+
/**
25+
* Unit tests for the Events component.
26+
*
27+
* This file contains tests to verify the functionality and behavior of the Events component
28+
* under various scenarios, including successful event creation, date/time picker handling,
29+
* calendar view toggling, and error handling. Mocked dependencies are used to ensure isolated testing.
30+
*/
2431

25-
jest.mock('react-toastify', () => ({
32+
const { setItem } = useLocalStorage();
33+
34+
vi.mock('react-toastify', () => ({
2635
toast: {
27-
error: jest.fn(),
28-
info: jest.fn(),
29-
success: jest.fn(),
36+
error: vi.fn(),
37+
info: vi.fn(),
38+
success: vi.fn(),
3039
},
3140
}));
3241

33-
jest.mock('@mui/x-date-pickers/DatePicker', () => {
42+
vi.mock('@mui/x-date-pickers/DatePicker', async () => {
43+
const desktopDatePickerModule = await vi.importActual(
44+
'@mui/x-date-pickers/DesktopDatePicker',
45+
);
3446
return {
35-
DatePicker: jest.requireActual('@mui/x-date-pickers/DesktopDatePicker')
36-
.DesktopDatePicker,
47+
DatePicker: desktopDatePickerModule.DesktopDatePicker,
3748
};
3849
});
3950

40-
jest.mock('@mui/x-date-pickers/TimePicker', () => {
51+
vi.mock('@mui/x-date-pickers/TimePicker', async () => {
52+
const timePickerModule = await vi.importActual(
53+
'@mui/x-date-pickers/DesktopTimePicker',
54+
);
4155
return {
42-
TimePicker: jest.requireActual('@mui/x-date-pickers/DesktopTimePicker')
43-
.DesktopTimePicker,
56+
TimePicker: timePickerModule.DesktopTimePicker,
4457
};
4558
});
4659

47-
jest.mock('react-router-dom', () => ({
48-
...jest.requireActual('react-router-dom'),
49-
useParams: () => ({ orgId: '' }),
50-
}));
60+
vi.mock('react-router-dom', async () => {
61+
const actual = await vi.importActual('react-router-dom');
62+
return {
63+
...actual,
64+
useParams: () => ({ orgId: '' }),
65+
};
66+
});
5167

5268
const theme = createTheme({
5369
palette: {
@@ -252,19 +268,19 @@ async function wait(ms = 100): Promise<void> {
252268
describe('Testing Events Screen [User Portal]', () => {
253269
Object.defineProperty(window, 'matchMedia', {
254270
writable: true,
255-
value: jest.fn().mockImplementation((query) => ({
271+
value: vi.fn().mockImplementation((query) => ({
256272
matches: false,
257273
media: query,
258274
onchange: null,
259-
addListener: jest.fn(), // Deprecated
260-
removeListener: jest.fn(), // Deprecated
261-
addEventListener: jest.fn(),
262-
removeEventListener: jest.fn(),
263-
dispatchEvent: jest.fn(),
275+
addListener: vi.fn(), // Deprecated
276+
removeListener: vi.fn(), // Deprecated
277+
addEventListener: vi.fn(),
278+
removeEventListener: vi.fn(),
279+
dispatchEvent: vi.fn(),
264280
})),
265281
});
266282

267-
test('Screen should be rendered properly', async () => {
283+
it('Screen should be rendered properly', async () => {
268284
render(
269285
<MockedProvider addTypename={false} link={link}>
270286
<BrowserRouter>
@@ -283,7 +299,7 @@ describe('Testing Events Screen [User Portal]', () => {
283299
await wait();
284300
});
285301

286-
test('Create event works as expected when event is not an all day event.', async () => {
302+
it('Create event works as expected when event is not an all day event.', async () => {
287303
render(
288304
<MockedProvider addTypename={false} link={link}>
289305
<BrowserRouter>
@@ -341,7 +357,7 @@ describe('Testing Events Screen [User Portal]', () => {
341357
);
342358
});
343359

344-
test('Create event works as expected when event is an all day event.', async () => {
360+
it('Create event works as expected when event is an all day event.', async () => {
345361
render(
346362
<MockedProvider addTypename={false} link={link}>
347363
<BrowserRouter>
@@ -384,7 +400,7 @@ describe('Testing Events Screen [User Portal]', () => {
384400
);
385401
});
386402

387-
test('Switch to calendar view works as expected.', async () => {
403+
it('Switch to calendar view works as expected.', async () => {
388404
render(
389405
<MockedProvider addTypename={false} link={link}>
390406
<BrowserRouter>
@@ -413,7 +429,7 @@ describe('Testing Events Screen [User Portal]', () => {
413429
expect(screen.getByText('Sun')).toBeInTheDocument();
414430
});
415431

416-
test('Testing DatePicker and TimePicker', async () => {
432+
it('Testing DatePicker and TimePicker', async () => {
417433
render(
418434
<MockedProvider addTypename={false} link={link}>
419435
<BrowserRouter>
@@ -430,31 +446,39 @@ describe('Testing Events Screen [User Portal]', () => {
430446
</MockedProvider>,
431447
);
432448

433-
await wait();
434-
435-
const startDate = '03/23/2024';
436-
const endDate = '04/23/2024';
437-
const startTime = '02:00 PM';
438-
const endTime = '06:00 PM';
439-
440449
userEvent.click(screen.getByTestId('createEventModalBtn'));
450+
// MM/DD/YYYY
451+
const startDate = new Date();
452+
const endDate = new Date();
453+
const startTime = '08:00 AM';
454+
const endTime = '10:00 AM';
455+
456+
await waitFor(() => {
457+
expect(screen.getByLabelText('Start Date')).toBeInTheDocument();
458+
expect(screen.getByLabelText('End Date')).toBeInTheDocument();
459+
});
441460

442461
expect(endDate).not.toBeNull();
443462
const endDateDatePicker = screen.getByLabelText('End Date');
444463
expect(startDate).not.toBeNull();
445464
const startDateDatePicker = screen.getByLabelText('Start Date');
446465

466+
const startDateDayjs = dayjs(startDate);
467+
const endDateDayjs = dayjs(endDate);
468+
447469
fireEvent.change(startDateDatePicker, {
448-
target: { value: startDate },
470+
target: { value: startDateDayjs.format('MM/DD/YYYY') },
449471
});
450472
fireEvent.change(endDateDatePicker, {
451-
target: { value: endDate },
473+
target: { value: endDateDayjs.format('MM/DD/YYYY') },
452474
});
453475

454-
await wait();
455-
456-
expect(endDateDatePicker).toHaveValue(endDate);
457-
expect(startDateDatePicker).toHaveValue(startDate);
476+
await waitFor(() => {
477+
expect(startDateDatePicker).toHaveValue(
478+
startDateDayjs.format('MM/DD/YYYY'),
479+
);
480+
expect(endDateDatePicker).toHaveValue(endDateDayjs.format('MM/DD/YYYY'));
481+
});
458482

459483
userEvent.click(screen.getByTestId('allDayEventCheck'));
460484

@@ -475,7 +499,7 @@ describe('Testing Events Screen [User Portal]', () => {
475499
expect(startTimePicker).toHaveValue(startTime);
476500
});
477501

478-
test('EndDate null', async () => {
502+
it('EndDate null', async () => {
479503
render(
480504
<MockedProvider addTypename={false} link={link}>
481505
<BrowserRouter>

0 commit comments

Comments
 (0)