Skip to content

Commit 9a40481

Browse files
tes(core): test getInputProps Plain Enter behavior
1 parent d5ad576 commit 9a40481

File tree

1 file changed

+226
-4
lines changed

1 file changed

+226
-4
lines changed

packages/autocomplete-core/src/__tests__/getInputProps.test.ts

Lines changed: 226 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -860,11 +860,205 @@ describe('getInputProps', () => {
860860
});
861861

862862
describe('Plain Enter', () => {
863-
test.todo('calls onSelect with item URL');
863+
test('calls onSelect with item URL', () => {
864+
const onSelect = jest.fn();
865+
const navigator = {
866+
navigate: jest.fn(),
867+
navigateNewTab: jest.fn(),
868+
navigateNewWindow: jest.fn(),
869+
};
870+
const {
871+
inputElement,
872+
setCollections,
873+
setContext,
874+
setIsOpen,
875+
setQuery,
876+
setSelectedItemId,
877+
setStatus,
878+
} = createPlayground(createAutocomplete, {
879+
navigator,
880+
defaultSelectedItemId: 0,
881+
initialState: {
882+
isOpen: true,
883+
collections: [
884+
createCollection({
885+
source: { onSelect, getItemUrl: ({ item }) => item.url },
886+
items: [
887+
{ label: '1', url: '#1' },
888+
{ label: '2', url: '#2' },
889+
],
890+
}),
891+
],
892+
},
893+
});
894+
895+
inputElement.focus();
896+
userEvent.type(inputElement, '{enter}');
897+
898+
expect(onSelect).toHaveBeenCalledTimes(1);
899+
expect(onSelect).toHaveBeenCalledWith({
900+
event: expect.any(KeyboardEvent),
901+
item: {
902+
label: '1',
903+
url: '#1',
904+
},
905+
itemInputValue: '',
906+
itemUrl: '#1',
907+
setCollections,
908+
setContext,
909+
setIsOpen,
910+
setQuery,
911+
setSelectedItemId,
912+
setStatus,
913+
source: expect.any(Object),
914+
state: {
915+
collections: [
916+
{
917+
items: [
918+
{
919+
label: '1',
920+
url: '#1',
921+
},
922+
{
923+
label: '2',
924+
url: '#2',
925+
},
926+
],
927+
source: expect.any(Object),
928+
},
929+
],
930+
completion: null,
931+
context: {},
932+
isOpen: false,
933+
query: '',
934+
selectedItemId: 0,
935+
status: 'idle',
936+
},
937+
});
938+
});
864939

865-
test.todo('calls navigate with item URL');
940+
test('calls navigate with item URL', () => {
941+
const onSelect = jest.fn();
942+
const navigator = {
943+
navigate: jest.fn(),
944+
navigateNewTab: jest.fn(),
945+
navigateNewWindow: jest.fn(),
946+
};
947+
const { inputElement } = createPlayground(createAutocomplete, {
948+
navigator,
949+
defaultSelectedItemId: 0,
950+
initialState: {
951+
isOpen: true,
952+
collections: [
953+
createCollection({
954+
source: { onSelect, getItemUrl: ({ item }) => item.url },
955+
items: [
956+
{ label: '1', url: '#1' },
957+
{ label: '2', url: '#2' },
958+
],
959+
}),
960+
],
961+
},
962+
});
963+
964+
inputElement.focus();
965+
userEvent.type(inputElement, '{enter}');
966+
967+
expect(navigator.navigate).toHaveBeenCalledTimes(1);
968+
expect(navigator.navigate).toHaveBeenCalledWith({
969+
item: { label: '1', url: '#1' },
970+
itemUrl: '#1',
971+
state: {
972+
collections: [
973+
{
974+
items: [
975+
{ label: '1', url: '#1' },
976+
{ label: '2', url: '#2' },
977+
],
978+
source: {
979+
getItemInputValue: expect.any(Function),
980+
getItemUrl: expect.any(Function),
981+
getItems: expect.any(Function),
982+
onHighlight: expect.any(Function),
983+
onSelect,
984+
},
985+
},
986+
],
987+
completion: null,
988+
context: {},
989+
isOpen: false,
990+
query: '',
991+
selectedItemId: 0,
992+
status: 'idle',
993+
},
994+
});
995+
});
866996

867-
test.todo('calls onInput and onSelect without item URL');
997+
test('calls onInput and onSelect without item URL', async () => {
998+
const onSelect = jest.fn();
999+
const onInput = jest.fn();
1000+
const navigator = {
1001+
navigate: jest.fn(),
1002+
navigateNewTab: jest.fn(),
1003+
navigateNewWindow: jest.fn(),
1004+
};
1005+
const {
1006+
inputElement,
1007+
setCollections,
1008+
setContext,
1009+
setIsOpen,
1010+
setQuery,
1011+
setSelectedItemId,
1012+
setStatus,
1013+
} = createPlayground(createAutocomplete, {
1014+
onInput,
1015+
navigator,
1016+
defaultSelectedItemId: 0,
1017+
initialState: {
1018+
isOpen: true,
1019+
collections: [
1020+
createCollection({
1021+
source: { onSelect },
1022+
items: [{ label: '1' }, { label: '2' }],
1023+
}),
1024+
],
1025+
},
1026+
});
1027+
1028+
inputElement.focus();
1029+
userEvent.type(inputElement, '{enter}');
1030+
1031+
expect(onInput).toHaveBeenCalledTimes(1);
1032+
await runAllMicroTasks();
1033+
expect(onSelect).toHaveBeenCalledTimes(1);
1034+
expect(onSelect).toHaveBeenCalledWith({
1035+
event: expect.any(KeyboardEvent),
1036+
item: { label: '1' },
1037+
itemInputValue: '',
1038+
itemUrl: undefined,
1039+
setCollections,
1040+
setContext,
1041+
setIsOpen,
1042+
setQuery,
1043+
setSelectedItemId,
1044+
setStatus,
1045+
source: expect.any(Object),
1046+
state: {
1047+
collections: [
1048+
{
1049+
items: [{ label: '1' }, { label: '2' }],
1050+
source: expect.any(Object),
1051+
},
1052+
],
1053+
completion: null,
1054+
context: {},
1055+
isOpen: false,
1056+
query: '',
1057+
selectedItemId: 0,
1058+
status: 'idle',
1059+
},
1060+
});
1061+
});
8681062
});
8691063

8701064
describe('Meta+Enter / Ctrl+Enter', () => {
@@ -888,7 +1082,35 @@ describe('getInputProps', () => {
8881082
});
8891083

8901084
describe('Alt+Enter', () => {
891-
test.todo('triggers default browser behavior');
1085+
test('triggers default browser behavior', () => {
1086+
const onSelect = jest.fn();
1087+
const navigator = {
1088+
navigate: jest.fn(),
1089+
navigateNewTab: jest.fn(),
1090+
navigateNewWindow: jest.fn(),
1091+
};
1092+
const { inputElement } = createPlayground(createAutocomplete, {
1093+
navigator,
1094+
defaultSelectedItemId: 0,
1095+
initialState: {
1096+
isOpen: true,
1097+
collections: [
1098+
createCollection({
1099+
source: { onSelect },
1100+
items: [{ label: '1' }, { label: '2' }],
1101+
}),
1102+
],
1103+
},
1104+
});
1105+
1106+
inputElement.focus();
1107+
userEvent.type(inputElement, '{alt}+{enter}');
1108+
1109+
expect(onSelect).toHaveBeenCalledTimes(0);
1110+
expect(navigator.navigate).toHaveBeenCalledTimes(0);
1111+
expect(navigator.navigateNewTab).toHaveBeenCalledTimes(0);
1112+
expect(navigator.navigateNewWindow).toHaveBeenCalledTimes(0);
1113+
});
8921114
});
8931115
});
8941116
});

0 commit comments

Comments
 (0)