1
1
use crate :: builders:: { CrateBuilder , VersionBuilder } ;
2
- use crate :: util:: { RequestHelper , TestApp } ;
2
+ use crate :: util:: { MockAnonymousUser , RequestHelper , TestApp } ;
3
3
use cargo_registry:: views:: EncodableVersionDownload ;
4
4
use chrono:: { Duration , Utc } ;
5
5
use http:: StatusCode ;
@@ -9,6 +9,35 @@ struct Downloads {
9
9
version_downloads : Vec < EncodableVersionDownload > ,
10
10
}
11
11
12
+ fn persist_downloads_count ( app : & TestApp ) {
13
+ app. as_inner ( )
14
+ . downloads_counter
15
+ . persist_all_shards ( app. as_inner ( ) )
16
+ . expect ( "failed to persist downloads count" )
17
+ . log ( ) ;
18
+ }
19
+
20
+ #[ track_caller]
21
+ fn assert_dl_count (
22
+ anon : & MockAnonymousUser ,
23
+ name_and_version : & str ,
24
+ query : Option < & str > ,
25
+ count : i32 ,
26
+ ) {
27
+ let url = format ! ( "/api/v1/crates/{}/downloads" , name_and_version) ;
28
+ let downloads: Downloads = if let Some ( query) = query {
29
+ anon. get_with_query ( & url, query) . good ( )
30
+ } else {
31
+ anon. get ( & url) . good ( )
32
+ } ;
33
+ let total_downloads = downloads
34
+ . version_downloads
35
+ . iter ( )
36
+ . map ( |vd| vd. downloads )
37
+ . sum :: < i32 > ( ) ;
38
+ assert_eq ! ( total_downloads, count) ;
39
+ }
40
+
12
41
#[ test]
13
42
fn download ( ) {
14
43
let ( app, anon, user) = TestApp :: init ( ) . with_user ( ) ;
@@ -20,60 +49,37 @@ fn download() {
20
49
. expect_build ( conn) ;
21
50
} ) ;
22
51
23
- let assert_dl_count = |name_and_version : & str , query : Option < & str > , count : i32 | {
24
- let url = format ! ( "/api/v1/crates/{}/downloads" , name_and_version) ;
25
- let downloads: Downloads = if let Some ( query) = query {
26
- anon. get_with_query ( & url, query) . good ( )
27
- } else {
28
- anon. get ( & url) . good ( )
29
- } ;
30
- let total_downloads = downloads
31
- . version_downloads
32
- . iter ( )
33
- . map ( |vd| vd. downloads )
34
- . sum :: < i32 > ( ) ;
35
- assert_eq ! ( total_downloads, count) ;
36
- } ;
37
-
38
52
let download = |name_and_version : & str | {
39
53
let url = format ! ( "/api/v1/crates/{}/download" , name_and_version) ;
40
54
let response = anon. get :: < ( ) > ( & url) ;
41
55
assert_eq ! ( response. status( ) , StatusCode :: FOUND ) ;
42
56
// TODO: test the with_json code path
43
57
} ;
44
58
45
- let persist_downloads_count = || {
46
- app. as_inner ( )
47
- . downloads_counter
48
- . persist_all_shards ( app. as_inner ( ) )
49
- . expect ( "failed to persist downloads count" )
50
- . log ( ) ;
51
- } ;
52
-
53
59
download ( "foo_download/1.0.0" ) ;
54
60
// No downloads are counted until the counters are persisted
55
- assert_dl_count ( "foo_download/1.0.0" , None , 0 ) ;
56
- assert_dl_count ( "foo_download" , None , 0 ) ;
57
- persist_downloads_count ( ) ;
61
+ assert_dl_count ( & anon , "foo_download/1.0.0" , None , 0 ) ;
62
+ assert_dl_count ( & anon , "foo_download" , None , 0 ) ;
63
+ persist_downloads_count ( & app ) ;
58
64
// Now that the counters are persisted the download counts show up.
59
- assert_dl_count ( "foo_download/1.0.0" , None , 1 ) ;
60
- assert_dl_count ( "foo_download" , None , 1 ) ;
65
+ assert_dl_count ( & anon , "foo_download/1.0.0" , None , 1 ) ;
66
+ assert_dl_count ( & anon , "foo_download" , None , 1 ) ;
61
67
62
68
download ( "FOO_DOWNLOAD/1.0.0" ) ;
63
- persist_downloads_count ( ) ;
64
- assert_dl_count ( "FOO_DOWNLOAD/1.0.0" , None , 2 ) ;
65
- assert_dl_count ( "FOO_DOWNLOAD" , None , 2 ) ;
69
+ persist_downloads_count ( & app ) ;
70
+ assert_dl_count ( & anon , "FOO_DOWNLOAD/1.0.0" , None , 2 ) ;
71
+ assert_dl_count ( & anon , "FOO_DOWNLOAD" , None , 2 ) ;
66
72
67
73
let yesterday = ( Utc :: today ( ) + Duration :: days ( -1 ) ) . format ( "%F" ) ;
68
74
let query = format ! ( "before_date={}" , yesterday) ;
69
- assert_dl_count ( "FOO_DOWNLOAD/1.0.0" , Some ( & query) , 0 ) ;
75
+ assert_dl_count ( & anon , "FOO_DOWNLOAD/1.0.0" , Some ( & query) , 0 ) ;
70
76
// crate/downloads always returns the last 90 days and ignores date params
71
- assert_dl_count ( "FOO_DOWNLOAD" , Some ( & query) , 2 ) ;
77
+ assert_dl_count ( & anon , "FOO_DOWNLOAD" , Some ( & query) , 2 ) ;
72
78
73
79
let tomorrow = ( Utc :: today ( ) + Duration :: days ( 1 ) ) . format ( "%F" ) ;
74
80
let query = format ! ( "before_date={}" , tomorrow) ;
75
- assert_dl_count ( "FOO_DOWNLOAD/1.0.0" , Some ( & query) , 2 ) ;
76
- assert_dl_count ( "FOO_DOWNLOAD" , Some ( & query) , 2 ) ;
81
+ assert_dl_count ( & anon , "FOO_DOWNLOAD/1.0.0" , Some ( & query) , 2 ) ;
82
+ assert_dl_count ( & anon , "FOO_DOWNLOAD" , Some ( & query) , 2 ) ;
77
83
}
78
84
79
85
#[ test]
0 commit comments