11import React from 'react' ;
2- import {
3- render , screen , waitFor ,
4- } from '@testing-library/react' ;
2+ import { render , screen , waitFor } from '@testing-library/react' ;
53import userEvent from '@testing-library/user-event' ;
64import { useSelector } from 'react-redux' ;
75import { IntlProvider } from 'react-intl' ;
86
7+ import { fireEvent } from '@testing-library/dom' ;
98import GradeSummaryHeader from './GradeSummaryHeader' ;
109import { useModel } from '../../../../generic/model-store' ;
1110import messages from '../messages' ;
@@ -19,7 +18,7 @@ jest.mock('../../../../generic/model-store', () => ({
1918} ) ) ;
2019
2120jest . mock ( '../../../../data/hooks' , ( ) => ( {
22- useContextId : jest . fn ( ( ) => 'test-course-id' ) ,
21+ useContextId : ( ) => 'test-course-id' ,
2322} ) ) ;
2423
2524describe ( '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