Skip to content

Commit c96acf4

Browse files
committed
Added additional tests
1 parent eef8dd2 commit c96acf4

File tree

4 files changed

+59
-16
lines changed

4 files changed

+59
-16
lines changed

packages/react-templates/src/components/Dropdown/DropdownSimple.tsx

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
} from '@patternfly/react-core/dist/esm/components/Dropdown';
88
import { MenuToggle, MenuToggleElement } from '@patternfly/react-core/dist/esm/components/MenuToggle';
99
import { Divider } from '@patternfly/react-core/dist/esm/components/Divider';
10+
import { OUIAProps } from '@patternfly/react-core/dist/esm/helpers';
1011

1112
export interface DropdownSimpleItem extends Omit<DropdownItemProps, 'content'> {
1213
/** Content of the dropdown item. If the isDivider prop is true, this prop will be ignored. */
@@ -23,7 +24,7 @@ export interface DropdownSimpleItem extends Omit<DropdownItemProps, 'content'> {
2324
isDivider?: boolean;
2425
}
2526

26-
export interface DropdownSimpleProps {
27+
export interface DropdownSimpleProps extends OUIAProps {
2728
/** Initial items of the dropdown. */
2829
initialItems?: DropdownSimpleItem[];
2930
/** @hide Forwarded ref */

packages/react-templates/src/components/Dropdown/__tests__/DropdownSimple.test.tsx

+52-11
Original file line numberDiff line numberDiff line change
@@ -39,17 +39,20 @@ describe('Dropdown toggle', () => {
3939
expect(onToggle).toHaveBeenCalledWith(true);
4040
});
4141

42-
test('Only calls onToggle when dropdown toggle is clicked', async () => {
42+
test('Does not call onToggle when dropdown toggle is not clicked', async () => {
4343
const onToggle = jest.fn();
4444
const items = [{ content: 'Action', value: 1 }];
4545
const user = userEvent.setup();
46-
render(<DropdownSimple initialItems={items} onToggle={onToggle} toggleContent="Dropdown" />);
46+
render(
47+
<div>
48+
<button>Actual</button>
49+
<DropdownSimple initialItems={items} onToggle={onToggle} toggleContent="Dropdown" />
50+
</div>
51+
);
4752

48-
const toggle = screen.getByRole('button', { name: 'Dropdown' });
49-
await user.click(toggle);
50-
const actionItem = screen.getByRole('menuitem', { name: 'Action' });
51-
await user.click(actionItem);
52-
expect(onToggle).toHaveBeenCalledTimes(1);
53+
const btn = screen.getByRole('button', { name: 'Actual' });
54+
await user.click(btn);
55+
expect(onToggle).not.toHaveBeenCalled();
5356
});
5457

5558
test('Calls toggle onSelect when item is clicked', async () => {
@@ -78,6 +81,44 @@ describe('Dropdown toggle', () => {
7881
expect(onSelect).not.toHaveBeenCalled();
7982
});
8083

84+
test('Does not pass isToggleFullWidth to menu toggle by default', () => {
85+
render(<DropdownSimple toggleContent="Dropdown" />);
86+
87+
expect(screen.getByRole('button', { name: 'Dropdown' })).not.toHaveClass(styles.modifiers.fullWidth);
88+
});
89+
90+
test('Passes isToggleFullWidth to menu toggle when passed in', () => {
91+
render(<DropdownSimple isToggleFullWidth toggleContent="Dropdown" />);
92+
93+
expect(screen.getByRole('button', { name: 'Dropdown' })).toHaveClass(styles.modifiers.fullWidth);
94+
});
95+
96+
test('Does not focus toggle on item select by default', async () => {
97+
const items = [{ content: 'Action', value: 1 }];
98+
const user = userEvent.setup();
99+
render(<DropdownSimple initialItems={items} toggleContent="Dropdown" />);
100+
101+
const toggle = screen.getByRole('button', { name: 'Dropdown' });
102+
await user.click(toggle);
103+
const actionItem = screen.getByRole('menuitem', { name: 'Action' });
104+
await user.click(actionItem);
105+
106+
expect(toggle).not.toHaveFocus();
107+
});
108+
109+
test('Focuses toggle on item select when shouldFocusToggleOnSelect is true', async () => {
110+
const items = [{ content: 'Action', value: 1 }];
111+
const user = userEvent.setup();
112+
render(<DropdownSimple shouldFocusToggleOnSelect initialItems={items} toggleContent="Dropdown" />);
113+
114+
const toggle = screen.getByRole('button', { name: 'Dropdown' });
115+
await user.click(toggle);
116+
const actionItem = screen.getByRole('menuitem', { name: 'Action' });
117+
await user.click(actionItem);
118+
119+
expect(toggle).toHaveFocus();
120+
});
121+
81122
test('Matches snapshot', () => {
82123
const { asFragment } = render(<DropdownSimple toggleContent="Dropdown" />);
83124

@@ -198,12 +239,12 @@ describe('Dropdown items', () => {
198239

199240
test('Matches snapshot', async () => {
200241
const items = [
201-
{ content: 'Action', value: 1 },
202-
{ value: 'separator', isDivider: true },
203-
{ content: 'Link', value: 'separator', to: '#' }
242+
{ content: 'Action', value: 1, ouiaId: '1' },
243+
{ value: 'separator', isDivider: true, ouiaId: '2' },
244+
{ content: 'Link', value: 'separator', to: '#', ouiaId: '3' }
204245
];
205246
const user = userEvent.setup();
206-
const { asFragment } = render(<DropdownSimple initialItems={items} toggleContent="Dropdown" />);
247+
const { asFragment } = render(<DropdownSimple ouiaId={4} initialItems={items} toggleContent="Dropdown" />);
207248

208249
const toggle = screen.getByRole('button', { name: 'Dropdown' });
209250
await user.click(toggle);

packages/react-templates/src/components/Dropdown/__tests__/__snapshots__/DropdownSimple.test.tsx.snap

+3-3
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ exports[`Dropdown items Matches snapshot 1`] = `
3636
</button>
3737
<div
3838
class="pf-v5-c-menu"
39-
data-ouia-component-id="OUIA-Generated-Dropdown-18"
39+
data-ouia-component-id="4"
4040
data-ouia-component-type="PF5/Dropdown"
4141
data-ouia-safe="true"
4242
data-popper-escaped="true"
@@ -53,7 +53,7 @@ exports[`Dropdown items Matches snapshot 1`] = `
5353
>
5454
<li
5555
class="pf-v5-c-menu__list-item"
56-
data-ouia-component-id="OUIA-Generated-DropdownItem-13"
56+
data-ouia-component-id="1"
5757
data-ouia-component-type="PF5/DropdownItem"
5858
data-ouia-safe="true"
5959
role="none"
@@ -81,7 +81,7 @@ exports[`Dropdown items Matches snapshot 1`] = `
8181
/>
8282
<li
8383
class="pf-v5-c-menu__list-item"
84-
data-ouia-component-id="OUIA-Generated-DropdownItem-14"
84+
data-ouia-component-id="3"
8585
data-ouia-component-type="PF5/DropdownItem"
8686
data-ouia-safe="true"
8787
role="none"

packages/react-templates/src/components/Dropdown/examples/DropdownTemplates.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ DropdownItemProps,
2121
Flex,
2222
FlexItem,
2323
MenuToggle,
24-
MenuToggleElement
24+
MenuToggleElement,
25+
OUIAProps
2526
} from '@patternfly/react-core';
2627
import { DropdownSimple, DropdownSimpleItem } from '@patternfly/react-templates';
2728
import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon';

0 commit comments

Comments
 (0)