File tree Expand file tree Collapse file tree 2 files changed +44
-17
lines changed Expand file tree Collapse file tree 2 files changed +44
-17
lines changed Original file line number Diff line number Diff line change @@ -309,29 +309,18 @@ pub fn show(req: &mut Request) -> CargoResult<Response> {
309
309
310
310
/// Handles the `GET /category_slugs` route.
311
311
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) ?;
318
317
319
- #[ derive( RustcEncodable ) ]
318
+ #[ derive( RustcEncodable , Queryable ) ]
320
319
struct Slug {
321
320
id : String ,
322
321
slug : String ,
323
322
}
324
323
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
-
335
324
#[ derive( RustcEncodable ) ]
336
325
struct R {
337
326
category_slugs : Vec < Slug > ,
Original file line number Diff line number Diff line change @@ -166,3 +166,41 @@ fn update_crate() {
166
166
assert_eq ! ( cnt!( & mut req, "cat1::bar" ) , 1 ) ;
167
167
assert_eq ! ( cnt!( & mut req, "category-2" ) , 0 ) ;
168
168
}
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
+ }
You can’t perform that action at this time.
0 commit comments