Skip to content

Commit b97d7d1

Browse files
committed
update tests according to review comments
1 parent 72e5a37 commit b97d7d1

1 file changed

Lines changed: 38 additions & 65 deletions

File tree

  • packages/react-components/react-headless-components-preview/library/src/components/Tooltip
Lines changed: 38 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,12 @@
11
import * as React from 'react';
2-
import { render } from '@testing-library/react';
2+
import { render, screen } from '@testing-library/react';
33
import { resetIdsForTests } from '@fluentui/react-utilities';
44
import { isConformant } from '../../testing/isConformant';
55
import type { IsConformantOptions } from '@fluentui/react-conformance';
6-
import type { RenderResult } from '@testing-library/react';
76
import { 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

2912
describe('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

Comments
 (0)