16
16
import pytest
17
17
import wtforms
18
18
19
+ from warehouse import recaptcha
19
20
from warehouse .accounts import forms
20
21
from warehouse .accounts .interfaces import (
21
22
BurnedRecoveryCode ,
@@ -344,19 +345,26 @@ def test_validate_password_notok_ip_banned(self, db_session):
344
345
class TestRegistrationForm :
345
346
def test_create (self ):
346
347
user_service = pretend .stub ()
348
+ recaptcha_service = pretend .stub (enabled = True )
347
349
breach_service = pretend .stub ()
348
350
349
351
form = forms .RegistrationForm (
350
- data = {}, user_service = user_service , breach_service = breach_service
352
+ data = {},
353
+ user_service = user_service ,
354
+ recaptcha_service = recaptcha_service ,
355
+ breach_service = breach_service ,
351
356
)
357
+
352
358
assert form .user_service is user_service
359
+ assert form .recaptcha_service is recaptcha_service
353
360
354
361
def test_password_confirm_required_error (self ):
355
362
form = forms .RegistrationForm (
356
363
data = {"password_confirm" : "" },
357
364
user_service = pretend .stub (
358
365
find_userid_by_email = pretend .call_recorder (lambda _ : pretend .stub ())
359
366
),
367
+ recaptcha_service = pretend .stub (enabled = True ),
360
368
breach_service = pretend .stub (check_password = lambda pw : False ),
361
369
)
362
370
@@ -370,6 +378,7 @@ def test_passwords_mismatch_error(self, pyramid_config):
370
378
form = forms .RegistrationForm (
371
379
data = {"new_password" : "password" , "password_confirm" : "mismatch" },
372
380
user_service = user_service ,
381
+ recaptcha_service = pretend .stub (enabled = True ),
373
382
breach_service = pretend .stub (check_password = lambda pw , tags = None : False ),
374
383
)
375
384
@@ -389,6 +398,7 @@ def test_passwords_match_success(self):
389
398
"password_confirm" : "MyStr0ng!shPassword" ,
390
399
},
391
400
user_service = user_service ,
401
+ recaptcha_service = pretend .stub (enabled = True ),
392
402
breach_service = pretend .stub (check_password = lambda pw , tags = None : False ),
393
403
)
394
404
@@ -402,6 +412,7 @@ def test_email_required_error(self):
402
412
user_service = pretend .stub (
403
413
find_userid_by_email = pretend .call_recorder (lambda _ : pretend .stub ())
404
414
),
415
+ recaptcha_service = pretend .stub (enabled = True ),
405
416
breach_service = pretend .stub (check_password = lambda pw , tags = None : False ),
406
417
)
407
418
@@ -415,6 +426,7 @@ def test_invalid_email_error(self, pyramid_config, email):
415
426
user_service = pretend .stub (
416
427
find_userid_by_email = pretend .call_recorder (lambda _ : None )
417
428
),
429
+ recaptcha_service = pretend .stub (enabled = True ),
418
430
breach_service = pretend .stub (check_password = lambda pw , tags = None : False ),
419
431
)
420
432
@@ -429,6 +441,7 @@ def test_exotic_email_success(self):
429
441
user_service = pretend .stub (
430
442
find_userid_by_email = pretend .call_recorder (lambda _ : None )
431
443
),
444
+ recaptcha_service = pretend .stub (enabled = True ),
432
445
breach_service = pretend .stub (check_password = lambda pw , tags = None : False ),
433
446
)
434
447
@@ -441,6 +454,7 @@ def test_email_exists_error(self, pyramid_config):
441
454
user_service = pretend .stub (
442
455
find_userid_by_email = pretend .call_recorder (lambda _ : pretend .stub ())
443
456
),
457
+ recaptcha_service = pretend .stub (enabled = True ),
444
458
breach_service = pretend .stub (check_password = lambda pw , tags = None : False ),
445
459
)
446
460
@@ -457,6 +471,7 @@ def test_prohibited_email_error(self, pyramid_config):
457
471
user_service = pretend .stub (
458
472
find_userid_by_email = pretend .call_recorder (lambda _ : None )
459
473
),
474
+ recaptcha_service = pretend .stub (enabled = True ),
460
475
breach_service = pretend .stub (check_password = lambda pw , tags = None : False ),
461
476
)
462
477
@@ -467,13 +482,58 @@ def test_prohibited_email_error(self, pyramid_config):
467
482
"different email."
468
483
)
469
484
485
+ def test_recaptcha_disabled (self ):
486
+ form = forms .RegistrationForm (
487
+ data = {"g_recpatcha_response" : "" },
488
+ user_service = pretend .stub (),
489
+ recaptcha_service = pretend .stub (
490
+ enabled = False ,
491
+ verify_response = pretend .call_recorder (lambda _ : None ),
492
+ ),
493
+ breach_service = pretend .stub (check_password = lambda pw , tags = None : False ),
494
+ )
495
+ assert not form .validate ()
496
+ # there shouldn't be any errors for the recaptcha field if it's
497
+ # disabled
498
+ assert not form .g_recaptcha_response .errors
499
+
500
+ def test_recaptcha_required_error (self ):
501
+ form = forms .RegistrationForm (
502
+ data = {"g_recaptcha_response" : "" },
503
+ user_service = pretend .stub (),
504
+ recaptcha_service = pretend .stub (
505
+ enabled = True ,
506
+ verify_response = pretend .call_recorder (lambda _ : None ),
507
+ ),
508
+ breach_service = pretend .stub (check_password = lambda pw , tags = None : False ),
509
+ )
510
+ assert not form .validate ()
511
+ assert form .g_recaptcha_response .errors .pop () == "Recaptcha error."
512
+
513
+ def test_recaptcha_error (self ):
514
+ form = forms .RegistrationForm (
515
+ data = {"g_recaptcha_response" : "asd" },
516
+ user_service = pretend .stub (),
517
+ recaptcha_service = pretend .stub (
518
+ verify_response = pretend .raiser (recaptcha .RecaptchaError ),
519
+ enabled = True ,
520
+ ),
521
+ breach_service = pretend .stub (check_password = lambda pw , tags = None : False ),
522
+ )
523
+ assert not form .validate ()
524
+ assert form .g_recaptcha_response .errors .pop () == "Recaptcha error."
525
+
470
526
def test_username_exists (self , pyramid_config ):
471
527
form = forms .RegistrationForm (
472
528
data = {"username" : "foo" },
473
529
user_service = pretend .stub (
474
530
find_userid = pretend .call_recorder (lambda name : 1 ),
475
531
username_is_prohibited = lambda a : False ,
476
532
),
533
+ recaptcha_service = pretend .stub (
534
+ enabled = False ,
535
+ verify_response = pretend .call_recorder (lambda _ : None ),
536
+ ),
477
537
breach_service = pretend .stub (check_password = lambda pw , tags = None : False ),
478
538
)
479
539
assert not form .validate ()
@@ -489,6 +549,10 @@ def test_username_prohibted(self, pyramid_config):
489
549
user_service = pretend .stub (
490
550
username_is_prohibited = lambda a : True ,
491
551
),
552
+ recaptcha_service = pretend .stub (
553
+ enabled = False ,
554
+ verify_response = pretend .call_recorder (lambda _ : None ),
555
+ ),
492
556
breach_service = pretend .stub (check_password = lambda pw , tags = None : False ),
493
557
)
494
558
assert not form .validate ()
@@ -506,6 +570,10 @@ def test_username_is_valid(self, username, pyramid_config):
506
570
find_userid = pretend .call_recorder (lambda _ : None ),
507
571
username_is_prohibited = lambda a : False ,
508
572
),
573
+ recaptcha_service = pretend .stub (
574
+ enabled = False ,
575
+ verify_response = pretend .call_recorder (lambda _ : None ),
576
+ ),
509
577
breach_service = pretend .stub (check_password = lambda pw , tags = None : False ),
510
578
)
511
579
assert not form .validate ()
@@ -527,6 +595,10 @@ def test_password_strength(self):
527
595
form = forms .RegistrationForm (
528
596
data = {"new_password" : pwd , "password_confirm" : pwd },
529
597
user_service = pretend .stub (),
598
+ recaptcha_service = pretend .stub (
599
+ enabled = False ,
600
+ verify_response = pretend .call_recorder (lambda _ : None ),
601
+ ),
530
602
breach_service = pretend .stub (check_password = lambda pw , tags = None : False ),
531
603
)
532
604
form .validate ()
@@ -538,6 +610,10 @@ def test_password_breached(self):
538
610
user_service = pretend .stub (
539
611
find_userid = pretend .call_recorder (lambda _ : None )
540
612
),
613
+ recaptcha_service = pretend .stub (
614
+ enabled = False ,
615
+ verify_response = pretend .call_recorder (lambda _ : None ),
616
+ ),
541
617
breach_service = pretend .stub (
542
618
check_password = lambda pw , tags = None : True ,
543
619
failure_message = (
@@ -558,6 +634,10 @@ def test_name_too_long(self, pyramid_config):
558
634
user_service = pretend .stub (
559
635
find_userid = pretend .call_recorder (lambda _ : None )
560
636
),
637
+ recaptcha_service = pretend .stub (
638
+ enabled = False ,
639
+ verify_response = pretend .call_recorder (lambda _ : None ),
640
+ ),
561
641
breach_service = pretend .stub (check_password = lambda pw , tags = None : True ),
562
642
)
563
643
assert not form .validate ()
0 commit comments