@@ -17,9 +17,95 @@ describe("getAutocomplete", () => {
1717 } ) ,
1818 ) . toBe ( "username" ) ;
1919 } ) ;
20+
21+ test ( "uses input modes for dedicated email and telephone autofill" , ( ) => {
22+ expect (
23+ getAutocomplete ( {
24+ name : "field_email" ,
25+ label : "Email address" ,
26+ type : "text" ,
27+ input_mode : "email" ,
28+ } ) ,
29+ ) . toBe ( "email" ) ;
30+ expect (
31+ getAutocomplete ( {
32+ name : "field_phone" ,
33+ label : "Phone number" ,
34+ type : "text" ,
35+ input_mode : "tel" ,
36+ } ) ,
37+ ) . toBe ( "tel" ) ;
38+ expect (
39+ getAutocomplete ( {
40+ ref : "username" ,
41+ name : "field_identifier" ,
42+ label : "Account identifier" ,
43+ type : "text" ,
44+ input_mode : "email" ,
45+ } ) ,
46+ ) . toBe ( "email" ) ;
47+ } ) ;
48+
49+ test ( "keeps one-time-code autocomplete ahead of keyboard hints" , ( ) => {
50+ expect (
51+ getAutocomplete ( {
52+ name : "field_code" ,
53+ label : "Verification code" ,
54+ type : "code" ,
55+ input_mode : "tel" ,
56+ } ) ,
57+ ) . toBe ( "one-time-code" ) ;
58+ } ) ;
59+
60+ test ( "does not infer email autofill for mixed identifier inputs" , ( ) => {
61+ expect (
62+ getAutocomplete ( {
63+ ref : "email" ,
64+ name : "field_identifier" ,
65+ label : "Mobile number, username, or email" ,
66+ type : "text" ,
67+ input_mode : "text" ,
68+ } ) ,
69+ ) . toBeUndefined ( ) ;
70+ } ) ;
2071} ) ;
2172
2273describe ( "UnifiedAuthForm" , ( ) => {
74+ test ( "applies a keyboard hint without enabling native format validation" , ( ) => {
75+ let renderer ! : ReturnType < typeof create > ;
76+
77+ act ( ( ) => {
78+ renderer = create (
79+ createElement ( AppearanceProvider , {
80+ children : createElement ( LocalizationProvider , {
81+ children : createElement ( UnifiedAuthForm , {
82+ targetDomain : "example.com" ,
83+ fields : [
84+ {
85+ name : "field_email" ,
86+ label : "Email address" ,
87+ type : "text" ,
88+ input_mode : "email" ,
89+ } ,
90+ ] ,
91+ onSubmitFields : ( ) => { } ,
92+ onSSOClick : ( ) => { } ,
93+ onMFASelect : ( ) => { } ,
94+ onSignInOptionSelect : ( ) => { } ,
95+ } ) ,
96+ } ) ,
97+ } ) ,
98+ ) ;
99+ } ) ;
100+
101+ const input = renderer . root . findByType ( "input" ) ;
102+ expect ( input . props . type ) . toBe ( "text" ) ;
103+ expect ( input . props . inputMode ) . toBe ( "email" ) ;
104+ expect ( input . props . autoComplete ) . toBe ( "email" ) ;
105+
106+ act ( ( ) => renderer . unmount ( ) ) ;
107+ } ) ;
108+
23109 test ( "renders an accessible, customizable rejection notice" , ( ) => {
24110 const fieldName = "password-field" ;
25111 const rejectedNoticeId = `${ fieldName } -rejected-notice` ;
0 commit comments