@@ -3898,26 +3898,110 @@ def test_new_release_url_verified(
3898
3898
assert release_db .urls_by_verify_status (verified = expected ) == {"Test" : url }
3899
3899
assert not release_db .urls_by_verify_status (verified = not expected )
3900
3900
3901
+ @pytest .mark .parametrize (
3902
+ ("url" , "expected" ),
3903
+ [
3904
+ ("https://google.com" , False ), # Totally different
3905
+ ("https://github.com/foo" , False ), # Missing parts
3906
+ ("https://github.com/foo/bar/" , True ), # Exactly the same
3907
+ ("https://github.com/foo/bar/readme.md" , True ), # Additional parts
3908
+ ("https://github.com/foo/bar" , True ), # Missing trailing slash
3909
+ ],
3910
+ )
3911
+ def test_new_release_homepage_download_urls_verified (
3912
+ self , monkeypatch , pyramid_config , db_request , metrics , url , expected
3913
+ ):
3914
+ project = ProjectFactory .create ()
3915
+ publisher = GitHubPublisherFactory .create (projects = [project ])
3916
+ publisher .repository_owner = "foo"
3917
+ publisher .repository_name = "bar"
3918
+ claims = {"sha" : "somesha" }
3919
+ identity = PublisherTokenContext (publisher , SignedClaims (claims ))
3920
+ db_request .oidc_publisher = identity .publisher
3921
+ db_request .oidc_claims = identity .claims
3922
+
3923
+ db_request .db .add (Classifier (classifier = "Environment :: Other Environment" ))
3924
+ db_request .db .add (Classifier (classifier = "Programming Language :: Python" ))
3925
+
3926
+ filename = "{}-{}.tar.gz" .format (project .name , "1.0" )
3927
+
3928
+ pyramid_config .testing_securitypolicy (identity = identity )
3929
+ db_request .user_agent = "warehouse-tests/6.6.6"
3930
+ db_request .POST = MultiDict (
3931
+ {
3932
+ "metadata_version" : "1.2" ,
3933
+ "name" : project .name ,
3934
+ "version" : "1.0" ,
3935
+ "summary" : "This is my summary!" ,
3936
+ "filetype" : "sdist" ,
3937
+ "md5_digest" : _TAR_GZ_PKG_MD5 ,
3938
+ "content" : pretend .stub (
3939
+ filename = filename ,
3940
+ file = io .BytesIO (_TAR_GZ_PKG_TESTDATA ),
3941
+ type = "application/tar" ,
3942
+ ),
3943
+ }
3944
+ )
3945
+ db_request .POST .extend (
3946
+ [
3947
+ ("classifiers" , "Environment :: Other Environment" ),
3948
+ ("classifiers" , "Programming Language :: Python" ),
3949
+ ("requires_dist" , "foo" ),
3950
+ ("requires_dist" , "bar (>1.0)" ),
3951
+ ("home_page" , url ),
3952
+ ("download_url" , url ),
3953
+ ("requires_external" , "Cheese (>1.0)" ),
3954
+ ("provides" , "testing" ),
3955
+ ]
3956
+ )
3957
+
3958
+ storage_service = pretend .stub (store = lambda path , filepath , meta : None )
3959
+ db_request .find_service = lambda svc , name = None , context = None : {
3960
+ IFileStorage : storage_service ,
3961
+ IMetricsService : metrics ,
3962
+ }.get (svc )
3963
+
3964
+ legacy .file_upload (db_request )
3965
+ release_db = (
3966
+ db_request .db .query (Release ).filter (Release .project == project ).one ()
3967
+ )
3968
+ assert release_db .urls_by_verify_status (verified = expected ) == {
3969
+ "Homepage" : url ,
3970
+ "Download" : url ,
3971
+ }
3972
+ assert not release_db .urls_by_verify_status (verified = not expected )
3973
+
3974
+ @pytest .mark .parametrize (
3975
+ ("home_page_verified" , "download_url_verified" ),
3976
+ [(False , False ), (False , True ), (True , False ), (True , True )],
3977
+ )
3901
3978
def test_new_publisher_verifies_existing_release_url (
3902
3979
self ,
3903
3980
monkeypatch ,
3904
3981
pyramid_config ,
3905
3982
db_request ,
3906
3983
metrics ,
3984
+ home_page_verified ,
3985
+ download_url_verified ,
3907
3986
):
3908
3987
repo_name = "my_new_repo"
3909
3988
verified_url = "https://github.com/foo/bar"
3910
3989
unverified_url = f"https://github.com/foo/{ repo_name } "
3911
3990
3912
3991
project = ProjectFactory .create ()
3913
3992
release = ReleaseFactory .create (project = project , version = "1.0" )
3914
- # We start with an existing release, with one verified URL and one unverified
3915
- # URL . Uploading a new file with a Trusted Publisher that matches the unverified
3916
- # URL should mark it as verified.
3993
+ # We start with an existing release, with one verified URL and some unverified
3994
+ # URLs . Uploading a new file with a Trusted Publisher that matches the
3995
+ # unverified URLs should mark them as verified.
3917
3996
release .project_urls = {
3918
3997
"verified_url" : {"url" : verified_url , "verified" : True },
3919
3998
"unverified_url" : {"url" : unverified_url , "verified" : False },
3920
3999
}
4000
+ release .home_page = verified_url if home_page_verified else unverified_url
4001
+ release .home_page_verified = home_page_verified
4002
+ release .download_url = verified_url if download_url_verified else unverified_url
4003
+ release .download_url_verified = download_url_verified
4004
+
3921
4005
publisher = GitHubPublisherFactory .create (projects = [project ])
3922
4006
publisher .repository_owner = "foo"
3923
4007
publisher .repository_name = repo_name
@@ -3956,6 +4040,11 @@ def test_new_publisher_verifies_existing_release_url(
3956
4040
("requires_dist" , "bar (>1.0)" ),
3957
4041
("requires_external" , "Cheese (>1.0)" ),
3958
4042
("provides" , "testing" ),
4043
+ ("home_page" , verified_url if home_page_verified else unverified_url ),
4044
+ (
4045
+ "download_url" ,
4046
+ verified_url if download_url_verified else unverified_url ,
4047
+ ),
3959
4048
]
3960
4049
)
3961
4050
db_request .POST .add ("project_urls" , f"verified_url, { verified_url } " )
@@ -3969,13 +4058,16 @@ def test_new_publisher_verifies_existing_release_url(
3969
4058
3970
4059
legacy .file_upload (db_request )
3971
4060
3972
- # After successful upload, the Release should have now both URLs verified
4061
+ # After successful upload, the Release should have now all URLs verified
3973
4062
release_db = (
3974
4063
db_request .db .query (Release ).filter (Release .project == project ).one ()
3975
4064
)
4065
+
3976
4066
assert release_db .urls_by_verify_status (verified = True ) == {
3977
4067
"unverified_url" : unverified_url ,
3978
4068
"verified_url" : verified_url ,
4069
+ "Homepage" : release .home_page ,
4070
+ "Download" : release .download_url ,
3979
4071
}
3980
4072
assert not release_db .urls_by_verify_status (verified = False )
3981
4073
0 commit comments