Skip to content

Commit d589e87

Browse files
committed
changed query to get total downloads for user and tests
1 parent 5c58a00 commit d589e87

File tree

2 files changed

+43
-4
lines changed

2 files changed

+43
-4
lines changed

src/tests/user.rs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,3 +199,43 @@ fn following() {
199199

200200
bad_resp!(middle.call(req.with_query("page=0")));
201201
}
202+
203+
#[test]
204+
fn user_total_downloads() {
205+
use diesel::update;
206+
207+
let (_b, app, middle) = ::app();
208+
let u;
209+
{
210+
let conn = app.diesel_database.get().unwrap();
211+
212+
u = ::new_user("foo").create_or_update(&conn).unwrap();
213+
214+
let mut krate = ::new_crate("foo_krate1")
215+
.create_or_update(&conn, None, u.id).unwrap();
216+
krate.downloads = 10;
217+
update(&krate).set(&krate).execute(&*conn).unwrap();
218+
219+
220+
let mut krate2 = ::new_crate("foo_krate2")
221+
.create_or_update(&conn, None, u.id).unwrap();
222+
krate2.downloads = 20;
223+
update(&krate2).set(&krate2).execute(&*conn).unwrap();
224+
225+
let another_user = ::new_user("bar").create_or_update(&conn).unwrap();
226+
227+
let mut another_krate = ::new_crate("bar_krate1")
228+
.create_or_update(&conn, None, another_user.id).unwrap();
229+
another_krate.downloads = 2;
230+
update(&another_krate).set(&another_krate).execute(&*conn).unwrap();
231+
}
232+
233+
let mut req = ::req(app, Method::Get, &format!("/api/v1/users/{}/stats", u.id));
234+
let mut response = ok_resp!(middle.call(&mut req));
235+
236+
#[derive(RustcDecodable)]
237+
struct Response { total_downloads: i64 }
238+
let response: Response = ::json(&mut response);
239+
assert_eq!(response.total_downloads, 30);
240+
assert!(response.total_downloads != 32);
241+
}

src/user/mod.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -386,10 +386,9 @@ pub fn stats(req: &mut Request) -> CargoResult<Response> {
386386
let user_id = &req.params()["user_id"].parse::<i32>().ok().unwrap();
387387
let conn = req.db_conn()?;
388388

389-
let data = crate_downloads::table.filter(crate_downloads::crate_id.eq_any(
390-
crate_owners::table.select(crate_owners::crate_id)
391-
.filter(crate_owners::owner_id.eq(user_id).and(crate_owners::owner_kind.eq(OwnerKind::User as i32)))
392-
)).select(sum(crate_downloads::downloads)).first::<i64>(&*conn)?;
389+
let data = crate_owners::table.inner_join(crates::table)
390+
.filter(crate_owners::owner_id.eq(user_id).and(crate_owners::owner_kind.eq(OwnerKind::User as i32)))
391+
.select(sum(crates::downloads)).first::<i64>(&*conn)?;
393392

394393
#[derive(RustcEncodable)]
395394
struct R {

0 commit comments

Comments
 (0)