Skip to content

Commit 4748805

Browse files
test: add unit tests
1 parent f7443d6 commit 4748805

File tree

4 files changed

+84
-2
lines changed

4 files changed

+84
-2
lines changed
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import { screen } from '@testing-library/react';
2+
import OpenResponsesPage from './OpenResponsesPage';
3+
import { renderWithQueryClient } from '../testUtils';
4+
import messages from './messages';
5+
import { useDetailAssessmentsData, useOpenResponsesData } from './data/apiHook';
6+
7+
jest.mock('react-router-dom', () => ({
8+
useParams: () => ({ courseId: 'course-v1:edX+Test+2024' }),
9+
}));
10+
11+
jest.mock('./data/apiHook', () => ({
12+
useOpenResponsesData: jest.fn(),
13+
useDetailAssessmentsData: jest.fn(),
14+
}));
15+
16+
const mockResults = {
17+
useDetailAssessmentsData: [
18+
{
19+
id: '1',
20+
unitName: 'Unit 1',
21+
displayName: 'Assessment 1',
22+
totalResponses: 2,
23+
training: 0,
24+
peer: 1,
25+
self: 0,
26+
waiting: 0,
27+
staff: 0,
28+
finalGradeReceived: 1,
29+
url: 'http://test-url.com',
30+
},
31+
],
32+
useOpenResponsesData: {
33+
totalUnits: '5',
34+
totalAssessments: '10',
35+
totalResponses: '15',
36+
training: '2',
37+
peer: '3',
38+
self: '4',
39+
waiting: '1',
40+
staff: '6',
41+
finalGradeReceived: '7',
42+
}
43+
};
44+
45+
describe('OpenResponsesPage', () => {
46+
beforeEach(() => {
47+
jest.clearAllMocks();
48+
(useDetailAssessmentsData as jest.Mock).mockReturnValue({
49+
data: { count: 1, results: mockResults.useDetailAssessmentsData },
50+
isLoading: false,
51+
});
52+
(useOpenResponsesData as jest.Mock).mockReturnValue({
53+
data: { count: 1, results: mockResults.useOpenResponsesData },
54+
isLoading: false,
55+
});
56+
});
57+
58+
it('renders OpenResponsesSummary component', () => {
59+
renderWithQueryClient(<OpenResponsesPage />);
60+
expect(screen.getByRole('heading', { name: messages.summaryTitle.defaultMessage })).toBeInTheDocument();
61+
});
62+
63+
it('renders DetailAssessmentsList component', () => {
64+
renderWithQueryClient(<OpenResponsesPage />);
65+
expect(screen.getByRole('heading', { name: messages.details.defaultMessage })).toBeInTheDocument();
66+
});
67+
});

src/openResponses/components/DetailAssessmentsList.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ const DetailAssessmentsList = () => {
4141

4242
const tableData = data.results.map(item => ({
4343
...item,
44-
staffGrader: <Button variant="link" size="inline" href={item.url}>View and Grade Responses</Button>,
44+
staffGrader: <Button variant="link" size="inline" href={item.url}>{intl.formatMessage(messages.viewAndGradeResponses)}</Button>,
4545
}));
4646

4747
return (

src/openResponses/messages.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,12 @@ const messages = defineMessages({
7070
id: 'instruct.openResponses.table.header.staffGrader',
7171
defaultMessage: 'Staff Grader',
7272
description: 'Label for the staff grader header'
73-
}
73+
},
74+
viewAndGradeResponses: {
75+
id: 'instruct.openResponses.button.viewAndGradeResponses',
76+
defaultMessage: 'View and Grade Responses',
77+
description: 'Label for the link to view and grade responses'
78+
},
7479
});
7580

7681
export default messages;

src/testUtils.tsx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
import { render } from '@testing-library/react';
22
import { IntlProvider } from '@openedx/frontend-base';
3+
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
4+
5+
const queryClient = new QueryClient();
6+
7+
export const renderWithQueryClient = (ui: React.ReactElement) =>
8+
renderWithIntl(
9+
<QueryClientProvider client={queryClient}>
10+
{ui}
11+
</QueryClientProvider>
12+
);
313

414
export const renderWithIntl = (component) => {
515
return render(<IntlProvider locale="en" messages={{}}>{ component }</IntlProvider>);

0 commit comments

Comments
 (0)