File tree Expand file tree Collapse file tree 2 files changed +48
-17
lines changed Expand file tree Collapse file tree 2 files changed +48
-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( Serialize ) ]
318
+ #[ derive( Serialize , 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( Serialize ) ]
336
325
struct R {
337
326
category_slugs : Vec < Slug > ,
Original file line number Diff line number Diff line change @@ -166,3 +166,45 @@ 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" )
176
+ . create_or_update ( & conn)
177
+ . unwrap ( ) ;
178
+ :: new_category ( "Bar" , "bar" )
179
+ . create_or_update ( & conn)
180
+ . unwrap ( ) ;
181
+ }
182
+
183
+ let mut req = :: req ( app, Method :: Get , "/api/v1/category_slugs" ) ;
184
+
185
+ #[ derive( Deserialize , Debug , PartialEq ) ]
186
+ struct Slug {
187
+ id : String ,
188
+ slug : String ,
189
+ }
190
+
191
+ #[ derive( Deserialize , Debug , PartialEq ) ]
192
+ struct Slugs {
193
+ category_slugs : Vec < Slug > ,
194
+ }
195
+
196
+ let response = :: json ( & mut ok_resp ! ( middle. call( & mut req) ) ) ;
197
+ let expected_response = Slugs {
198
+ category_slugs : vec ! [
199
+ Slug {
200
+ id: "bar" . into( ) ,
201
+ slug: "bar" . into( ) ,
202
+ } ,
203
+ Slug {
204
+ id: "foo" . into( ) ,
205
+ slug: "foo" . into( ) ,
206
+ } ,
207
+ ] ,
208
+ } ;
209
+ assert_eq ! ( expected_response, response) ;
210
+ }
You can’t perform that action at this time.
0 commit comments