Skip to content

Commit 1910d91

Browse files
author
Katie George
committed
chore: Updates unit tests
1 parent 5ad34e6 commit 1910d91

5 files changed

+47
-6
lines changed

src/button-group/__tests__/button-group-dev.test.tsx

+21
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
22
// SPDX-License-Identifier: Apache-2.0
33

4+
import { fireEvent } from '@testing-library/react';
5+
46
import { warnOnce } from '@cloudscape-design/component-toolkit/internal';
57

68
import { ButtonGroupProps } from '../../../lib/components/button-group';
@@ -135,3 +137,22 @@ test('handles menu click', () => {
135137
wrapper.findMenuById('misc')!.findItemById('compact-mode')!.click();
136138
expect(onItemClick).toHaveBeenCalledWith(expect.objectContaining({ detail: { id: 'compact-mode', checked: false } }));
137139
});
140+
141+
test('handles file upload', () => {
142+
const file = new File([new Blob(['Test content'], { type: 'text/plain' })], 'test-file.txt', {
143+
type: 'text/plain',
144+
lastModified: 1590962400000,
145+
});
146+
const onFilesChange = jest.fn();
147+
148+
const { wrapper } = renderButtonGroup({
149+
items: [{ type: 'file-input', id: 'file', text: 'Choose files' }],
150+
onFilesChange,
151+
});
152+
153+
const input = wrapper.findFileInputById('file')!.findNativeInput().getElement();
154+
Object.defineProperty(input, 'files', { value: [file] });
155+
fireEvent(input, new CustomEvent('change', { bubbles: true }));
156+
157+
expect(onFilesChange).toHaveBeenCalledWith(expect.objectContaining({ detail: { id: 'file', files: [file] } }));
158+
});

src/button-group/__tests__/button-group-focus.test.tsx

+10-1
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,15 @@ const menuButton: ButtonGroupProps.MenuDropdown = {
3232
items: [{ id: 'search', text: 'Search' }],
3333
};
3434

35+
const fileInputButton: ButtonGroupProps.FileInput = {
36+
type: 'file-input',
37+
id: 'file',
38+
text: 'Choose files',
39+
};
40+
3541
test('focuses on all item types', () => {
3642
const ref: { current: ButtonGroupProps.Ref | null } = { current: null };
37-
const { wrapper } = renderButtonGroup({ items: [likeButton, copyButton, menuButton] }, ref);
43+
const { wrapper } = renderButtonGroup({ items: [likeButton, copyButton, menuButton, fileInputButton] }, ref);
3844

3945
ref.current!.focus('copy');
4046
expect(wrapper.findButtonById('copy')!.getElement()).toHaveFocus();
@@ -44,6 +50,9 @@ test('focuses on all item types', () => {
4450

4551
ref.current!.focus('menu');
4652
expect(wrapper.findMenuById('menu')!.findTriggerButton()!.getElement()).toHaveFocus();
53+
54+
ref.current!.focus('file');
55+
expect(wrapper.findFileInputById('file')!.findNativeInput().getElement()).toHaveFocus();
4756
});
4857

4958
test('moves focus to menu trigger after menu is dismissed', () => {

src/button-group/__tests__/button-group-keyboard.test.tsx

+6
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ const items: ButtonGroupProps.ItemOrGroup[] = [
3535
],
3636
},
3737
{ type: 'icon-button', id: 'copy', iconName: 'copy', text: 'Copy', popoverFeedback: 'Copied' },
38+
{ type: 'file-input', id: 'file', text: 'Choose files' },
3839
{
3940
type: 'menu-dropdown',
4041
id: 'misc',
@@ -60,6 +61,11 @@ test('navigates button dropdown with keyboard', () => {
6061
expect(wrapper.findToggleButtonById('like')!.getElement()).toHaveFocus();
6162
expect(wrapper.findTooltip()!.getElement()).toHaveTextContent('Like');
6263

64+
fireEvent.keyDown(wrapper.getElement(), { keyCode: KeyCode.right });
65+
fireEvent.keyDown(wrapper.getElement(), { keyCode: KeyCode.right });
66+
expect(wrapper.findFileInputById('file')!.findNativeInput().getElement()).toHaveFocus();
67+
expect(wrapper.findTooltip()!.getElement()).toHaveTextContent('Choose files');
68+
6369
fireEvent.keyDown(wrapper.getElement(), { keyCode: KeyCode.end });
6470
expect(wrapper.findMenuById('misc')!.findTriggerButton()!.getElement()).toHaveFocus();
6571
expect(wrapper.findTooltip()!.getElement()).toHaveTextContent('Misc');

src/button-group/__tests__/button-group-states.test.tsx

-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ const fileButton: ButtonGroupProps.FileInput = {
2929
type: 'file-input',
3030
id: 'file',
3131
text: 'Choose files',
32-
value: [],
3332
};
3433

3534
const menuButton: ButtonGroupProps.MenuDropdown = {

src/button-group/__tests__/button-group-tooltips.test.tsx

+10-4
Original file line numberDiff line numberDiff line change
@@ -32,17 +32,23 @@ const menuButton: ButtonGroupProps.MenuDropdown = {
3232
items: [{ id: 'search', text: 'Search' }],
3333
};
3434

35+
const fileInputButton: ButtonGroupProps.FileInput = {
36+
type: 'file-input',
37+
id: 'file',
38+
text: 'Choose files',
39+
};
40+
3541
test('tooltip not shown by default', () => {
36-
const { wrapper } = renderButtonGroup({ items: [likeButton, copyButton, menuButton] });
42+
const { wrapper } = renderButtonGroup({ items: [likeButton, copyButton, menuButton, fileInputButton] });
3743

3844
expect(wrapper.findTooltip()).toBeNull();
3945
});
4046

41-
test.each([copyButton, likeButton, menuButton])(
47+
test.each([copyButton, likeButton, menuButton, fileInputButton])(
4248
'shows the tooltip on pointer enter and hides on pointer leave, item id=$id',
4349
item => {
44-
const { wrapper } = renderButtonGroup({ items: [likeButton, copyButton, menuButton] });
45-
const button = wrapper.findButtonById(item.id)!;
50+
const { wrapper } = renderButtonGroup({ items: [likeButton, copyButton, menuButton, fileInputButton] });
51+
const button = item.id === 'file' ? wrapper.findFileInputById(item.id)! : wrapper.findButtonById(item.id)!;
4652

4753
fireEvent.pointerEnter(button.getElement());
4854
expect(wrapper.findTooltip()!.getElement()).toHaveTextContent(item.text);

0 commit comments

Comments
 (0)