Skip to content

Commit c15c897

Browse files
committed
Port categories/slugs over to Diesel
1 parent b2ee89c commit c15c897

File tree

2 files changed

+44
-17
lines changed

2 files changed

+44
-17
lines changed

src/category.rs

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -309,29 +309,18 @@ pub fn show(req: &mut Request) -> CargoResult<Response> {
309309

310310
/// Handles the `GET /category_slugs` route.
311311
pub fn slugs(req: &mut Request) -> CargoResult<Response> {
312-
let conn = req.tx()?;
313-
let stmt = conn.prepare(
314-
"SELECT slug FROM categories \
315-
ORDER BY slug",
316-
)?;
317-
let rows = stmt.query(&[])?;
312+
let conn = req.db_conn()?;
313+
let slugs = categories::table
314+
.select((categories::slug, categories::slug))
315+
.order(categories::slug)
316+
.load(&*conn)?;
318317

319-
#[derive(RustcEncodable)]
318+
#[derive(RustcEncodable, Queryable)]
320319
struct Slug {
321320
id: String,
322321
slug: String,
323322
}
324323

325-
let slugs: Vec<Slug> = rows.iter()
326-
.map(|r| {
327-
let slug: String = r.get("slug");
328-
Slug {
329-
id: slug.clone(),
330-
slug: slug,
331-
}
332-
})
333-
.collect();
334-
335324
#[derive(RustcEncodable)]
336325
struct R {
337326
category_slugs: Vec<Slug>,

src/tests/category.rs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,3 +166,41 @@ fn update_crate() {
166166
assert_eq!(cnt!(&mut req, "cat1::bar"), 1);
167167
assert_eq!(cnt!(&mut req, "category-2"), 0);
168168
}
169+
170+
#[test]
171+
fn category_slugs_returns_all_slugs_in_alphabetical_order() {
172+
let (_b, app, middle) = ::app();
173+
{
174+
let conn = app.diesel_database.get().unwrap();
175+
::new_category("Foo", "foo").find_or_create(&conn).unwrap();
176+
::new_category("Bar", "bar").find_or_create(&conn).unwrap();
177+
}
178+
179+
let mut req = ::req(app, Method::Get, "/api/v1/category_slugs");
180+
181+
#[derive(RustcDecodable, Debug, PartialEq)]
182+
struct Slug {
183+
id: String,
184+
slug: String,
185+
}
186+
187+
#[derive(RustcDecodable, Debug, PartialEq)]
188+
struct Slugs {
189+
category_slugs: Vec<Slug>,
190+
}
191+
192+
let response = ::json(&mut ok_resp!(middle.call(&mut req)));
193+
let expected_response = Slugs {
194+
category_slugs: vec![
195+
Slug {
196+
id: "bar".into(),
197+
slug: "bar".into(),
198+
},
199+
Slug {
200+
id: "foo".into(),
201+
slug: "foo".into(),
202+
},
203+
],
204+
};
205+
assert_eq!(expected_response, response);
206+
}

0 commit comments

Comments
 (0)