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 @@ -388,29 +388,18 @@ pub fn show(req: &mut Request) -> CargoResult<Response> {
388
388
389
389
/// Handles the `GET /category_slugs` route.
390
390
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) ?;
397
396
398
- #[ derive( RustcEncodable ) ]
397
+ #[ derive( RustcEncodable , Queryable ) ]
399
398
struct Slug {
400
399
id : String ,
401
400
slug : String ,
402
401
}
403
402
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
-
414
403
#[ derive( RustcEncodable ) ]
415
404
struct R {
416
405
category_slugs : Vec < Slug > ,
Original file line number Diff line number Diff line change @@ -150,3 +150,41 @@ fn update_crate() {
150
150
assert_eq ! ( cnt( & mut req, "cat1::bar" ) , 1 ) ;
151
151
assert_eq ! ( cnt( & mut req, "category-2" ) , 0 ) ;
152
152
}
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
+ }
You can’t perform that action at this time.
0 commit comments