Skip to content

Commit b87d7b2

Browse files
committed
Port categories/slugs over to Diesel
1 parent 1fb6a8f commit b87d7b2

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
@@ -388,29 +388,18 @@ pub fn show(req: &mut Request) -> CargoResult<Response> {
388388

389389
/// Handles the `GET /category_slugs` route.
390390
pub fn slugs(req: &mut Request) -> CargoResult<Response> {
391-
let conn = req.tx()?;
392-
let stmt = conn.prepare(
393-
"SELECT slug FROM categories \
394-
ORDER BY slug",
395-
)?;
396-
let rows = stmt.query(&[])?;
391+
let conn = req.db_conn()?;
392+
let slugs = categories::table
393+
.select((categories::slug, categories::slug))
394+
.order(categories::slug)
395+
.load(&*conn)?;
397396

398-
#[derive(RustcEncodable)]
397+
#[derive(RustcEncodable, Queryable)]
399398
struct Slug {
400399
id: String,
401400
slug: String,
402401
}
403402

404-
let slugs: Vec<Slug> = rows.iter()
405-
.map(|r| {
406-
let slug: String = r.get("slug");
407-
Slug {
408-
id: slug.clone(),
409-
slug: slug,
410-
}
411-
})
412-
.collect();
413-
414403
#[derive(RustcEncodable)]
415404
struct R {
416405
category_slugs: Vec<Slug>,

src/tests/category.rs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,3 +150,41 @@ fn update_crate() {
150150
assert_eq!(cnt(&mut req, "cat1::bar"), 1);
151151
assert_eq!(cnt(&mut req, "category-2"), 0);
152152
}
153+
154+
#[test]
155+
fn category_slugs_returns_all_slugs_in_alphabetical_order() {
156+
let (_b, app, middle) = ::app();
157+
{
158+
let conn = app.diesel_database.get().unwrap();
159+
::new_category("Foo", "foo").find_or_create(&conn).unwrap();
160+
::new_category("Bar", "bar").find_or_create(&conn).unwrap();
161+
}
162+
163+
let mut req = ::req(app, Method::Get, "/api/v1/category_slugs");
164+
165+
#[derive(RustcDecodable, Debug, PartialEq)]
166+
struct Slug {
167+
id: String,
168+
slug: String,
169+
}
170+
171+
#[derive(RustcDecodable, Debug, PartialEq)]
172+
struct Slugs {
173+
category_slugs: Vec<Slug>,
174+
}
175+
176+
let response = ::json(&mut ok_resp!(middle.call(&mut req)));
177+
let expected_response = Slugs {
178+
category_slugs: vec![
179+
Slug {
180+
id: "bar".into(),
181+
slug: "bar".into(),
182+
},
183+
Slug {
184+
id: "foo".into(),
185+
slug: "foo".into(),
186+
},
187+
],
188+
};
189+
assert_eq!(expected_response, response);
190+
}

0 commit comments

Comments
 (0)