@@ -3716,3 +3716,72 @@ def test_solver_yanked_warning(
3716
3716
)
3717
3717
assert error .count ("is a yanked version" ) == 2
3718
3718
assert error .count ("Reason for being yanked" ) == 1
3719
+
3720
+
3721
+ @pytest .mark .parametrize ("is_locked" , [False , True ])
3722
+ def test_update_with_use_latest_vs_lock (
3723
+ package : ProjectPackage , repo : Repository , pool : Pool , io : NullIO , is_locked : bool
3724
+ ):
3725
+ """
3726
+ A1 depends on B2, A2 and A3 depend on B1. Same for C.
3727
+ B1 depends on A2/C2, B2 depends on A1/C1.
3728
+
3729
+ Because there are fewer versions B than of A and C, B is resolved first
3730
+ so that latest version of B is used.
3731
+ There shouldn't be a difference between `poetry lock` (not is_locked)
3732
+ and `poetry update` (is_locked + use_latest)
3733
+ """
3734
+ # B added between A and C (and also alphabetically between)
3735
+ # to ensure that neither the first nor the last one is resolved first
3736
+ package .add_dependency (Factory .create_dependency ("A" , "*" ))
3737
+ package .add_dependency (Factory .create_dependency ("B" , "*" ))
3738
+ package .add_dependency (Factory .create_dependency ("C" , "*" ))
3739
+
3740
+ package_a1 = get_package ("A" , "1" )
3741
+ package_a1 .add_dependency (Factory .create_dependency ("B" , "2" ))
3742
+ package_a2 = get_package ("A" , "2" )
3743
+ package_a2 .add_dependency (Factory .create_dependency ("B" , "1" ))
3744
+ package_a3 = get_package ("A" , "3" )
3745
+ package_a3 .add_dependency (Factory .create_dependency ("B" , "1" ))
3746
+
3747
+ package_c1 = get_package ("C" , "1" )
3748
+ package_c1 .add_dependency (Factory .create_dependency ("B" , "2" ))
3749
+ package_c2 = get_package ("C" , "2" )
3750
+ package_c2 .add_dependency (Factory .create_dependency ("B" , "1" ))
3751
+ package_c3 = get_package ("C" , "3" )
3752
+ package_c3 .add_dependency (Factory .create_dependency ("B" , "1" ))
3753
+
3754
+ package_b1 = get_package ("B" , "1" )
3755
+ package_b1 .add_dependency (Factory .create_dependency ("A" , "2" ))
3756
+ package_b1 .add_dependency (Factory .create_dependency ("C" , "2" ))
3757
+ package_b2 = get_package ("B" , "2" )
3758
+ package_b2 .add_dependency (Factory .create_dependency ("A" , "1" ))
3759
+ package_b2 .add_dependency (Factory .create_dependency ("C" , "1" ))
3760
+
3761
+ repo .add_package (package_a1 )
3762
+ repo .add_package (package_a2 )
3763
+ repo .add_package (package_a3 )
3764
+ repo .add_package (package_b1 )
3765
+ repo .add_package (package_b2 )
3766
+ repo .add_package (package_c1 )
3767
+ repo .add_package (package_c2 )
3768
+ repo .add_package (package_c3 )
3769
+
3770
+ if is_locked :
3771
+ locked = [package_a1 , package_b2 , package_c1 ]
3772
+ use_latest = [package .name for package in locked ]
3773
+ else :
3774
+ locked = []
3775
+ use_latest = []
3776
+
3777
+ solver = Solver (package , pool , [], locked , io )
3778
+ transaction = solver .solve (use_latest )
3779
+
3780
+ check_solver_result (
3781
+ transaction ,
3782
+ [
3783
+ {"job" : "install" , "package" : package_c1 },
3784
+ {"job" : "install" , "package" : package_b2 },
3785
+ {"job" : "install" , "package" : package_a1 },
3786
+ ],
3787
+ )
0 commit comments