@@ -14,6 +14,8 @@ use diesel_async::{AsyncConnection, RunQueryDsl};
14
14
use http:: request:: Parts ;
15
15
use http:: StatusCode ;
16
16
17
+ const DOWNLOADS_PER_MONTH_LIMIT : u64 = 100 ;
18
+
17
19
pub async fn delete ( Path ( name) : Path < String > , parts : Parts , app : AppState ) -> AppResult < ( ) > {
18
20
let mut conn = app. db_write ( ) . await ?;
19
21
@@ -59,8 +61,6 @@ pub async fn delete(Path(name): Path<String>, parts: Parts, app: AppState) -> Ap
59
61
return Err ( custom ( StatusCode :: UNPROCESSABLE_ENTITY , msg) ) ;
60
62
}
61
63
62
- const DOWNLOADS_PER_MONTH_LIMIT : u64 = 100 ;
63
-
64
64
let age = Utc :: now ( ) . signed_duration_since ( created_at) ;
65
65
let age_days = age. num_days ( ) . to_u64 ( ) . unwrap_or ( u64:: MAX ) ;
66
66
let age_months = age_days. div_ceil ( 30 ) ;
@@ -146,7 +146,7 @@ mod tests {
146
146
let crate_id = adjust_creation_date ( & mut conn, "foo" , 71 ) . await ?;
147
147
148
148
// Update downloads count so that it wouldn't be deletable if it wasn't new
149
- adjust_downloads ( & mut conn, crate_id, 10_000 ) . await ?;
149
+ adjust_downloads ( & mut conn, crate_id, DOWNLOADS_PER_MONTH_LIMIT * 100 ) . await ?;
150
150
151
151
assert_crate_exists ( & anon, "foo" , true ) . await ;
152
152
assert ! ( upstream. crate_exists( "foo" ) ?) ;
@@ -181,7 +181,7 @@ mod tests {
181
181
182
182
publish_crate ( & user, "foo" ) . await ;
183
183
let crate_id = adjust_creation_date ( & mut conn, "foo" , 73 ) . await ?;
184
- adjust_downloads ( & mut conn, crate_id, 100 ) . await ?;
184
+ adjust_downloads ( & mut conn, crate_id, DOWNLOADS_PER_MONTH_LIMIT ) . await ?;
185
185
186
186
assert_crate_exists ( & anon, "foo" , true ) . await ;
187
187
assert ! ( upstream. crate_exists( "foo" ) ?) ;
@@ -322,7 +322,7 @@ mod tests {
322
322
323
323
publish_crate ( & user, "foo" ) . await ;
324
324
let crate_id = adjust_creation_date ( & mut conn, "foo" , 73 ) . await ?;
325
- adjust_downloads ( & mut conn, crate_id, 101 ) . await ?;
325
+ adjust_downloads ( & mut conn, crate_id, DOWNLOADS_PER_MONTH_LIMIT + 1 ) . await ?;
326
326
327
327
let response = delete_crate ( & user, "foo" ) . await ;
328
328
assert_eq ! ( response. status( ) , StatusCode :: UNPROCESSABLE_ENTITY ) ;
@@ -384,8 +384,10 @@ mod tests {
384
384
async fn adjust_downloads (
385
385
conn : & mut AsyncPgConnection ,
386
386
crate_id : i32 ,
387
- downloads : i64 ,
387
+ downloads : u64 ,
388
388
) -> QueryResult < ( ) > {
389
+ let downloads = downloads. to_i64 ( ) . unwrap_or ( i64:: MAX ) ;
390
+
389
391
diesel:: update ( crate_downloads:: table)
390
392
. filter ( crate_downloads:: crate_id. eq ( crate_id) )
391
393
. set ( crate_downloads:: downloads. eq ( downloads) )
0 commit comments