diff --git a/src/krate.rs b/src/krate.rs index 87c0db5ad60..063212edb10 100644 --- a/src/krate.rs +++ b/src/krate.rs @@ -1406,9 +1406,10 @@ pub fn following(req: &mut Request) -> CargoResult { // this information already, but ember is definitely requesting it pub fn versions(req: &mut Request) -> CargoResult { let crate_name = &req.params()["crate_id"]; - let tx = req.tx()?; - let krate = Crate::find_by_name(tx, crate_name)?; - let versions = krate.versions(tx)?; + let conn = req.db_conn()?; + let krate = Crate::by_name(crate_name).first::(&*conn)?; + let mut versions = Version::belonging_to(&krate).load::(&*conn)?; + versions.sort_by(|a, b| b.num.cmp(&a.num)); let versions = versions .into_iter() .map(|v| v.encodable(crate_name)) diff --git a/src/tests/krate.rs b/src/tests/krate.rs index d84589b478c..83fa3600d0b 100644 --- a/src/tests/krate.rs +++ b/src/tests/krate.rs @@ -410,16 +410,20 @@ fn show() { fn versions() { let (_b, app, middle) = ::app(); - let v100 = semver::Version::parse("1.0.0").unwrap(); - let v050 = semver::Version::parse("0.5.0").unwrap(); - let v051 = semver::Version::parse("0.5.1").unwrap(); - - let mut req = ::req(app, Method::Get, "/api/v1/crates/foo_versions/versions"); - ::mock_user(&mut req, ::user("foo")); - - ::mock_crate_vers(&mut req, ::krate("foo_versions"), &v051); - ::mock_crate_vers(&mut req, ::krate("foo_versions"), &v100); - ::mock_crate_vers(&mut req, ::krate("foo_versions"), &v050); + let mut req = ::req( + app.clone(), + Method::Get, + "/api/v1/crates/foo_versions/versions", + ); + { + let conn = app.diesel_database.get().unwrap(); + let u = ::new_user("foo").create_or_update(&conn).unwrap(); + ::CrateBuilder::new("foo_versions", u.id) + .version("0.5.1") + .version("1.0.0") + .version("0.5.0") + .expect_build(&conn); + } let mut response = ok_resp!(middle.call(&mut req)); let json: VersionsList = ::json(&mut response);