@@ -276,65 +276,70 @@ pub fn crate_details_handler(req: &mut Request) -> IronResult<Response> {
276276#[ cfg( test) ]
277277mod tests {
278278 use super :: * ;
279+ use crate :: test:: TestDatabase ;
279280 use failure:: Error ;
280281
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 ,
283292 package : & str ,
284293 version : & str ,
285- expected_last_successful_build : Option < String >
286- ) -> Result < bool , Error > {
294+ expected_last_successful_build : Option < & str > ,
295+ ) -> Result < ( ) , Error > {
287296
288- let details = CrateDetails :: new ( conn, package, version)
297+ let details = CrateDetails :: new ( & db . conn ( ) , package, version)
289298 . ok_or ( failure:: err_msg ( "could not fetch crate details" ) ) ?;
290299
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+ } ) ;
292319 }
293320
294321 #[ test]
295- fn test_last_successful_build ( ) {
322+ fn test_last_successful_build_when_all_releases_failed ( ) {
296323 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 ) ?;
315326
327+ assert_last_successful_build_equals ( & db, "foo" , "0.0.1" , None ) ?;
328+ assert_last_successful_build_equals ( & db, "foo" , "0.0.2" , None ) ?;
316329 Ok ( ( ) )
317330 } ) ;
318331 }
319332
320333 #[ test]
321- fn test_last_successful_build_but_none_succeeded ( ) {
334+ fn test_last_successful_build_when_an_intermittent_release_failed ( ) {
322335 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 ) ?;
337339
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 ) ?;
338343 Ok ( ( ) )
339344 } ) ;
340345 }
0 commit comments