Skip to content

Commit cb6c400

Browse files
test: improve tests and address feedback
1 parent c4fa01c commit cb6c400

File tree

2 files changed

+25
-17
lines changed

2 files changed

+25
-17
lines changed

src/containers/ListView/ListError.test.jsx

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
1-
import { render, screen, fireEvent } from '@testing-library/react';
1+
import { render, screen } from '@testing-library/react';
2+
import userEvent from '@testing-library/user-event';
3+
import { IntlProvider } from '@edx/frontend-platform/i18n';
24
import { selectors, thunkActions } from 'data/redux';
35
import { ListError, mapDispatchToProps, mapStateToProps } from './ListError';
6+
import messages from './messages';
47

58
jest.unmock('@openedx/paragon');
69
jest.unmock('react');
10+
jest.unmock('@edx/frontend-platform/i18n');
711

812
jest.mock('data/redux', () => ({
913
selectors: {
@@ -34,30 +38,31 @@ describe('ListError component', () => {
3438

3539
describe('behavior', () => {
3640
it('renders error alert with proper styling', () => {
37-
render(<ListError {...props} />);
41+
render(<IntlProvider locale="en" messages={{}}><ListError {...props} /></IntlProvider>);
3842
const alert = screen.getByRole('alert');
3943
expect(alert).toBeInTheDocument();
4044
expect(alert).toHaveClass('alert-danger');
4145
});
4246

4347
it('displays error heading and message', () => {
44-
render(<ListError {...props} />);
48+
render(<IntlProvider locale="en" messages={{}}><ListError {...props} /></IntlProvider>);
4549
const heading = screen.getByRole('alert').querySelector('.alert-heading');
4650
expect(heading).toBeInTheDocument();
47-
expect(heading).toHaveTextContent('FormattedMessage');
51+
expect(heading).toHaveTextContent(messages.loadErrorHeading.defaultMessage);
4852
});
4953

5054
it('displays try again button', () => {
51-
render(<ListError {...props} />);
55+
render(<IntlProvider locale="en" messages={{}}><ListError {...props} /></IntlProvider>);
5256
const button = screen.getByRole('button');
5357
expect(button).toBeInTheDocument();
5458
expect(button).toHaveClass('btn-primary');
5559
});
5660

57-
it('calls initializeApp when try again button is clicked', () => {
58-
render(<ListError {...props} />);
61+
it('calls initializeApp when try again button is clicked', async () => {
62+
render(<IntlProvider locale="en" messages={{}}><ListError {...props} /></IntlProvider>);
63+
const user = userEvent.setup();
5964
const button = screen.getByRole('button');
60-
fireEvent.click(button);
65+
await user.click(button);
6166
expect(props.initializeApp).toHaveBeenCalledTimes(1);
6267
});
6368
});

src/containers/ListView/index.test.jsx

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
import React from 'react';
22
import { render, screen } from '@testing-library/react';
3+
import { IntlProvider } from '@edx/frontend-platform/i18n';
34

45
import { selectors, thunkActions } from 'data/redux';
56
import { RequestKeys } from 'data/constants/requests';
67

78
import { formatMessage } from 'testUtils';
89
import { ListView, mapStateToProps, mapDispatchToProps } from '.';
10+
import messages from './messages';
911

1012
jest.unmock('@openedx/paragon');
1113
jest.unmock('react');
14+
jest.unmock('@edx/frontend-platform/i18n');
1215

1316
jest.mock('containers/ReviewModal', () => {
1417
const ReviewModal = () => <div data-testid="review-modal">ReviewModal</div>;
@@ -105,18 +108,18 @@ describe('ListView component', () => {
105108
});
106109

107110
it('displays loading spinner and message when not loaded and no error', () => {
108-
render(<ListView {...props} />);
111+
render(<IntlProvider locale="en" messages={{}}><ListView {...props} /></IntlProvider>);
109112

110113
// Check for loading message
111-
expect(screen.getByText('FormattedMessage')).toBeInTheDocument();
114+
expect(screen.getByText(messages.loadingResponses.defaultMessage)).toBeInTheDocument();
112115

113116
// Check for spinner by finding element with spinner class
114117
const spinner = document.querySelector('.pgn__spinner');
115118
expect(spinner).toBeInTheDocument();
116119
});
117120

118121
it('displays ListViewBreadcrumb and SubmissionsTable when loaded with data', () => {
119-
render(<ListView {...props} isLoaded />);
122+
render(<IntlProvider locale="en" messages={{}}><ListView {...props} isLoaded /></IntlProvider>);
120123

121124
expect(
122125
screen.getByText('Back to all open responses'),
@@ -126,7 +129,7 @@ describe('ListView component', () => {
126129
});
127130

128131
it('displays EmptySubmission component when loaded but has no submission data', () => {
129-
render(<ListView {...props} isLoaded isEmptySubmissionData />);
132+
render(<IntlProvider locale="en" messages={{}}><ListView {...props} isLoaded isEmptySubmissionData /></IntlProvider>);
130133

131134
expect(
132135
screen.getByRole('heading', { name: 'Nothing here yet' }),
@@ -143,7 +146,7 @@ describe('ListView component', () => {
143146
});
144147

145148
it('displays ListError component when there is an error', () => {
146-
render(<ListView {...props} hasError />);
149+
render(<IntlProvider locale="en" messages={{}}><ListView {...props} hasError /></IntlProvider>);
147150

148151
expect(
149152
screen.getByRole('button', { name: 'Reload submissions' }),
@@ -152,18 +155,18 @@ describe('ListView component', () => {
152155
});
153156

154157
it('always displays ReviewModal component regardless of state', () => {
155-
const { rerender } = render(<ListView {...props} />);
158+
const { rerender } = render(<IntlProvider locale="en" messages={{}}><ListView {...props} /></IntlProvider>);
156159
expect(screen.getByText('ReviewModal')).toBeInTheDocument();
157160

158-
rerender(<ListView {...props} isLoaded />);
161+
rerender(<IntlProvider locale="en" messages={{}}><ListView {...props} isLoaded /></IntlProvider>);
159162
expect(screen.getByText('ReviewModal')).toBeInTheDocument();
160163

161-
rerender(<ListView {...props} hasError />);
164+
rerender(<IntlProvider locale="en" messages={{}}><ListView {...props} hasError /></IntlProvider>);
162165
expect(screen.getByText('ReviewModal')).toBeInTheDocument();
163166
});
164167

165168
it('calls initializeApp on component mount', () => {
166-
render(<ListView {...props} />);
169+
render(<IntlProvider locale="en" messages={{}}><ListView {...props} /></IntlProvider>);
167170
expect(props.initializeApp).toHaveBeenCalledTimes(1);
168171
});
169172
});

0 commit comments

Comments
 (0)