11import * as React from 'react' ;
2- import { render } from '@testing-library/react' ;
2+ import { render , screen } from '@testing-library/react' ;
33import { resetIdsForTests } from '@fluentui/react-utilities' ;
44import { isConformant } from '../../testing/isConformant' ;
55import type { IsConformantOptions } from '@fluentui/react-conformance' ;
6- import type { RenderResult } from '@testing-library/react' ;
76import { Tooltip } from './Tooltip' ;
87
9- function queryByRoleTooltip ( result : RenderResult ) {
10- const tooltips = result . baseElement . querySelectorAll ( '*[role="tooltip"]' ) ;
11- if ( ! tooltips ?. length ) {
12- return null ;
13- } else {
14- expect ( tooltips . length ) . toBe ( 1 ) ;
15- return tooltips . item ( 0 ) as HTMLElement ;
16- }
17- }
18-
19- function getByRoleTooltip ( result : RenderResult ) {
20- const tooltip = queryByRoleTooltip ( result ) ;
21- expect ( tooltip ) . not . toBeNull ( ) ;
22- return tooltip ! ;
23- }
24-
25- export const getTooltipElement : IsConformantOptions [ 'getTargetElement' ] = result => {
26- return queryByRoleTooltip ( result ) ! ;
8+ export const getTooltipElement : IsConformantOptions [ 'getTargetElement' ] = ( ) => {
9+ return screen . queryByRole ( 'tooltip' ) as HTMLElement ;
2710} ;
2811
2912describe ( 'Tooltip' , ( ) => {
@@ -55,7 +38,7 @@ describe('Tooltip', () => {
5538 } ) ;
5639
5740 it ( 'renders trigger and tooltip content with correct positioning attributes' , async ( ) => {
58- const result = render (
41+ render (
5942 < Tooltip
6043 content = "Default Tooltip"
6144 relationship = "label"
@@ -66,32 +49,24 @@ describe('Tooltip', () => {
6649 </ Tooltip > ,
6750 ) ;
6851
69- const trigger = result . getByRole ( 'button' ) ;
70- const tooltip = getByRoleTooltip ( result ) ;
71-
72- // Trigger gets aria-label from label relationship.
73- expect ( trigger ) . toHaveAttribute ( 'aria-label' , 'Default Tooltip' ) ;
74-
75- // Content renders with popover API attribute.
76- expect ( tooltip ) . toHaveAttribute ( 'popover' , 'manual' ) ;
52+ expect ( screen . getByLabelText ( 'Default Tooltip' ) ) . toBeInTheDocument ( ) ;
53+ expect ( screen . getByRole ( 'tooltip' ) ) . toHaveAttribute ( 'popover' , 'manual' ) ;
7754 } ) ;
7855
7956 it ( 'renders only aria-label for a simple label tooltip' , ( ) => {
8057 const tooltipText = 'The tooltip text' ;
81- const result = render (
58+ render (
8259 < Tooltip content = { tooltipText } relationship = "label" >
8360 < button data-testid = "the-target" > Trigger</ button >
8461 </ Tooltip > ,
8562 ) ;
8663
87- const tooltip = queryByRoleTooltip ( result ) ;
88- const target = result . getByRole ( 'button' ) ;
89- expect ( tooltip ) . toBeNull ( ) ;
90- expect ( target . getAttribute ( 'aria-label' ) ) . toBe ( tooltipText ) ;
64+ expect ( screen . queryByRole ( 'tooltip' ) ) . toBeNull ( ) ;
65+ expect ( screen . getByRole ( 'button' ) ) . toHaveAttribute ( 'aria-label' , tooltipText ) ;
9166 } ) ;
9267
9368 it ( 'renders the content of a nontrivial label tooltip' , ( ) => {
94- const result = render (
69+ render (
9570 < Tooltip
9671 relationship = "label"
9772 content = { {
@@ -107,92 +82,90 @@ describe('Tooltip', () => {
10782 </ Tooltip > ,
10883 ) ;
10984
110- const tooltip = getByRoleTooltip ( result ) ;
111- const target = result . getByRole ( 'button' ) ;
85+ const tooltip = screen . getByRole ( 'tooltip' ) ;
86+ const target = screen . getByRole ( 'button' ) ;
11287 expect ( tooltip . id ) . toBe ( 'the-tooltip-id' ) ;
113- expect ( target . getAttribute ( 'aria-labelledby' ) ) . toBe ( 'the-tooltip-id' ) ;
88+ expect ( target ) . toHaveAttribute ( 'aria-labelledby' , 'the-tooltip-id' ) ;
11489 } ) ;
11590
11691 it ( 'renders a description tooltip content always' , ( ) => {
117- const result = render (
92+ render (
11893 < Tooltip content = "Description tooltip" relationship = "description" >
11994 < button > Trigger</ button >
12095 </ Tooltip > ,
12196 ) ;
12297
123- const tooltip = getByRoleTooltip ( result ) ;
124- const target = result . getByRole ( 'button' ) ;
125- expect ( target . getAttribute ( 'aria-describedby' ) ) . toBe ( tooltip . id ) ;
98+ const tooltip = screen . getByRole ( 'tooltip' ) ;
99+ const target = screen . getByRole ( 'button' ) ;
100+ expect ( target ) . toHaveAttribute ( 'aria-describedby' , tooltip . id ) ;
126101 } ) ;
127102
128103 it ( 'renders arrow element when withArrow is true' , ( ) => {
129- const result = render (
104+ render (
130105 < Tooltip content = "Arrow tooltip" relationship = "label" visible withArrow >
131106 < button > Trigger</ button >
132107 </ Tooltip > ,
133108 ) ;
134109
135- const tooltip = getByRoleTooltip ( result ) ;
136- expect ( tooltip . querySelector ( '[data-arrow]' ) ) . not . toBeNull ( ) ;
110+ expect ( screen . getByRole ( 'tooltip' ) . querySelector ( '[data-arrow]' ) ) . not . toBeNull ( ) ;
137111 } ) ;
138112
139113 it ( 'does not render arrow element when withArrow is false' , ( ) => {
140- const result = render (
114+ render (
141115 < Tooltip content = "No arrow tooltip" relationship = "label" visible >
142116 < button > Trigger</ button >
143117 </ Tooltip > ,
144118 ) ;
145119
146- const tooltip = getByRoleTooltip ( result ) ;
147- expect ( tooltip . querySelector ( '[data-arrow]' ) ) . toBeNull ( ) ;
120+ expect ( screen . getByRole ( 'tooltip' ) . querySelector ( '[data-arrow]' ) ) . toBeNull ( ) ;
148121 } ) ;
149122
150123 it ( "doesn't set any aria attributes for relationship='inaccessible'" , ( ) => {
151- const result = render (
124+ render (
152125 < Tooltip content = "Inaccessible tooltip" relationship = "inaccessible" >
153126 < button > Trigger</ button >
154127 </ Tooltip > ,
155128 ) ;
156129
157- const target = result . getByRole ( 'button' ) ;
158- expect ( target . hasAttribute ( 'aria-label' ) ) . toBe ( false ) ;
159- expect ( target . hasAttribute ( 'aria-labelledby' ) ) . toBe ( false ) ;
160- expect ( target . hasAttribute ( 'aria-description' ) ) . toBe ( false ) ;
161- expect ( target . hasAttribute ( 'aria-describedby' ) ) . toBe ( false ) ;
130+ const target = screen . getByRole ( 'button' ) ;
131+ expect ( target ) . not . toHaveAttribute ( 'aria-label' ) ;
132+ expect ( target ) . not . toHaveAttribute ( 'aria-labelledby' ) ;
133+ expect ( target ) . not . toHaveAttribute ( 'aria-description' ) ;
134+ expect ( target ) . not . toHaveAttribute ( 'aria-describedby' ) ;
162135 } ) ;
163136
164137 it ( "doesn't override trigger's aria-label" , ( ) => {
165- const result = render (
138+ render (
166139 < Tooltip content = "Label tooltip" relationship = "label" >
167140 < button aria-label = "test-label" />
168141 </ Tooltip > ,
169142 ) ;
170143
171- const target = result . getByRole ( 'button' ) ;
172- expect ( target . getAttribute ( 'aria-label' ) ) . toBe ( 'test-label' ) ;
173- expect ( target . getAttribute ( 'aria-labelledby' ) ) . toBe ( null ) ;
144+ const target = screen . getByRole ( 'button' ) ;
145+ expect ( target ) . toHaveAttribute ( 'aria-label' , 'test-label' ) ;
146+ expect ( target ) . not . toHaveAttribute ( 'aria-labelledby' ) ;
174147 } ) ;
175148
176149 it ( "doesn't override trigger's aria-labelledby" , ( ) => {
177- const result = render (
150+ render (
178151 < Tooltip content = "Label tooltip" relationship = "label" >
179152 < button aria-labelledby = "test-labelledby" > Trigger</ button >
180153 </ Tooltip > ,
181154 ) ;
182155
183- const target = result . getByRole ( 'button' ) ;
184- expect ( target . getAttribute ( 'aria-labelledby' ) ) . toBe ( 'test-labelledby' ) ;
156+ const target = screen . getByRole ( 'button' ) ;
157+ expect ( target ) . toHaveAttribute ( 'aria-labelledby' , 'test-labelledby' ) ;
185158 } ) ;
186159
187160 it ( "doesn't override trigger's aria-describedby" , ( ) => {
188- const result = render (
161+ render (
189162 < Tooltip content = "Description tooltip" relationship = "description" >
190163 < button aria-describedby = "test-describedby" > Trigger</ button >
191164 </ Tooltip > ,
192165 ) ;
193166
194- const target = result . getByRole ( 'button' ) ;
195- expect ( target . getAttribute ( 'aria-description' ) ) . toBe ( null ) ;
196- expect ( target . getAttribute ( 'aria-describedby' ) ) . toBe ( 'test-describedby' ) ;
167+ const target = screen . getByRole ( 'button' ) ;
168+ expect ( target ) . not . toHaveAttribute ( 'aria-description' ) ;
169+ expect ( target ) . toHaveAttribute ( 'aria-describedby' , 'test-describedby' ) ;
197170 } ) ;
198171} ) ;
0 commit comments