Skip to content

Commit 7988d2b

Browse files
chore(TreeView): added and updated unit tests (#11744)
1 parent 90ff936 commit 7988d2b

File tree

6 files changed

+373
-160
lines changed

6 files changed

+373
-160
lines changed

packages/react-core/src/components/TreeView/TreeViewListItem.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,11 @@ export interface TreeViewListItemProps {
5050
/** Internal content of a tree view item. */
5151
name: React.ReactNode;
5252
/** Callback for item checkbox selection. */
53-
onCheck?: (event: React.ChangeEvent<HTMLInputElement>, item: TreeViewDataItem, parent: TreeViewDataItem) => void;
53+
onCheck?: (event: React.ChangeEvent<HTMLInputElement>, item: TreeViewDataItem, parentItem: TreeViewDataItem) => void;
5454
/** Callback for item selection. Note: calling event.preventDefault() will prevent the node
5555
* from toggling.
5656
*/
57-
onSelect?: (event: React.MouseEvent, item: TreeViewDataItem, parent: TreeViewDataItem) => void;
57+
onSelect?: (event: React.MouseEvent, item: TreeViewDataItem, parentItem: TreeViewDataItem) => void;
5858
/** Callback for expanding a node with children. */
5959
onExpand?: (event: React.MouseEvent, item: TreeViewDataItem, parentItem: TreeViewDataItem) => void;
6060
/** Callback for collapsing a node with children. */

packages/react-core/src/components/TreeView/__tests__/TreeView.test.tsx

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,20 @@ import userEvent from '@testing-library/user-event';
33
import { TreeView } from '../TreeView';
44

55
jest.mock('../TreeViewList', () => ({
6-
TreeViewList: ({ children, isNested, toolbar }) => (
6+
TreeViewList: ({
7+
children,
8+
isNested,
9+
toolbar,
10+
'aria-label': ariaLabel,
11+
'aria-labelledby': ariaLabelledBy,
12+
isMultiSelectable
13+
}) => (
714
<div data-testid="TreeViewList-mock">
815
<p>{`TreeViewList isNested: ${isNested}`}</p>
916
<p>{`TreeViewList toolbar: ${toolbar}`}</p>
17+
<p>{`TreeViewList aria-label: ${ariaLabel}`}</p>
18+
<p>{`TreeViewList aria-labelledBy: ${ariaLabelledBy}`}</p>
19+
<p>{`TreeViewList isMultiSelectable: ${isMultiSelectable}`}</p>
1020
<div data-testid="TreeViewList-children">{children}</div>
1121
</div>
1222
)
@@ -131,6 +141,21 @@ test('Passes toolbar to TreeViewList', () => {
131141

132142
expect(screen.getByText('TreeViewList toolbar: Toolbar content')).toBeVisible();
133143
});
144+
test('Passes aria-label to TreeViewList', () => {
145+
render(<TreeView aria-label="Test aria-label" data={[basicData]} />);
146+
147+
expect(screen.getByText('TreeViewList aria-label: Test aria-label')).toBeVisible();
148+
});
149+
test('Passes aria-labelledby to TreeViewList', () => {
150+
render(<TreeView aria-labelledby="test-aria-labelledby" data={[basicData]} />);
151+
152+
expect(screen.getByText('TreeViewList aria-labelledBy: test-aria-labelledby')).toBeVisible();
153+
});
154+
test('Passes isMultiSelectable to TreeViewList', () => {
155+
render(<TreeView isMultiSelectable={true} data={[basicData]} />);
156+
157+
expect(screen.getByText('TreeViewList isMultiSelectable: true')).toBeVisible();
158+
});
134159
test('Passes data as children TreeViewList', () => {
135160
render(<TreeView data={[basicData]} />);
136161

packages/react-core/src/components/TreeView/__tests__/TreeViewList.test.tsx

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,55 @@ test(`Renders toolbar content when toolbar prop is passed`, () => {
3232
expect(screen.getByText('Toolbar content')).toBeInTheDocument();
3333
});
3434

35+
test(`Renders Divider when toolbar prop is passed`, () => {
36+
render(<TreeViewList toolbar="Toolbar content">Content</TreeViewList>);
37+
38+
expect(screen.getByRole('separator')).toBeInTheDocument();
39+
});
40+
41+
test('Renders with aria-label when passed', () => {
42+
render(<TreeViewList aria-label="Test aria-label">Content</TreeViewList>);
43+
44+
expect(screen.getByRole('tree')).toHaveAccessibleName('Test aria-label');
45+
});
46+
47+
test('Renders with aria-labelledby when passed', () => {
48+
render(
49+
<>
50+
<div id="label">Labeling content</div>
51+
<TreeViewList aria-labelledby="label">Content</TreeViewList>
52+
</>
53+
);
54+
55+
expect(screen.getByRole('tree')).toHaveAccessibleName('Labeling content');
56+
});
57+
58+
test('Renders with aria-multiselectable of false by default', () => {
59+
render(<TreeViewList>Content</TreeViewList>);
60+
61+
expect(screen.getByRole('tree')).toHaveAttribute('aria-multiselectable', 'false');
62+
});
63+
64+
test('Renders with aria-multiselectable of true when isMultiSelectable is true', () => {
65+
render(<TreeViewList isMultiSelectable>Content</TreeViewList>);
66+
67+
expect(screen.getByRole('tree')).toHaveAttribute('aria-multiselectable', 'true');
68+
});
69+
70+
test('Does not render with aria-multiselectable when isNested is true', () => {
71+
render(
72+
<TreeViewList isMultiSelectable isNested>
73+
Content
74+
</TreeViewList>
75+
);
76+
77+
expect(screen.getByRole('group')).not.toHaveAttribute('aria-multiselectable');
78+
});
79+
3580
test(`Does not render toolbar content when toolbar prop is not passed`, () => {
3681
render(<TreeViewList>Content</TreeViewList>);
3782

83+
expect(screen.queryByRole('tree')?.previousElementSibling).not.toBeInTheDocument();
3884
expect(screen.queryByRole('separator')).not.toBeInTheDocument();
3985
});
4086

0 commit comments

Comments
 (0)