@@ -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