@@ -5,12 +5,13 @@ use crate::{
5
5
use cargo_registry:: {
6
6
models:: Category ,
7
7
schema:: crates,
8
- views:: { EncodableDependency , EncodableVersion , EncodableVersionDownload } ,
8
+ views:: { EncodableDependency , EncodableVersion } ,
9
9
} ;
10
10
11
11
use conduit:: StatusCode ;
12
12
use diesel:: { dsl:: * , prelude:: * , update} ;
13
13
14
+ mod downloads;
14
15
mod publish;
15
16
mod summary;
16
17
mod versions;
@@ -25,10 +26,6 @@ struct RevDeps {
25
26
versions : Vec < EncodableVersion > ,
26
27
meta : CrateMeta ,
27
28
}
28
- #[ derive( Deserialize ) ]
29
- struct Downloads {
30
- version_downloads : Vec < EncodableVersionDownload > ,
31
- }
32
29
33
30
impl crate :: util:: MockAnonymousUser {
34
31
fn reverse_dependencies ( & self , krate_name : & str ) -> RevDeps {
@@ -640,89 +637,6 @@ fn yanked_versions_are_not_considered_for_max_version() {
640
637
assert_eq ! ( json. crates[ 0 ] . max_version, "1.0.0" ) ;
641
638
}
642
639
643
- #[ test]
644
- fn download ( ) {
645
- use chrono:: { Duration , Utc } ;
646
- let ( app, anon, user) = TestApp :: init ( ) . with_user ( ) ;
647
- let user = user. as_model ( ) ;
648
-
649
- app. db ( |conn| {
650
- CrateBuilder :: new ( "foo_download" , user. id )
651
- . version ( VersionBuilder :: new ( "1.0.0" ) )
652
- . expect_build ( conn) ;
653
- } ) ;
654
-
655
- let assert_dl_count = |name_and_version : & str , query : Option < & str > , count : i32 | {
656
- let url = format ! ( "/api/v1/crates/{}/downloads" , name_and_version) ;
657
- let downloads: Downloads = if let Some ( query) = query {
658
- anon. get_with_query ( & url, query) . good ( )
659
- } else {
660
- anon. get ( & url) . good ( )
661
- } ;
662
- let total_downloads = downloads
663
- . version_downloads
664
- . iter ( )
665
- . map ( |vd| vd. downloads )
666
- . sum :: < i32 > ( ) ;
667
- assert_eq ! ( total_downloads, count) ;
668
- } ;
669
-
670
- let download = |name_and_version : & str | {
671
- let url = format ! ( "/api/v1/crates/{}/download" , name_and_version) ;
672
- anon. get :: < ( ) > ( & url) . assert_status ( StatusCode :: FOUND ) ;
673
- // TODO: test the with_json code path
674
- } ;
675
-
676
- download ( "foo_download/1.0.0" ) ;
677
- assert_dl_count ( "foo_download/1.0.0" , None , 1 ) ;
678
- assert_dl_count ( "foo_download" , None , 1 ) ;
679
-
680
- download ( "FOO_DOWNLOAD/1.0.0" ) ;
681
- assert_dl_count ( "FOO_DOWNLOAD/1.0.0" , None , 2 ) ;
682
- assert_dl_count ( "FOO_DOWNLOAD" , None , 2 ) ;
683
-
684
- let yesterday = ( Utc :: today ( ) + Duration :: days ( -1 ) ) . format ( "%F" ) ;
685
- let query = format ! ( "before_date={}" , yesterday) ;
686
- assert_dl_count ( "FOO_DOWNLOAD/1.0.0" , Some ( & query) , 0 ) ;
687
- // crate/downloads always returns the last 90 days and ignores date params
688
- assert_dl_count ( "FOO_DOWNLOAD" , Some ( & query) , 2 ) ;
689
-
690
- let tomorrow = ( Utc :: today ( ) + Duration :: days ( 1 ) ) . format ( "%F" ) ;
691
- let query = format ! ( "before_date={}" , tomorrow) ;
692
- assert_dl_count ( "FOO_DOWNLOAD/1.0.0" , Some ( & query) , 2 ) ;
693
- assert_dl_count ( "FOO_DOWNLOAD" , Some ( & query) , 2 ) ;
694
- }
695
-
696
- #[ test]
697
- fn download_nonexistent_version_of_existing_crate_404s ( ) {
698
- let ( app, anon, user) = TestApp :: init ( ) . with_user ( ) ;
699
- let user = user. as_model ( ) ;
700
-
701
- app. db ( |conn| {
702
- CrateBuilder :: new ( "foo_bad" , user. id ) . expect_build ( conn) ;
703
- } ) ;
704
-
705
- anon. get ( "/api/v1/crates/foo_bad/0.1.0/download" )
706
- . assert_not_found ( ) ;
707
- }
708
-
709
- #[ test]
710
- fn download_noncanonical_crate_name ( ) {
711
- let ( app, anon, user) = TestApp :: init ( ) . with_user ( ) ;
712
- let user = user. as_model ( ) ;
713
-
714
- app. db ( |conn| {
715
- CrateBuilder :: new ( "foo_download" , user. id )
716
- . version ( VersionBuilder :: new ( "1.0.0" ) )
717
- . expect_build ( conn) ;
718
- } ) ;
719
-
720
- // Request download for "foo-download" with a dash instead of an underscore,
721
- // and assert that the correct download link is returned.
722
- anon. get :: < ( ) > ( "/api/v1/crates/foo-download/1.0.0/download" )
723
- . assert_redirect_ends_with ( "/crates/foo_download/foo_download-1.0.0.crate" ) ;
724
- }
725
-
726
640
#[ test]
727
641
fn dependencies ( ) {
728
642
let ( app, anon, user) = TestApp :: init ( ) . with_user ( ) ;
0 commit comments