@@ -276,65 +276,70 @@ pub fn crate_details_handler(req: &mut Request) -> IronResult<Response> {
276
276
#[ cfg( test) ]
277
277
mod tests {
278
278
use super :: * ;
279
+ use crate :: test:: TestDatabase ;
279
280
use failure:: Error ;
280
281
281
- fn last_successful_build_equals (
282
- conn : & Connection ,
282
+ fn create_release ( db : & TestDatabase , package : & str , version : & str , successful : bool ) -> Result < i32 , Error > {
283
+ db. fake_release ( )
284
+ . name ( package)
285
+ . version ( version)
286
+ . build_result_successful ( successful)
287
+ . create ( )
288
+ }
289
+
290
+ fn assert_last_successful_build_equals (
291
+ db : & TestDatabase ,
283
292
package : & str ,
284
293
version : & str ,
285
- expected_last_successful_build : Option < String >
286
- ) -> Result < bool , Error > {
294
+ expected_last_successful_build : Option < & str > ,
295
+ ) -> Result < ( ) , Error > {
287
296
288
- let details = CrateDetails :: new ( conn, package, version)
297
+ let details = CrateDetails :: new ( & db . conn ( ) , package, version)
289
298
. ok_or ( failure:: err_msg ( "could not fetch crate details" ) ) ?;
290
299
291
- Ok ( details. last_successful_build == expected_last_successful_build)
300
+ assert_eq ! (
301
+ details. last_successful_build,
302
+ expected_last_successful_build. map( |s| s. to_string( ) ) ,
303
+ ) ;
304
+ Ok ( ( ) )
305
+ }
306
+
307
+ #[ test]
308
+ fn test_last_successful_build_when_last_release_failed ( ) {
309
+ crate :: test:: with_database ( |db| {
310
+ create_release ( & db, "foo" , "0.0.1" , true ) ?;
311
+ create_release ( & db, "foo" , "0.0.2" , true ) ?;
312
+ create_release ( & db, "foo" , "0.0.3" , false ) ?;
313
+
314
+ assert_last_successful_build_equals ( & db, "foo" , "0.0.1" , None ) ?;
315
+ assert_last_successful_build_equals ( & db, "foo" , "0.0.2" , None ) ?;
316
+ assert_last_successful_build_equals ( & db, "foo" , "0.0.3" , Some ( "0.0.2" ) ) ?;
317
+ Ok ( ( ) )
318
+ } ) ;
292
319
}
293
320
294
321
#[ test]
295
- fn test_last_successful_build ( ) {
322
+ fn test_last_successful_build_when_all_releases_failed ( ) {
296
323
crate :: test:: with_database ( |db| {
297
- // Create some releases in the database, of which the last release failed to build
298
- db. fake_release ( )
299
- . name ( "foo" )
300
- . version ( "0.0.1" )
301
- . create ( ) ?;
302
- db. fake_release ( )
303
- . name ( "foo" )
304
- . version ( "0.0.2" )
305
- . create ( ) ?;
306
- db. fake_release ( )
307
- . name ( "foo" )
308
- . version ( "0.0.3" )
309
- . build_result_successful ( false )
310
- . create ( ) ?;
311
-
312
- assert ! ( last_successful_build_equals( & db. conn( ) , "foo" , "0.0.1" , None ) ?) ;
313
- assert ! ( last_successful_build_equals( & db. conn( ) , "foo" , "0.0.2" , None ) ?) ;
314
- assert ! ( last_successful_build_equals( & db. conn( ) , "foo" , "0.0.3" , Some ( "0.0.2" . to_string( ) ) ) ?) ;
324
+ create_release ( & db, "foo" , "0.0.1" , false ) ?;
325
+ create_release ( & db, "foo" , "0.0.2" , false ) ?;
315
326
327
+ assert_last_successful_build_equals ( & db, "foo" , "0.0.1" , None ) ?;
328
+ assert_last_successful_build_equals ( & db, "foo" , "0.0.2" , None ) ?;
316
329
Ok ( ( ) )
317
330
} ) ;
318
331
}
319
332
320
333
#[ test]
321
- fn test_last_successful_build_but_none_succeeded ( ) {
334
+ fn test_last_successful_build_when_an_intermittent_release_failed ( ) {
322
335
crate :: test:: with_database ( |db| {
323
- // Create some releases in the database, of which all failed to build
324
- db. fake_release ( )
325
- . name ( "foo" )
326
- . version ( "0.0.1" )
327
- . build_result_successful ( false )
328
- . create ( ) ?;
329
- db. fake_release ( )
330
- . name ( "foo" )
331
- . version ( "0.0.2" )
332
- . build_result_successful ( false )
333
- . create ( ) ?;
334
-
335
- assert ! ( last_successful_build_equals( & db. conn( ) , "foo" , "0.0.1" , None ) ?) ;
336
- assert ! ( last_successful_build_equals( & db. conn( ) , "foo" , "0.0.2" , None ) ?) ;
336
+ create_release ( & db, "foo" , "0.0.1" , true ) ?;
337
+ create_release ( & db, "foo" , "0.0.2" , false ) ?;
338
+ create_release ( & db, "foo" , "0.0.3" , true ) ?;
337
339
340
+ assert_last_successful_build_equals ( & db, "foo" , "0.0.1" , None ) ?;
341
+ assert_last_successful_build_equals ( & db, "foo" , "0.0.2" , Some ( "0.0.3" ) ) ?;
342
+ assert_last_successful_build_equals ( & db, "foo" , "0.0.3" , None ) ?;
338
343
Ok ( ( ) )
339
344
} ) ;
340
345
}
0 commit comments