@@ -4,7 +4,7 @@ use conduit::{Handler, Method};
4
4
5
5
use cargo_registry:: token:: ApiToken ;
6
6
use cargo_registry:: krate:: EncodableCrate ;
7
- use cargo_registry:: user:: { User , NewUser , EncodablePrivateUser , EncodablePublicUser } ;
7
+ use cargo_registry:: user:: { User , NewUser , EncodablePrivateUser , EncodablePublicUser , Email , Token } ;
8
8
use cargo_registry:: version:: EncodableVersion ;
9
9
10
10
use diesel:: prelude:: * ;
@@ -512,6 +512,9 @@ fn test_this_user_cannot_change_that_user_email() {
512
512
513
513
}
514
514
515
+ // Test inserting into the email & token tables
516
+ // TODO make test better/actually test what is being put in
517
+ // and taken out of the tables
515
518
#[ test]
516
519
fn test_insert_into_email_table ( ) {
517
520
#[ derive( Deserialize ) ]
@@ -573,3 +576,59 @@ fn test_insert_into_email_table() {
573
576
assert_eq ! ( r
. user
. email
. unwrap
( ) , "[email protected] " ) ;
574
577
assert_eq ! ( r. user. login, "potato" ) ;
575
578
}
579
+
580
+ /* Given a new user
581
+ */
582
+ #[ test]
583
+ fn test_confirm_user_email ( ) {
584
+ use cargo_registry:: schema:: { emails, tokens} ;
585
+
586
+ #[ derive( Deserialize ) ]
587
+ struct R {
588
+ user : EncodablePrivateUser ,
589
+ }
590
+
591
+ #[ derive( Deserialize ) ]
592
+ struct S {
593
+ ok : bool ,
594
+ }
595
+
596
+ let ( _b, app, middle) = :: app ( ) ;
597
+ let mut req = :: req ( app. clone ( ) , Method :: Get , "/me" ) ;
598
+ let user = {
599
+ let conn = app. diesel_database . get ( ) . unwrap ( ) ;
600
+ let user = NewUser {
601
+
602
+ ..:: new_user ( "potato" )
603
+ } ;
604
+
605
+ let user = user. create_or_update ( & conn) . unwrap ( ) ;
606
+ :: sign_in_as ( & mut req, & user) ;
607
+ user
608
+ } ;
609
+
610
+ let email_token = {
611
+ let conn = app. diesel_database . get ( ) . unwrap ( ) ;
612
+ let email_info = emails:: table. filter ( emails:: user_id. eq ( user. id ) )
613
+ . first :: < Email > ( & * conn)
614
+ . unwrap ( ) ;
615
+ let token_info = tokens:: table. filter ( tokens:: email_id. eq ( email_info. id ) )
616
+ . first :: < Token > ( & * conn)
617
+ . unwrap ( ) ;
618
+ token_info. token
619
+ } ;
620
+
621
+ let mut response = ok_resp ! (
622
+ middle. call(
623
+ req. with_path( & format!( "/api/v1/confirm/{}" , email_token) )
624
+ . with_method( Method :: Put )
625
+ )
626
+ ) ;
627
+ assert ! ( :: json:: <S >( & mut response) . ok) ;
628
+
629
+ let mut response = ok_resp ! ( middle. call( req. with_path( "/me" ) . with_method( Method :: Get ) ) ) ;
630
+ let r = :: json :: < R > ( & mut response) ;
631
+ assert_eq ! ( r
. user
. email
. unwrap
( ) , "[email protected] " ) ;
632
+ assert_eq ! ( r. user. login, "potato" ) ;
633
+ assert ! ( r. user. email_verified) ;
634
+ }
0 commit comments