Skip to content

Commit e10f572

Browse files
test: edit unit tests
1 parent fbac668 commit e10f572

File tree

2 files changed

+44
-6
lines changed

2 files changed

+44
-6
lines changed

src/dateExtensions/DateExtensionsPage.test.tsx

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
import { render, screen } from '@testing-library/react';
2+
import userEvent from '@testing-library/user-event';
23
import { IntlProvider } from '@openedx/frontend-base';
34
import { MemoryRouter, Route, Routes } from 'react-router-dom';
45
import DateExtensionsPage from './DateExtensionsPage';
5-
import { useDateExtensions } from '../data/apiHook';
6+
import { useDateExtensions, useResetDateExtensionMutation } from '../data/apiHook';
67

78
jest.mock('../data/apiHook', () => ({
89
useDateExtensions: jest.fn(),
10+
useResetDateExtensionMutation: jest.fn(),
911
}));
1012

1113
const mockDateExtensions = [
@@ -19,12 +21,17 @@ const mockDateExtensions = [
1921
},
2022
];
2123

24+
const mutateMock = jest.fn();
25+
2226
describe('DateExtensionsPage', () => {
2327
beforeEach(() => {
2428
(useDateExtensions as jest.Mock).mockReturnValue({
2529
data: { count: mockDateExtensions.length, results: mockDateExtensions },
2630
isLoading: false,
2731
});
32+
(useResetDateExtensionMutation as jest.Mock).mockReturnValue({
33+
mutate: mutateMock,
34+
});
2835
});
2936

3037
const RenderWithRouter = () => (
@@ -67,4 +74,35 @@ describe('DateExtensionsPage', () => {
6774
const resetLinks = screen.getAllByRole('button', { name: 'Reset Extensions' });
6875
expect(resetLinks).toHaveLength(mockDateExtensions.length);
6976
});
77+
78+
it('opens reset modal when reset button is clicked', async () => {
79+
render(<RenderWithRouter />);
80+
const user = userEvent.setup();
81+
const resetButton = screen.getByRole('button', { name: 'Reset Extensions' });
82+
await user.click(resetButton);
83+
expect(screen.getByRole('dialog')).toBeInTheDocument();
84+
expect(screen.getByText(/reset extensions for/i)).toBeInTheDocument();
85+
const confirmButton = screen.getByRole('button', { name: /reset due date/i });
86+
expect(confirmButton).toBeInTheDocument();
87+
});
88+
89+
it('calls reset mutation when confirm reset is clicked', async () => {
90+
render(<RenderWithRouter />);
91+
const user = userEvent.setup();
92+
const resetButton = screen.getByRole('button', { name: 'Reset Extensions' });
93+
await user.click(resetButton);
94+
const confirmButton = screen.getByRole('button', { name: /reset due date/i });
95+
await user.click(confirmButton);
96+
expect(mutateMock).toHaveBeenCalled();
97+
});
98+
99+
it('closes reset modal when cancel is clicked', async () => {
100+
render(<RenderWithRouter />);
101+
const user = userEvent.setup();
102+
const resetButton = screen.getByRole('button', { name: 'Reset Extensions' });
103+
await user.click(resetButton);
104+
const cancelButton = screen.getByRole('button', { name: /cancel/i });
105+
await user.click(cancelButton);
106+
expect(screen.queryByRole('dialog')).not.toBeInTheDocument();
107+
});
70108
});

src/dateExtensions/DateExtensionsPage.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,18 @@ const DateExtensionsPage = () => {
1414
const intl = useIntl();
1515
const { courseId } = useParams<{ courseId: string }>();
1616
const { mutate: resetMutation } = useResetDateExtensionMutation();
17-
const [isModalOpen, setIsModalOpen] = useState(false);
17+
const [isResetModalOpen, setIsResetModalOpen] = useState(false);
1818
const [selectedUser, setSelectedUser] = useState<LearnerDateExtension | null>(null);
1919
const [successMessage, setSuccessMessage] = useState<string>('');
2020
const [errorMessage, setErrorMessage] = useState<string>('');
2121

2222
const handleResetExtensions = (user: LearnerDateExtension) => {
23-
setIsModalOpen(true);
23+
setIsResetModalOpen(true);
2424
setSelectedUser(user);
2525
};
2626

2727
const handleCloseModal = () => {
28-
setIsModalOpen(false);
28+
setIsResetModalOpen(false);
2929
setSelectedUser(null);
3030
};
3131

@@ -60,7 +60,7 @@ const DateExtensionsPage = () => {
6060
</div>
6161
<DateExtensionsList onResetExtensions={handleResetExtensions} />
6262
<ResetExtensionsModal
63-
isOpen={isModalOpen}
63+
isOpen={isResetModalOpen}
6464
message={intl.formatMessage(messages.resetConfirmationMessage)}
6565
title={intl.formatMessage(messages.resetConfirmationHeader, { username: selectedUser?.username })}
6666
onCancelReset={handleCloseModal}
@@ -70,7 +70,7 @@ const DateExtensionsPage = () => {
7070
<Toast show={!!successMessage} onClose={() => {}} className="text-break">
7171
{successMessage}
7272
</Toast>
73-
<AlertModal isOpen={!!errorMessage} footerNode={<Button onClick={() => setErrorMessage('')}>{intl.formatMessage(messages.close)}</Button>}>
73+
<AlertModal title={errorMessage} isOpen={!!errorMessage} footerNode={<Button onClick={() => setErrorMessage('')}>{intl.formatMessage(messages.close)}</Button>}>
7474
{errorMessage}
7575
</AlertModal>
7676
</Container>

0 commit comments

Comments
 (0)