|
5 | 5 | * found at http://www.apache.org/licenses/LICENSE-2.0. |
6 | 6 | */ |
7 | 7 |
|
8 | | -import React, { createRef, HTMLAttributes } from 'react'; |
| 8 | +import React, { act, createRef, HTMLAttributes } from 'react'; |
9 | 9 | import userEvent from '@testing-library/user-event'; |
10 | 10 | import { render, fireEvent, waitFor } from '@testing-library/react'; |
11 | | -import { act } from 'react-dom/test-utils'; |
12 | 11 | import { KEYS } from '@zendeskgarden/container-utilities'; |
13 | 12 | import { TooltipContainer, ITooltipContainerProps } from './'; |
14 | 13 |
|
@@ -194,6 +193,76 @@ describe('TooltipContainer', () => { |
194 | 193 | expect(getByRole('tooltip')).toHaveAttribute('aria-hidden', 'false'); |
195 | 194 | }); |
196 | 195 | }); |
| 196 | + |
| 197 | + describe('tooltip suppression with expanded popup', () => { |
| 198 | + it('should not show tooltip on focus when trigger has expanded popup', async () => { |
| 199 | + const { getByText } = render( |
| 200 | + <BasicExample triggerProps={{ 'aria-haspopup': true, 'aria-expanded': true }} /> |
| 201 | + ); |
| 202 | + |
| 203 | + await user.tab(); |
| 204 | + act(() => { |
| 205 | + jest.runOnlyPendingTimers(); |
| 206 | + }); |
| 207 | + |
| 208 | + expect(getByText('tooltip')).toHaveAttribute('aria-hidden', 'true'); |
| 209 | + }); |
| 210 | + |
| 211 | + it('should not show tooltip on mouse enter when trigger has expanded popup', async () => { |
| 212 | + const { getByText } = render( |
| 213 | + <BasicExample triggerProps={{ 'aria-haspopup': true, 'aria-expanded': true }} /> |
| 214 | + ); |
| 215 | + |
| 216 | + await user.hover(getByText('trigger')); |
| 217 | + act(() => { |
| 218 | + jest.runOnlyPendingTimers(); |
| 219 | + }); |
| 220 | + |
| 221 | + expect(getByText('tooltip')).toHaveAttribute('aria-hidden', 'true'); |
| 222 | + }); |
| 223 | + |
| 224 | + it('should allow tooltip to show when popup collapses', async () => { |
| 225 | + const { getByText, getByRole, rerender } = render( |
| 226 | + <BasicExample triggerProps={{ 'aria-haspopup': true, 'aria-expanded': true }} /> |
| 227 | + ); |
| 228 | + const trigger = getByText('trigger'); |
| 229 | + |
| 230 | + // Initially try to show tooltip with expanded popup - should be suppressed |
| 231 | + await user.hover(trigger); |
| 232 | + act(() => { |
| 233 | + jest.runOnlyPendingTimers(); |
| 234 | + }); |
| 235 | + |
| 236 | + expect(getByText('tooltip')).toHaveAttribute('aria-hidden', 'true'); |
| 237 | + |
| 238 | + // Collapse popup |
| 239 | + rerender(<BasicExample triggerProps={{ 'aria-haspopup': true, 'aria-expanded': false }} />); |
| 240 | + |
| 241 | + // Now try to show tooltip again |
| 242 | + await user.unhover(trigger); |
| 243 | + await user.hover(trigger); |
| 244 | + act(() => { |
| 245 | + jest.runOnlyPendingTimers(); |
| 246 | + }); |
| 247 | + |
| 248 | + expect(getByRole('tooltip')).toHaveAttribute('aria-hidden', 'false'); |
| 249 | + }); |
| 250 | + |
| 251 | + it('should handle trigger without aria-haspopup normally', async () => { |
| 252 | + const { getByText, getByRole } = render( |
| 253 | + <BasicExample triggerProps={{ 'aria-expanded': true }} /> |
| 254 | + ); |
| 255 | + const trigger = getByText('trigger'); |
| 256 | + |
| 257 | + await user.hover(trigger); |
| 258 | + act(() => { |
| 259 | + jest.runOnlyPendingTimers(); |
| 260 | + }); |
| 261 | + |
| 262 | + // Should show tooltip normally since aria-haspopup is not true |
| 263 | + expect(getByRole('tooltip')).toHaveAttribute('aria-hidden', 'false'); |
| 264 | + }); |
| 265 | + }); |
197 | 266 | }); |
198 | 267 |
|
199 | 268 | describe('getTooltipProps', () => { |
@@ -242,23 +311,5 @@ describe('TooltipContainer', () => { |
242 | 311 |
|
243 | 312 | expect(getByText('tooltip')).toHaveAttribute('aria-hidden', 'true'); |
244 | 313 | }); |
245 | | - |
246 | | - it('should close tooltip if the trigger has an expanded popup', async () => { |
247 | | - const { getByRole, getByText, rerender } = render(<BasicExample />); |
248 | | - const trigger = getByText('trigger'); |
249 | | - |
250 | | - await user.hover(trigger); |
251 | | - |
252 | | - act(() => { |
253 | | - jest.runOnlyPendingTimers(); |
254 | | - }); |
255 | | - |
256 | | - expect(getByRole('tooltip')).toHaveAttribute('aria-hidden', 'false'); |
257 | | - |
258 | | - // Simulate triggering a popup |
259 | | - rerender(<BasicExample triggerProps={{ 'aria-haspopup': true, 'aria-expanded': true }} />); |
260 | | - |
261 | | - expect(getByText('tooltip')).toHaveAttribute('aria-hidden', 'true'); |
262 | | - }); |
263 | 314 | }); |
264 | 315 | }); |
0 commit comments