@@ -130,7 +130,9 @@ fn delete_version_from_database(conn: &mut Client, name: &str, version: &str) ->
130
130
"DELETE FROM releases WHERE crate_id = $1 AND version = $2 RETURNING is_library" ,
131
131
& [ & crate_id, & version] ,
132
132
) ?
133
- . get ( "is_library" ) ;
133
+ . get :: < _ , Option < bool > > ( "is_library" )
134
+ . unwrap_or ( false ) ;
135
+
134
136
transaction. execute (
135
137
"UPDATE crates SET latest_version_id = (
136
138
SELECT id FROM releases WHERE release_time = (
@@ -174,7 +176,8 @@ fn delete_crate_from_database(conn: &mut Client, name: &str, crate_id: i32) -> R
174
176
) ?;
175
177
}
176
178
transaction. execute ( "DELETE FROM owner_rels WHERE cid = $1;" , & [ & crate_id] ) ?;
177
- let has_library = transaction
179
+
180
+ let has_library: bool = transaction
178
181
. query_one (
179
182
"SELECT
180
183
BOOL_OR(releases.is_library) AS has_library
@@ -183,7 +186,9 @@ fn delete_crate_from_database(conn: &mut Client, name: &str, crate_id: i32) -> R
183
186
" ,
184
187
& [ & crate_id] ,
185
188
) ?
186
- . get ( "has_library" ) ;
189
+ . get :: < _ , Option < bool > > ( "has_library" )
190
+ . unwrap_or ( false ) ;
191
+
187
192
transaction. execute ( "DELETE FROM releases WHERE crate_id = $1;" , & [ & crate_id] ) ?;
188
193
transaction. execute ( "DELETE FROM crates WHERE id = $1;" , & [ & crate_id] ) ?;
189
194
@@ -197,7 +202,7 @@ fn delete_crate_from_database(conn: &mut Client, name: &str, crate_id: i32) -> R
197
202
mod tests {
198
203
use super :: * ;
199
204
use crate :: registry_api:: { CrateOwner , OwnerKind } ;
200
- use crate :: test:: { assert_success, wrapper} ;
205
+ use crate :: test:: { assert_success, fake_release_that_failed_before_build , wrapper} ;
201
206
use test_case:: test_case;
202
207
203
208
fn crate_exists ( conn : & mut Client , name : & str ) -> Result < bool > {
@@ -420,4 +425,49 @@ mod tests {
420
425
Ok ( ( ) )
421
426
} )
422
427
}
428
+
429
+ #[ test]
430
+ fn test_delete_incomplete_version ( ) {
431
+ wrapper ( |env| {
432
+ let db = env. db ( ) ;
433
+
434
+ let ( release_id, _) = env
435
+ . runtime ( )
436
+ . block_on ( async {
437
+ let mut conn = db. async_conn ( ) . await ;
438
+ fake_release_that_failed_before_build ( & mut conn, "a" , "1.0.0" , "some-error" )
439
+ . await
440
+ } )
441
+ . unwrap ( ) ;
442
+
443
+ delete_version ( & mut db. conn ( ) , & env. storage ( ) , & env. config ( ) , "a" , "1.0.0" ) ?;
444
+
445
+ assert ! ( !release_exists( & mut db. conn( ) , release_id) ?) ;
446
+
447
+ Ok ( ( ) )
448
+ } )
449
+ }
450
+
451
+ #[ test]
452
+ fn test_delete_incomplete_crate ( ) {
453
+ wrapper ( |env| {
454
+ let db = env. db ( ) ;
455
+
456
+ let ( release_id, _) = env
457
+ . runtime ( )
458
+ . block_on ( async {
459
+ let mut conn = db. async_conn ( ) . await ;
460
+ fake_release_that_failed_before_build ( & mut conn, "a" , "1.0.0" , "some-error" )
461
+ . await
462
+ } )
463
+ . unwrap ( ) ;
464
+
465
+ delete_crate ( & mut db. conn ( ) , & env. storage ( ) , & env. config ( ) , "a" ) ?;
466
+
467
+ assert ! ( !crate_exists( & mut db. conn( ) , "a" ) ?) ;
468
+ assert ! ( !release_exists( & mut db. conn( ) , release_id) ?) ;
469
+
470
+ Ok ( ( ) )
471
+ } )
472
+ }
423
473
}
0 commit comments