Skip to content

Commit 24d82ff

Browse files
test: unit tests
1 parent 926db0b commit 24d82ff

File tree

2 files changed

+83
-0
lines changed

2 files changed

+83
-0
lines changed
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
import { screen } from '@testing-library/react';
2+
import { useParams } from 'react-router-dom';
3+
import ORSummary from './ORSummary';
4+
import { useOpenResponsesData } from '../../data/apiHook';
5+
import messages from '../messages';
6+
import { renderWithIntl } from '../../testUtils';
7+
8+
jest.mock('react-router-dom', () => ({
9+
useParams: jest.fn(),
10+
}));
11+
12+
jest.mock('../../data/apiHook', () => ({
13+
useOpenResponsesData: jest.fn(),
14+
}));
15+
16+
const mockData = {
17+
totalUnits: '5',
18+
totalAssessments: '10',
19+
totalResponses: '15',
20+
training: '2',
21+
peer: '3',
22+
self: '4',
23+
waiting: '1',
24+
staff: '6',
25+
finalGradeReceived: '7',
26+
};
27+
28+
describe('ORSummary', () => {
29+
beforeEach(() => {
30+
(useParams as jest.Mock).mockReturnValue({ courseId: 'course-v1:edX+Test+2024' });
31+
});
32+
33+
it('renders all summary titles', () => {
34+
(useOpenResponsesData as jest.Mock).mockReturnValue({ data: {} });
35+
renderWithIntl(<ORSummary />);
36+
expect(screen.getByText(messages.summaryTitle.defaultMessage)).toBeInTheDocument();
37+
expect(screen.getByText(messages.totalUnits.defaultMessage)).toBeInTheDocument();
38+
expect(screen.getByText(messages.totalAssessments.defaultMessage)).toBeInTheDocument();
39+
expect(screen.getByText(messages.totalResponses.defaultMessage)).toBeInTheDocument();
40+
expect(screen.getByText(messages.training.defaultMessage)).toBeInTheDocument();
41+
expect(screen.getByText(messages.peer.defaultMessage)).toBeInTheDocument();
42+
expect(screen.getByText(messages.self.defaultMessage)).toBeInTheDocument();
43+
expect(screen.getByText(messages.waiting.defaultMessage)).toBeInTheDocument();
44+
expect(screen.getByText(messages.staff.defaultMessage)).toBeInTheDocument();
45+
expect(screen.getByText(messages.finalGradeReceived.defaultMessage)).toBeInTheDocument();
46+
});
47+
48+
it('renders default values when data is empty', () => {
49+
(useOpenResponsesData as jest.Mock).mockReturnValue({ data: {} });
50+
renderWithIntl(<ORSummary />);
51+
expect(screen.getAllByText('0').length).toBe(9);
52+
});
53+
54+
it('renders values from data', () => {
55+
(useOpenResponsesData as jest.Mock).mockReturnValue({
56+
data: mockData,
57+
});
58+
renderWithIntl(<ORSummary />);
59+
expect(screen.getByText('5')).toBeInTheDocument();
60+
expect(screen.getByText('10')).toBeInTheDocument();
61+
expect(screen.getByText('15')).toBeInTheDocument();
62+
expect(screen.getByText('2')).toBeInTheDocument();
63+
expect(screen.getByText('3')).toBeInTheDocument();
64+
expect(screen.getByText('4')).toBeInTheDocument();
65+
expect(screen.getByText('1')).toBeInTheDocument();
66+
expect(screen.getByText('6')).toBeInTheDocument();
67+
expect(screen.getByText('7')).toBeInTheDocument();
68+
});
69+
70+
it('renders icons', () => {
71+
(useOpenResponsesData as jest.Mock).mockReturnValue({ data: mockData });
72+
renderWithIntl(<ORSummary />);
73+
expect(screen.getAllByRole('img', { hidden: true }).length).toBe(2);
74+
});
75+
76+
it('uses courseId from params', () => {
77+
(useParams as jest.Mock).mockReturnValue({ courseId: 'course-v1:edX+Another+2024' });
78+
(useOpenResponsesData as jest.Mock).mockReturnValue({ data: {} });
79+
renderWithIntl(<ORSummary />);
80+
expect(useOpenResponsesData).toHaveBeenCalledWith('course-v1:edX+Another+2024');
81+
});
82+
});

src/openResponses/data/apiHook.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,6 @@ export const useOpenResponsesData = (courseId: string) => (
66
useQuery({
77
queryKey: openResponsesQueryKeys.byCourse(courseId),
88
queryFn: () => getOpenResponsesData(courseId),
9+
enabled: !!courseId,
910
})
1011
);

0 commit comments

Comments
 (0)