Skip to content

Commit 86d684b

Browse files
committed
test for when user clicks on link to confirm email
1 parent 3865594 commit 86d684b

File tree

1 file changed

+60
-1
lines changed

1 file changed

+60
-1
lines changed

src/tests/user.rs

Lines changed: 60 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use conduit::{Handler, Method};
44

55
use cargo_registry::token::ApiToken;
66
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};
88
use cargo_registry::version::EncodableVersion;
99

1010
use diesel::prelude::*;
@@ -512,6 +512,9 @@ fn test_this_user_cannot_change_that_user_email() {
512512

513513
}
514514

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
515518
#[test]
516519
fn test_insert_into_email_table() {
517520
#[derive(Deserialize)]
@@ -573,3 +576,59 @@ fn test_insert_into_email_table() {
573576
assert_eq!(r.user.email.unwrap(), "[email protected]");
574577
assert_eq!(r.user.login, "potato");
575578
}
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+
email: Some("[email protected]"),
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

Comments
 (0)