1
1
use crate :: {
2
2
builders:: { CrateBuilder , VersionBuilder } ,
3
- new_category, new_user, CrateMeta , RequestHelper , TestApp ,
4
- } ;
5
- use cargo_registry:: {
6
- models:: Category ,
7
- schema:: crates,
8
- views:: { EncodableDependency , EncodableVersion } ,
3
+ new_category, new_user, RequestHelper , TestApp ,
9
4
} ;
5
+ use cargo_registry:: { models:: Category , schema:: crates} ;
10
6
11
7
use conduit:: StatusCode ;
12
8
use diesel:: { dsl:: * , prelude:: * , update} ;
@@ -15,24 +11,11 @@ mod dependencies;
15
11
mod downloads;
16
12
mod following;
17
13
mod publish;
14
+ mod reverse_dependencies;
18
15
mod summary;
19
16
mod versions;
20
17
mod yanking;
21
18
22
- #[ derive( Deserialize ) ]
23
- struct RevDeps {
24
- dependencies : Vec < EncodableDependency > ,
25
- versions : Vec < EncodableVersion > ,
26
- meta : CrateMeta ,
27
- }
28
-
29
- impl crate :: util:: MockAnonymousUser {
30
- fn reverse_dependencies ( & self , krate_name : & str ) -> RevDeps {
31
- let url = format ! ( "/api/v1/crates/{}/reverse_dependencies" , krate_name) ;
32
- self . get ( & url) . good ( )
33
- }
34
- }
35
-
36
19
#[ test]
37
20
fn index ( ) {
38
21
let ( app, anon) = TestApp :: init ( ) . empty ( ) ;
@@ -600,203 +583,6 @@ fn yanked_versions_are_not_considered_for_max_version() {
600
583
assert_eq ! ( json. crates[ 0 ] . max_version, "1.0.0" ) ;
601
584
}
602
585
603
- #[ test]
604
- fn reverse_dependencies ( ) {
605
- let ( app, anon, user) = TestApp :: init ( ) . with_user ( ) ;
606
- let user = user. as_model ( ) ;
607
-
608
- app. db ( |conn| {
609
- let c1 = CrateBuilder :: new ( "c1" , user. id ) . expect_build ( conn) ;
610
- CrateBuilder :: new ( "c2" , user. id )
611
- . version ( VersionBuilder :: new ( "1.0.0" ) . dependency ( & c1, None ) )
612
- . version (
613
- VersionBuilder :: new ( "1.1.0" )
614
- . dependency ( & c1, None )
615
- . dependency ( & c1, Some ( "foo" ) ) ,
616
- )
617
- . expect_build ( conn) ;
618
- } ) ;
619
-
620
- let deps = anon. reverse_dependencies ( "c1" ) ;
621
- assert_eq ! ( deps. dependencies. len( ) , 1 ) ;
622
- assert_eq ! ( deps. meta. total, 1 ) ;
623
- assert_eq ! ( deps. dependencies[ 0 ] . crate_id, "c1" ) ;
624
- assert_eq ! ( deps. versions. len( ) , 1 ) ;
625
- assert_eq ! ( deps. versions[ 0 ] . krate, "c2" ) ;
626
- assert_eq ! ( deps. versions[ 0 ] . num, "1.1.0" ) ;
627
-
628
- // c1 has no dependent crates.
629
- let deps = anon. reverse_dependencies ( "c2" ) ;
630
- assert_eq ! ( deps. dependencies. len( ) , 0 ) ;
631
- assert_eq ! ( deps. meta. total, 0 ) ;
632
- }
633
-
634
- #[ test]
635
- fn reverse_dependencies_when_old_version_doesnt_depend_but_new_does ( ) {
636
- let ( app, anon, user) = TestApp :: init ( ) . with_user ( ) ;
637
- let user = user. as_model ( ) ;
638
-
639
- app. db ( |conn| {
640
- let c1 = CrateBuilder :: new ( "c1" , user. id )
641
- . version ( "1.1.0" )
642
- . expect_build ( conn) ;
643
- CrateBuilder :: new ( "c2" , user. id )
644
- . version ( "1.0.0" )
645
- . version ( VersionBuilder :: new ( "2.0.0" ) . dependency ( & c1, None ) )
646
- . expect_build ( conn) ;
647
- } ) ;
648
-
649
- let deps = anon. reverse_dependencies ( "c1" ) ;
650
- assert_eq ! ( deps. dependencies. len( ) , 1 ) ;
651
- assert_eq ! ( deps. meta. total, 1 ) ;
652
- assert_eq ! ( deps. dependencies[ 0 ] . crate_id, "c1" ) ;
653
- }
654
-
655
- #[ test]
656
- fn reverse_dependencies_when_old_version_depended_but_new_doesnt ( ) {
657
- let ( app, anon, user) = TestApp :: init ( ) . with_user ( ) ;
658
- let user = user. as_model ( ) ;
659
-
660
- app. db ( |conn| {
661
- let c1 = CrateBuilder :: new ( "c1" , user. id )
662
- . version ( "1.0.0" )
663
- . expect_build ( conn) ;
664
- CrateBuilder :: new ( "c2" , user. id )
665
- . version ( VersionBuilder :: new ( "1.0.0" ) . dependency ( & c1, None ) )
666
- . version ( "2.0.0" )
667
- . expect_build ( conn) ;
668
- } ) ;
669
-
670
- let deps = anon. reverse_dependencies ( "c1" ) ;
671
- assert_eq ! ( deps. dependencies. len( ) , 0 ) ;
672
- assert_eq ! ( deps. meta. total, 0 ) ;
673
- }
674
-
675
- #[ test]
676
- fn prerelease_versions_not_included_in_reverse_dependencies ( ) {
677
- let ( app, anon, user) = TestApp :: init ( ) . with_user ( ) ;
678
- let user = user. as_model ( ) ;
679
-
680
- app. db ( |conn| {
681
- let c1 = CrateBuilder :: new ( "c1" , user. id )
682
- . version ( "1.0.0" )
683
- . expect_build ( conn) ;
684
- CrateBuilder :: new ( "c2" , user. id )
685
- . version ( "1.1.0-pre" )
686
- . expect_build ( conn) ;
687
- CrateBuilder :: new ( "c3" , user. id )
688
- . version ( VersionBuilder :: new ( "1.0.0" ) . dependency ( & c1, None ) )
689
- . version ( "1.1.0-pre" )
690
- . expect_build ( conn) ;
691
- } ) ;
692
-
693
- let deps = anon. reverse_dependencies ( "c1" ) ;
694
- assert_eq ! ( deps. dependencies. len( ) , 1 ) ;
695
- assert_eq ! ( deps. meta. total, 1 ) ;
696
- assert_eq ! ( deps. dependencies[ 0 ] . crate_id, "c1" ) ;
697
- }
698
-
699
- #[ test]
700
- fn yanked_versions_not_included_in_reverse_dependencies ( ) {
701
- let ( app, anon, user) = TestApp :: init ( ) . with_user ( ) ;
702
- let user = user. as_model ( ) ;
703
-
704
- app. db ( |conn| {
705
- let c1 = CrateBuilder :: new ( "c1" , user. id )
706
- . version ( "1.0.0" )
707
- . expect_build ( conn) ;
708
- CrateBuilder :: new ( "c2" , user. id )
709
- . version ( "1.0.0" )
710
- . version ( VersionBuilder :: new ( "2.0.0" ) . dependency ( & c1, None ) )
711
- . expect_build ( conn) ;
712
- } ) ;
713
-
714
- let deps = anon. reverse_dependencies ( "c1" ) ;
715
- assert_eq ! ( deps. dependencies. len( ) , 1 ) ;
716
- assert_eq ! ( deps. meta. total, 1 ) ;
717
- assert_eq ! ( deps. dependencies[ 0 ] . crate_id, "c1" ) ;
718
-
719
- app. db ( |conn| {
720
- use cargo_registry:: schema:: versions;
721
-
722
- diesel:: update ( versions:: table. filter ( versions:: num. eq ( "2.0.0" ) ) )
723
- . set ( versions:: yanked. eq ( true ) )
724
- . execute ( conn)
725
- . unwrap ( ) ;
726
- } ) ;
727
-
728
- let deps = anon. reverse_dependencies ( "c1" ) ;
729
- assert_eq ! ( deps. dependencies. len( ) , 0 ) ;
730
- assert_eq ! ( deps. meta. total, 0 ) ;
731
- }
732
-
733
- #[ test]
734
- fn reverse_dependencies_includes_published_by_user_when_present ( ) {
735
- let ( app, anon, user) = TestApp :: init ( ) . with_user ( ) ;
736
- let user = user. as_model ( ) ;
737
-
738
- app. db ( |conn| {
739
- use cargo_registry:: schema:: versions;
740
-
741
- let c1 = CrateBuilder :: new ( "c1" , user. id )
742
- . version ( "1.0.0" )
743
- . expect_build ( conn) ;
744
- CrateBuilder :: new ( "c2" , user. id )
745
- . version ( VersionBuilder :: new ( "2.0.0" ) . dependency ( & c1, None ) )
746
- . expect_build ( conn) ;
747
-
748
- // Make c2's version (and,incidentally, c1's, but that doesn't matter) mimic a version
749
- // published before we started recording who published versions
750
- let none: Option < i32 > = None ;
751
- update ( versions:: table)
752
- . set ( versions:: published_by. eq ( none) )
753
- . execute ( conn)
754
- . unwrap ( ) ;
755
-
756
- // c3's version will have the published by info recorded
757
- CrateBuilder :: new ( "c3" , user. id )
758
- . version ( VersionBuilder :: new ( "3.0.0" ) . dependency ( & c1, None ) )
759
- . expect_build ( conn) ;
760
- } ) ;
761
-
762
- let deps = anon. reverse_dependencies ( "c1" ) ;
763
- assert_eq ! ( deps. versions. len( ) , 2 ) ;
764
-
765
- let c2_version = deps. versions . iter ( ) . find ( |v| v. krate == "c2" ) . unwrap ( ) ;
766
- assert_none ! ( & c2_version. published_by) ;
767
-
768
- let c3_version = deps. versions . iter ( ) . find ( |v| v. krate == "c3" ) . unwrap ( ) ;
769
- assert_eq ! (
770
- c3_version. published_by. as_ref( ) . unwrap( ) . login,
771
- user. gh_login
772
- ) ;
773
- }
774
-
775
- #[ test]
776
- fn reverse_dependencies_query_supports_u64_version_number_parts ( ) {
777
- let ( app, anon, user) = TestApp :: init ( ) . with_user ( ) ;
778
- let user = user. as_model ( ) ;
779
-
780
- let large_but_valid_version_number = format ! ( "1.0.{}" , std:: u64 :: MAX ) ;
781
-
782
- app. db ( |conn| {
783
- let c1 = CrateBuilder :: new ( "c1" , user. id ) . expect_build ( conn) ;
784
- // The crate that depends on c1...
785
- CrateBuilder :: new ( "c2" , user. id )
786
- // ...has a patch version at the limits of what the semver crate supports
787
- . version ( VersionBuilder :: new ( & large_but_valid_version_number) . dependency ( & c1, None ) )
788
- . expect_build ( conn) ;
789
- } ) ;
790
-
791
- let deps = anon. reverse_dependencies ( "c1" ) ;
792
- assert_eq ! ( deps. dependencies. len( ) , 1 ) ;
793
- assert_eq ! ( deps. meta. total, 1 ) ;
794
- assert_eq ! ( deps. dependencies[ 0 ] . crate_id, "c1" ) ;
795
- assert_eq ! ( deps. versions. len( ) , 1 ) ;
796
- assert_eq ! ( deps. versions[ 0 ] . krate, "c2" ) ;
797
- assert_eq ! ( deps. versions[ 0 ] . num, large_but_valid_version_number) ;
798
- }
799
-
800
586
/* Given two crates, one with downloads less than 90 days ago, the
801
587
other with all downloads greater than 90 days ago, check that
802
588
the order returned is by recent downloads, descending. Check
0 commit comments