Skip to content

Commit 80672e0

Browse files
feat: refactor tests
1 parent da56709 commit 80672e0

1 file changed

Lines changed: 57 additions & 7 deletions

File tree

src/course-home/progress-tab/grades/grade-summary/GradeSummaryHeader.test.jsx

Lines changed: 57 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
import React from 'react';
2-
import {
3-
render, screen, waitFor,
4-
} from '@testing-library/react';
2+
import { render, screen, waitFor } from '@testing-library/react';
53
import userEvent from '@testing-library/user-event';
64
import { useSelector } from 'react-redux';
75
import { IntlProvider } from 'react-intl';
86

7+
import { fireEvent } from '@testing-library/dom';
98
import GradeSummaryHeader from './GradeSummaryHeader';
109
import { useModel } from '../../../../generic/model-store';
1110
import messages from '../messages';
@@ -19,7 +18,7 @@ jest.mock('../../../../generic/model-store', () => ({
1918
}));
2019

2120
jest.mock('../../../../data/hooks', () => ({
22-
useContextId: jest.fn(() => 'test-course-id'),
21+
useContextId: () => 'test-course-id',
2322
}));
2423

2524
describe('GradeSummaryHeader', () => {
@@ -34,25 +33,76 @@ describe('GradeSummaryHeader', () => {
3433
render(
3534
<IntlProvider locale="en" messages={messages}>
3635
<GradeSummaryHeader
37-
intl={{ formatMessage: jest.fn((msg) => msg.defaultMessage) }}
3836
allOfSomeAssignmentTypeIsLocked={false}
3937
{...props}
4038
/>
4139
</IntlProvider>,
4240
);
4341
};
4442

45-
it('visible the tooltip when Escape is pressed', async () => {
43+
it('shows tooltip on icon button click', async () => {
4644
renderComponent();
4745

4846
const iconButton = screen.getByRole('button', {
4947
name: messages.gradeSummaryTooltipAlt.defaultMessage,
5048
});
5149

52-
userEvent.click(iconButton);
50+
await userEvent.click(iconButton);
51+
52+
await waitFor(() => {
53+
expect(screen.getByText(messages.gradeSummaryTooltipBody.defaultMessage)).toBeInTheDocument();
54+
});
55+
});
56+
57+
it('hides tooltip on mouse out', async () => {
58+
renderComponent();
59+
60+
const iconButton = screen.getByRole('button', {
61+
name: messages.gradeSummaryTooltipAlt.defaultMessage,
62+
});
63+
64+
fireEvent.mouseOver(iconButton);
5365

5466
await waitFor(() => {
5567
expect(screen.getByText(messages.gradeSummaryTooltipBody.defaultMessage)).toBeVisible();
5668
});
69+
70+
fireEvent.mouseOut(iconButton);
71+
72+
await waitFor(() => {
73+
expect(screen.queryByText(messages.gradeSummaryTooltipBody.defaultMessage)).toBeNull();
74+
});
75+
});
76+
77+
it('hides tooltip on blur and hover out (covering setShowTooltip(false))', async () => {
78+
renderComponent();
79+
80+
const iconButton = screen.getByRole('button', {
81+
name: messages.gradeSummaryTooltipAlt.defaultMessage,
82+
});
83+
84+
await userEvent.hover(iconButton);
85+
await userEvent.click(iconButton);
86+
87+
await waitFor(() => {
88+
expect(screen.getByText(messages.gradeSummaryTooltipBody.defaultMessage)).toBeInTheDocument();
89+
});
90+
91+
const outside = document.createElement('div');
92+
document.body.appendChild(outside);
93+
await userEvent.unhover(iconButton);
94+
await userEvent.hover(outside);
95+
96+
const otherButton = document.createElement('button');
97+
otherButton.textContent = 'Other';
98+
document.body.appendChild(otherButton);
99+
otherButton.focus();
100+
101+
await waitFor(() => {
102+
expect(screen.queryByText(messages.gradeSummaryTooltipBody.defaultMessage)).not.toBeInTheDocument();
103+
});
104+
105+
document.body.removeChild(outside);
106+
document.body.removeChild(otherButton);
57107
});
58108
});

0 commit comments

Comments
 (0)