Skip to content

Commit 1fb0049

Browse files
Merge #1088
1088: Make users::show() case insensitive r=sgrif Closes #989.
2 parents 769c878 + d30fd7c commit 1fb0049

File tree

5 files changed

+38
-10
lines changed

5 files changed

+38
-10
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
DROP INDEX lower_gh_login;
2+
ALTER TABLE users DROP CONSTRAINT unique_gh_login;
3+
CREATE INDEX index_users_gh_login ON users (gh_login);
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
DROP INDEX IF EXISTS index_users_gh_login;
2+
ALTER TABLE users ADD CONSTRAINT unique_gh_login UNIQUE(gh_login);
3+
CREATE UNIQUE INDEX lower_gh_login ON users (lower(gh_login));

src/tests/krate.rs

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -489,7 +489,7 @@ fn new_wrong_token() {
489489
}
490490

491491
#[test]
492-
fn new_bad_names() {
492+
fn new_bd_names() {
493493
fn bad_name(name: &str) {
494494
println!("testing: `{}`", name);
495495
let (_b, app, middle) = ::app();
@@ -708,10 +708,11 @@ fn new_krate_wrong_user() {
708708
#[test]
709709
fn new_krate_bad_name() {
710710
let (_b, app, middle) = ::app();
711-
711+
let mut req = ::new_req(app.clone(), "foobar", "2.0.0");
712+
let user = ::sign_in(&mut req, &app);
712713
{
713714
let mut req = ::new_req(app.clone(), "snow☃", "2.0.0");
714-
::sign_in(&mut req, &app);
715+
::sign_in_as(&mut req, &user);
715716
let json = bad_resp!(middle.call(&mut req));
716717
assert!(
717718
json.errors[0]
@@ -723,7 +724,7 @@ fn new_krate_bad_name() {
723724
}
724725
{
725726
let mut req = ::new_req(app.clone(), "áccênts", "2.0.0");
726-
::sign_in(&mut req, &app);
727+
::sign_in_as(&mut req, &user);
727728
let json = bad_resp!(middle.call(&mut req));
728729
assert!(
729730
json.errors[0]
@@ -1467,35 +1468,37 @@ fn publish_after_yank_max_version() {
14671468
#[test]
14681469
fn bad_keywords() {
14691470
let (_b, app, middle) = ::app();
1471+
let mut req = ::new_req(app.clone(), "foobar", "1.0.0");
1472+
let user = ::sign_in(&mut req, &app);
14701473
{
14711474
let krate = ::krate("foo_bad_key");
14721475
let kws = vec!["super-long-keyword-name-oh-no".into()];
14731476
let mut req = ::new_req_with_keywords(app.clone(), krate, "1.0.0", kws);
1474-
::sign_in(&mut req, &app);
1477+
::sign_in_as(&mut req, &user);
14751478
let mut response = ok_resp!(middle.call(&mut req));
14761479
::json::<::Bad>(&mut response);
14771480
}
14781481
{
14791482
let krate = ::krate("foo_bad_key2");
14801483
let kws = vec!["?@?%".into()];
14811484
let mut req = ::new_req_with_keywords(app.clone(), krate, "1.0.0", kws);
1482-
::sign_in(&mut req, &app);
1485+
::sign_in_as(&mut req, &user);
14831486
let mut response = ok_resp!(middle.call(&mut req));
14841487
::json::<::Bad>(&mut response);
14851488
}
14861489
{
14871490
let krate = ::krate("foo_bad_key_3");
14881491
let kws = vec!["?@?%".into()];
14891492
let mut req = ::new_req_with_keywords(app.clone(), krate, "1.0.0", kws);
1490-
::sign_in(&mut req, &app);
1493+
::sign_in_as(&mut req, &user);
14911494
let mut response = ok_resp!(middle.call(&mut req));
14921495
::json::<::Bad>(&mut response);
14931496
}
14941497
{
14951498
let krate = ::krate("foo_bad_key4");
14961499
let kws = vec!["áccênts".into()];
14971500
let mut req = ::new_req_with_keywords(app.clone(), krate, "1.0.0", kws);
1498-
::sign_in(&mut req, &app);
1501+
::sign_in_as(&mut req, &user);
14991502
let mut response = ok_resp!(middle.call(&mut req));
15001503
::json::<::Bad>(&mut response);
15011504
}

src/tests/user.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,23 @@ fn show() {
8080
assert_eq!(Some("https://github.com/bar".into()), json.user.url);
8181
}
8282

83+
#[test]
84+
fn show_case_insensitive() {
85+
let (_b, app, middle) = ::app();
86+
{
87+
let conn = t!(app.diesel_database.get());
88+
89+
t!(
90+
NewUser::new(1, "foobar", Some("[email protected]"), None, None, "bar")
91+
.create_or_update(&conn)
92+
);
93+
}
94+
let mut req = ::req(app.clone(), Method::Get, "api/v1/users/fOObAr");
95+
let mut response = ok_resp!(middle.call(&mut req));
96+
let json: UserShowPublicResponse = ::json(&mut response);
97+
assert_eq!("foobar", json.user.login);
98+
}
99+
83100
#[test]
84101
fn crates_by_user_id() {
85102
let (_b, app, middle) = ::app();

src/user/mod.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -458,9 +458,11 @@ pub fn me(req: &mut Request) -> CargoResult<Response> {
458458
pub fn show(req: &mut Request) -> CargoResult<Response> {
459459
use self::users::dsl::{gh_login, users};
460460

461-
let name = &req.params()["user_id"];
461+
let name = &req.params()["user_id"].to_lowercase();
462462
let conn = req.db_conn()?;
463-
let user = users.filter(gh_login.eq(name)).first::<User>(&*conn)?;
463+
let user = users
464+
.filter(::lower(gh_login).eq(name))
465+
.first::<User>(&*conn)?;
464466

465467
#[derive(Serialize)]
466468
struct R {

0 commit comments

Comments
 (0)