@@ -32,15 +32,16 @@ func TestPackagePyPI(t *testing.T) {
32
32
packageVersion := "1!1.0.1+r1234"
33
33
packageAuthor := "KN4CK3R"
34
34
packageDescription := "Test Description"
35
+ projectURL := "https://example.com"
35
36
36
37
content := "test"
37
38
hashSHA256 := "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
38
39
39
40
root := fmt .Sprintf ("/api/packages/%s/pypi" , user .Name )
40
41
41
- uploadFile := func (t * testing. T , filename , content string , expectedStatus int ) {
42
- body : = & bytes.Buffer {}
43
- writer : = multipart .NewWriter (body )
42
+ createBasicMultipartFile := func (filename , packageName , content string ) ( body * bytes. Buffer , writer * multipart. Writer , closer func () error ) {
43
+ body = & bytes.Buffer {}
44
+ writer = multipart .NewWriter (body )
44
45
part , _ := writer .CreateFormFile ("content" , filename )
45
46
_ , _ = io .Copy (part , strings .NewReader (content ))
46
47
@@ -52,14 +53,27 @@ func TestPackagePyPI(t *testing.T) {
52
53
writer .WriteField ("sha256_digest" , hashSHA256 )
53
54
writer .WriteField ("requires_python" , "3.6" )
54
55
55
- _ = writer .Close ()
56
+ return body , writer , writer .Close
57
+ }
56
58
59
+ uploadHelper := func (t * testing.T , body * bytes.Buffer , contentType string , expectedStatus int ) {
57
60
req := NewRequestWithBody (t , "POST" , root , body ).
58
- SetHeader ("Content-Type" , writer . FormDataContentType () ).
61
+ SetHeader ("Content-Type" , contentType ).
59
62
AddBasicAuth (user .Name )
60
63
MakeRequest (t , req , expectedStatus )
61
64
}
62
65
66
+ uploadFile := func (t * testing.T , filename , content string , expectedStatus int ) {
67
+ body , writer , closeFunc := createBasicMultipartFile (filename , packageName , content )
68
+
69
+ writer .WriteField ("project_urls" , "DOCUMENTATION , https://readthedocs.org" )
70
+ writer .WriteField ("project_urls" , fmt .Sprintf ("Home-page, %s" , projectURL ))
71
+
72
+ _ = closeFunc ()
73
+
74
+ uploadHelper (t , body , writer .FormDataContentType (), expectedStatus )
75
+ }
76
+
63
77
t .Run ("Upload" , func (t * testing.T ) {
64
78
defer tests .PrintCurrentTest (t )()
65
79
@@ -74,6 +88,7 @@ func TestPackagePyPI(t *testing.T) {
74
88
assert .NoError (t , err )
75
89
assert .Nil (t , pd .SemVer )
76
90
assert .IsType (t , & pypi.Metadata {}, pd .Metadata )
91
+ assert .Equal (t , projectURL , pd .Metadata .(* pypi.Metadata ).ProjectURL )
77
92
assert .Equal (t , packageName , pd .Package .Name )
78
93
assert .Equal (t , packageVersion , pd .Version .Version )
79
94
@@ -133,6 +148,48 @@ func TestPackagePyPI(t *testing.T) {
133
148
uploadFile (t , "test.tar.gz" , content , http .StatusConflict )
134
149
})
135
150
151
+ t .Run ("UploadUsingDeprecatedHomepageMetadata" , func (t * testing.T ) {
152
+ defer tests .PrintCurrentTest (t )()
153
+
154
+ pkgName := "homepage-package"
155
+ body , writer , closeFunc := createBasicMultipartFile ("test.whl" , pkgName , content )
156
+
157
+ writer .WriteField ("home_page" , projectURL )
158
+
159
+ _ = closeFunc ()
160
+
161
+ uploadHelper (t , body , writer .FormDataContentType (), http .StatusCreated )
162
+
163
+ pvs , err := packages .GetVersionsByPackageName (db .DefaultContext , user .ID , packages .TypePyPI , pkgName )
164
+ assert .NoError (t , err )
165
+ assert .Len (t , pvs , 1 )
166
+
167
+ pd , err := packages .GetPackageDescriptor (db .DefaultContext , pvs [0 ])
168
+ assert .NoError (t , err )
169
+ assert .IsType (t , & pypi.Metadata {}, pd .Metadata )
170
+ assert .Equal (t , projectURL , pd .Metadata .(* pypi.Metadata ).ProjectURL )
171
+ })
172
+
173
+ t .Run ("UploadWithoutAnyHomepageURLMetadata" , func (t * testing.T ) {
174
+ defer tests .PrintCurrentTest (t )()
175
+
176
+ pkgName := "no-project-url-or-homepage-package"
177
+ body , writer , closeFunc := createBasicMultipartFile ("test.whl" , pkgName , content )
178
+
179
+ _ = closeFunc ()
180
+
181
+ uploadHelper (t , body , writer .FormDataContentType (), http .StatusCreated )
182
+
183
+ pvs , err := packages .GetVersionsByPackageName (db .DefaultContext , user .ID , packages .TypePyPI , pkgName )
184
+ assert .NoError (t , err )
185
+ assert .Len (t , pvs , 1 )
186
+
187
+ pd , err := packages .GetPackageDescriptor (db .DefaultContext , pvs [0 ])
188
+ assert .NoError (t , err )
189
+ assert .IsType (t , & pypi.Metadata {}, pd .Metadata )
190
+ assert .Empty (t , pd .Metadata .(* pypi.Metadata ).ProjectURL )
191
+ })
192
+
136
193
t .Run ("Download" , func (t * testing.T ) {
137
194
defer tests .PrintCurrentTest (t )()
138
195
@@ -147,7 +204,7 @@ func TestPackagePyPI(t *testing.T) {
147
204
downloadFile ("test.whl" )
148
205
downloadFile ("test.tar.gz" )
149
206
150
- pvs , err := packages .GetVersionsByPackageType (db .DefaultContext , user .ID , packages .TypePyPI )
207
+ pvs , err := packages .GetVersionsByPackageName (db .DefaultContext , user .ID , packages .TypePyPI , packageName )
151
208
assert .NoError (t , err )
152
209
assert .Len (t , pvs , 1 )
153
210
assert .Equal (t , int64 (2 ), pvs [0 ].DownloadCount )
0 commit comments