@@ -142,7 +142,7 @@ describe('views/sign_up_password', () => {
142142 beforeEach ( ( ) => {
143143 sinon . stub ( view , 'signUp' ) . callsFake ( ( ) => Promise . resolve ( ) ) ;
144144 sinon . stub ( view , 'tooYoung' ) ;
145- sinon . spy ( view , 'displayError ' ) ;
145+ sinon . spy ( view , 'showValidationError ' ) ;
146146 } ) ;
147147
148148 describe ( 'password and vpassword do not match' , ( ) => {
@@ -155,10 +155,13 @@ describe('views/sign_up_password', () => {
155155 assert . fail ,
156156 ( ) => {
157157 assert . isFalse ( view . signUp . called ) ;
158- assert . isTrue ( view . displayError . calledOnce ) ;
159- const displayedError = view . displayError . args [ 0 ] [ 0 ] ;
158+ assert . isTrue ( view . showValidationError . calledOnce ) ;
159+ const displayedError = view . showValidationError . args [ 0 ] [ 1 ] ;
160160 assert . isTrue (
161- AuthErrors . is ( displayedError , 'PASSWORDS_DO_NOT_MATCH' )
161+ AuthErrors . is (
162+ displayedError ,
163+ AuthErrors . toError ( 'PASSWORDS_DO_NOT_MATCH' )
164+ )
162165 ) ;
163166 }
164167 ) ;
@@ -174,7 +177,7 @@ describe('views/sign_up_password', () => {
174177 return Promise . resolve ( view . validateAndSubmit ( ) ) . then ( ( ) => {
175178 assert . isTrue ( view . tooYoung . calledOnce ) ;
176179 assert . isFalse ( view . signUp . called ) ;
177- assert . isFalse ( view . displayError . called ) ;
180+ assert . isFalse ( view . showValidationError . called ) ;
178181 } ) ;
179182 } ) ;
180183 } ) ;
@@ -196,7 +199,7 @@ describe('views/sign_up_password', () => {
196199 'take-action-for-the-internet' ,
197200 ] ) ;
198201
199- assert . isFalse ( view . displayError . called ) ;
202+ assert . isFalse ( view . showValidationError . called ) ;
200203 } ) ;
201204 } ) ;
202205 } ) ;
@@ -216,6 +219,66 @@ describe('views/sign_up_password', () => {
216219 } ) ;
217220 } ) ;
218221
222+ describe ( '_checkPasswordsMatch' , ( ) => {
223+ beforeEach ( ( ) => {
224+ sinon . stub ( view , 'signUp' ) . callsFake ( ( ) => Promise . resolve ( ) ) ;
225+ sinon . stub ( view , 'tooYoung' ) ;
226+ sinon . spy ( view , 'showValidationError' ) ;
227+ } ) ;
228+
229+ describe ( 'password and vpassword do not match' , ( ) => {
230+ it ( 'displays an error' , ( ) => {
231+ view . $ ( Selectors . PASSWORD ) . val ( 'password123123' ) ;
232+ view . $ ( Selectors . VPASSWORD ) . val ( 'different_password' ) ;
233+ view . $ ( Selectors . AGE ) . val ( '21' ) ;
234+
235+ return Promise . resolve ( view . _checkPasswordsMatch ( ) ) . then ( ( ) => {
236+ assert . isTrue ( view . showValidationError . calledOnce ) ;
237+ const displayedError = view . showValidationError . args [ 0 ] [ 1 ] ;
238+ assert . isTrue (
239+ AuthErrors . is (
240+ displayedError ,
241+ AuthErrors . toError ( 'PASSWORDS_DO_NOT_MATCH' )
242+ )
243+ ) ;
244+ } ) ;
245+ } ) ;
246+ } ) ;
247+
248+ describe ( 'password and vpassword do match' , ( ) => {
249+ it ( 'displays an error' , ( ) => {
250+ view . $ ( Selectors . PASSWORD ) . val ( 'password123123' ) ;
251+ view . $ ( Selectors . VPASSWORD ) . val ( 'password123123' ) ;
252+ view . $ ( Selectors . AGE ) . val ( '21' ) ;
253+
254+ return Promise . resolve ( view . _checkPasswordsMatch ( ) ) . then ( ( ) => {
255+ assert . isFalse ( view . showValidationError . called ) ;
256+ } ) ;
257+ } ) ;
258+ } ) ;
259+ } ) ;
260+
261+ describe ( 'inline confirm password validation' , ( ) => {
262+ beforeEach ( ( ) => {
263+ sinon . stub ( view , 'signUp' ) . callsFake ( ( ) => Promise . resolve ( ) ) ;
264+ sinon . spy ( view , 'showValidationError' ) ;
265+ sinon . spy ( view , 'checkPasswordsMatchDebounce' ) ;
266+ } ) ;
267+
268+ describe ( 'check password and vpassword' , ( ) => {
269+ it ( 'calls debounced password check' , ( ) => {
270+ view . $ ( Selectors . PASSWORD ) . val ( 'password123123' ) ;
271+ view . $ ( Selectors . VPASSWORD ) . val ( 'different_password' ) ;
272+ view . $ ( Selectors . AGE ) . val ( '21' ) ;
273+
274+ return Promise . resolve ( view . $ ( Selectors . VPASSWORD ) . keyup ( ) ) . then ( ( ) => {
275+ assert . isFalse ( view . signUp . called ) ;
276+ assert . isTrue ( view . checkPasswordsMatchDebounce . calledOnce ) ;
277+ } ) ;
278+ } ) ;
279+ } ) ;
280+ } ) ;
281+
219282 describe ( 'useDifferentAccount' , ( ) => {
220283 it ( 'navigates to `/` with the account' , ( ) => {
221284 sinon . spy ( view , 'navigate' ) ;
0 commit comments