@@ -9,6 +9,8 @@ function renderForm({
99 showName = true ,
1010 showEmail = true ,
1111 isAnonymous = false ,
12+ isNameRequired = false ,
13+ isEmailRequired = false ,
1214 defaultName = 'Foo Bar' ,
1315 defaultEmail = 'foo@example.com' ,
1416 nameLabel = 'Name' ,
@@ -25,6 +27,8 @@ function renderForm({
2527 isAnonymous,
2628 showName,
2729 showEmail,
30+ isNameRequired,
31+ isEmailRequired,
2832 defaultName,
2933 defaultEmail,
3034 nameLabel,
@@ -80,13 +84,15 @@ describe('Form', () => {
8084 emailPlaceholder : 'foo@example.org!' ,
8185 messageLabel : 'Description!' ,
8286 messagePlaceholder : 'What is the issue?!' ,
87+ isNameRequired : true ,
88+ isEmailRequired : true ,
8389 } ) ;
8490
8591 const nameLabel = formComponent . el . querySelector ( 'label[htmlFor="name"]' ) as HTMLLabelElement ;
8692 const emailLabel = formComponent . el . querySelector ( 'label[htmlFor="email"]' ) as HTMLLabelElement ;
8793 const messageLabel = formComponent . el . querySelector ( 'label[htmlFor="message"]' ) as HTMLLabelElement ;
88- expect ( nameLabel . textContent ) . toBe ( 'Name!' ) ;
89- expect ( emailLabel . textContent ) . toBe ( 'Email!' ) ;
94+ expect ( nameLabel . textContent ) . toBe ( 'Name! (required) ' ) ;
95+ expect ( emailLabel . textContent ) . toBe ( 'Email! (required) ' ) ;
9096 expect ( messageLabel . textContent ) . toBe ( 'Description! (required)' ) ;
9197
9298 const nameInput = formComponent . el . querySelector ( '[name="name"]' ) as HTMLInputElement ;
@@ -110,6 +116,30 @@ describe('Form', () => {
110116 message . dispatchEvent ( new KeyboardEvent ( 'keyup' ) ) ;
111117 } ) ;
112118
119+ it ( 'submit is enabled if name is required and is not empty' , ( ) => {
120+ const formComponent = renderForm ( { isNameRequired : true } ) ;
121+
122+ const name = formComponent . el . querySelector ( '[name="name"]' ) as HTMLTextAreaElement ;
123+
124+ name . value = 'Foo Bar' ;
125+ name . dispatchEvent ( new KeyboardEvent ( 'keyup' ) ) ;
126+
127+ name . value = '' ;
128+ name . dispatchEvent ( new KeyboardEvent ( 'keyup' ) ) ;
129+ } ) ;
130+
131+ it ( 'submit is enabled if email is required and is not empty' , ( ) => {
132+ const formComponent = renderForm ( { isEmailRequired : true } ) ;
133+
134+ const email = formComponent . el . querySelector ( '[name="email"]' ) as HTMLTextAreaElement ;
135+
136+ email . value = 'foo@example.org' ;
137+ email . dispatchEvent ( new KeyboardEvent ( 'keyup' ) ) ;
138+
139+ email . value = '' ;
140+ email . dispatchEvent ( new KeyboardEvent ( 'keyup' ) ) ;
141+ } ) ;
142+
113143 it ( 'can show error' , ( ) => {
114144 const formComponent = renderForm ( ) ;
115145 const errorEl = formComponent . el . querySelector ( '.form__error-container' ) as HTMLDivElement ;
@@ -148,6 +178,8 @@ describe('Form', () => {
148178 it ( 'does not show name or email inputs for anonymous mode' , ( ) => {
149179 const onSubmit = jest . fn ( ) ;
150180 const formComponent = renderForm ( {
181+ isNameRequired : true ,
182+ isEmailRequired : true ,
151183 isAnonymous : true ,
152184 onSubmit,
153185 } ) ;
0 commit comments