@@ -3076,6 +3076,55 @@ def test_upload_fails_with_unsupported_wheel_plat(
3076
3076
"400 Binary wheel .* has an unsupported platform tag .*" , resp .status
3077
3077
)
3078
3078
3079
+ def test_upload_fails_with_missing_metadata_wheel (
3080
+ self , monkeypatch , pyramid_config , db_request
3081
+ ):
3082
+ user = UserFactory .create ()
3083
+ pyramid_config .testing_securitypolicy (identity = user )
3084
+ db_request .user = user
3085
+ EmailFactory .create (user = user )
3086
+ project = ProjectFactory .create ()
3087
+ release = ReleaseFactory .create (project = project , version = "1.0" )
3088
+ RoleFactory .create (user = user , project = project )
3089
+
3090
+ temp_f = io .BytesIO ()
3091
+ with zipfile .ZipFile (file = temp_f , mode = "w" ) as zfp :
3092
+ zfp .writestr (
3093
+ f"{ project .name .lower ()} -{ release .version } .dist-info/METADATA" ,
3094
+ "Fake metadata" ,
3095
+ )
3096
+
3097
+ filename = f"{ project .name } -{ release .version } -cp34-none-any.whl"
3098
+ filebody = temp_f .getvalue ()
3099
+
3100
+ db_request .POST = MultiDict (
3101
+ {
3102
+ "metadata_version" : "1.2" ,
3103
+ "name" : project .name ,
3104
+ "version" : release .version ,
3105
+ "filetype" : "bdist_wheel" ,
3106
+ "pyversion" : "cp34" ,
3107
+ "md5_digest" : hashlib .md5 (filebody ).hexdigest (),
3108
+ "content" : pretend .stub (
3109
+ filename = filename ,
3110
+ file = io .BytesIO (filebody ),
3111
+ type = "application/zip" ,
3112
+ ),
3113
+ }
3114
+ )
3115
+
3116
+ monkeypatch .setattr (legacy , "_is_valid_dist_file" , lambda * a , ** kw : True )
3117
+
3118
+ with pytest .raises (HTTPBadRequest ) as excinfo :
3119
+ legacy .file_upload (db_request )
3120
+
3121
+ resp = excinfo .value
3122
+
3123
+ assert resp .status_code == 400
3124
+ assert re .match (
3125
+ "400 Wheel .* does not contain the required METADATA file: .*" , resp .status
3126
+ )
3127
+
3079
3128
def test_upload_updates_existing_project_name (
3080
3129
self , pyramid_config , db_request , metrics
3081
3130
):
0 commit comments