From 2783d9e0a512d6e3be45bcf9a98b9f1a41b2c165 Mon Sep 17 00:00:00 2001 From: Sean Griffin Date: Tue, 6 Jun 2017 16:06:59 -0400 Subject: [PATCH 1/4] Port categories/slugs over to Diesel --- src/category.rs | 23 ++++++----------------- src/tests/category.rs | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 17 deletions(-) diff --git a/src/category.rs b/src/category.rs index 99674efbd57..c9b6a4d7139 100644 --- a/src/category.rs +++ b/src/category.rs @@ -309,29 +309,18 @@ pub fn show(req: &mut Request) -> CargoResult { /// Handles the `GET /category_slugs` route. pub fn slugs(req: &mut Request) -> CargoResult { - let conn = req.tx()?; - let stmt = conn.prepare( - "SELECT slug FROM categories \ - ORDER BY slug", - )?; - let rows = stmt.query(&[])?; + let conn = req.db_conn()?; + let slugs = categories::table + .select((categories::slug, categories::slug)) + .order(categories::slug) + .load(&*conn)?; - #[derive(Serialize)] + #[derive(Serialize, Queryable)] struct Slug { id: String, slug: String, } - let slugs: Vec = rows.iter() - .map(|r| { - let slug: String = r.get("slug"); - Slug { - id: slug.clone(), - slug: slug, - } - }) - .collect(); - #[derive(Serialize)] struct R { category_slugs: Vec, diff --git a/src/tests/category.rs b/src/tests/category.rs index 17d8cd92290..86d1fa3ed73 100644 --- a/src/tests/category.rs +++ b/src/tests/category.rs @@ -166,3 +166,41 @@ fn update_crate() { assert_eq!(cnt!(&mut req, "cat1::bar"), 1); assert_eq!(cnt!(&mut req, "category-2"), 0); } + +#[test] +fn category_slugs_returns_all_slugs_in_alphabetical_order() { + let (_b, app, middle) = ::app(); + { + let conn = app.diesel_database.get().unwrap(); + ::new_category("Foo", "foo").find_or_create(&conn).unwrap(); + ::new_category("Bar", "bar").find_or_create(&conn).unwrap(); + } + + let mut req = ::req(app, Method::Get, "/api/v1/category_slugs"); + + #[derive(RustcDecodable, Debug, PartialEq)] + struct Slug { + id: String, + slug: String, + } + + #[derive(RustcDecodable, Debug, PartialEq)] + struct Slugs { + category_slugs: Vec, + } + + let response = ::json(&mut ok_resp!(middle.call(&mut req))); + let expected_response = Slugs { + category_slugs: vec![ + Slug { + id: "bar".into(), + slug: "bar".into(), + }, + Slug { + id: "foo".into(), + slug: "foo".into(), + }, + ], + }; + assert_eq!(expected_response, response); +} From c8996efc47cad8631ce08442da49dbd5d0826a5f Mon Sep 17 00:00:00 2001 From: "Carol (Nichols || Goulding)" Date: Sat, 8 Jul 2017 10:43:48 -0400 Subject: [PATCH 2/4] Switch find_or_create to create_or_update --- src/tests/category.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tests/category.rs b/src/tests/category.rs index 86d1fa3ed73..751cc151cf4 100644 --- a/src/tests/category.rs +++ b/src/tests/category.rs @@ -172,8 +172,8 @@ fn category_slugs_returns_all_slugs_in_alphabetical_order() { let (_b, app, middle) = ::app(); { let conn = app.diesel_database.get().unwrap(); - ::new_category("Foo", "foo").find_or_create(&conn).unwrap(); - ::new_category("Bar", "bar").find_or_create(&conn).unwrap(); + ::new_category("Foo", "foo").create_or_update(&conn).unwrap(); + ::new_category("Bar", "bar").create_or_update(&conn).unwrap(); } let mut req = ::req(app, Method::Get, "/api/v1/category_slugs"); From e664df57a3d119e7b50cb714d439afcf5ea31e5e Mon Sep 17 00:00:00 2001 From: "Carol (Nichols || Goulding)" Date: Sat, 8 Jul 2017 10:44:41 -0400 Subject: [PATCH 3/4] Switch from rustc serialize to serde --- src/tests/category.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tests/category.rs b/src/tests/category.rs index 751cc151cf4..ff346f66e1f 100644 --- a/src/tests/category.rs +++ b/src/tests/category.rs @@ -178,13 +178,13 @@ fn category_slugs_returns_all_slugs_in_alphabetical_order() { let mut req = ::req(app, Method::Get, "/api/v1/category_slugs"); - #[derive(RustcDecodable, Debug, PartialEq)] + #[derive(Deserialize, Debug, PartialEq)] struct Slug { id: String, slug: String, } - #[derive(RustcDecodable, Debug, PartialEq)] + #[derive(Deserialize, Debug, PartialEq)] struct Slugs { category_slugs: Vec, } From 484a960c6e6607831aa93c776105bd97aa1eaaea Mon Sep 17 00:00:00 2001 From: Sean Griffin Date: Sat, 8 Jul 2017 11:07:16 -0400 Subject: [PATCH 4/4] Make rustfmt happy --- src/tests/category.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/tests/category.rs b/src/tests/category.rs index ff346f66e1f..377642fa5b2 100644 --- a/src/tests/category.rs +++ b/src/tests/category.rs @@ -172,8 +172,12 @@ fn category_slugs_returns_all_slugs_in_alphabetical_order() { let (_b, app, middle) = ::app(); { let conn = app.diesel_database.get().unwrap(); - ::new_category("Foo", "foo").create_or_update(&conn).unwrap(); - ::new_category("Bar", "bar").create_or_update(&conn).unwrap(); + ::new_category("Foo", "foo") + .create_or_update(&conn) + .unwrap(); + ::new_category("Bar", "bar") + .create_or_update(&conn) + .unwrap(); } let mut req = ::req(app, Method::Get, "/api/v1/category_slugs");