@@ -39,9 +39,9 @@ func TestPackagePyPI(t *testing.T) {
3939
4040 root := fmt .Sprintf ("/api/packages/%s/pypi" , user .Name )
4141
42- uploadFile := func (t * testing. T , filename , content string , expectedStatus int ) {
43- body : = & bytes.Buffer {}
44- writer : = multipart .NewWriter (body )
42+ createBasicMultipartFile := func (packageName , filename , content string ) ( body * bytes. Buffer , writer * multipart. Writer ) {
43+ body = & bytes.Buffer {}
44+ writer = multipart .NewWriter (body )
4545 part , _ := writer .CreateFormFile ("content" , filename )
4646 _ , _ = io .Copy (part , strings .NewReader (content ))
4747
@@ -52,17 +52,28 @@ func TestPackagePyPI(t *testing.T) {
5252 writer .WriteField ("description" , packageDescription )
5353 writer .WriteField ("sha256_digest" , hashSHA256 )
5454 writer .WriteField ("requires_python" , "3.6" )
55- writer .WriteField ("project_urls" , "DOCUMENTATION , https://readthedocs.org" )
56- writer .WriteField ("project_urls" , fmt .Sprintf ("Home-page, %s" , projectURL ))
5755
58- _ = writer .Close ()
56+ return
57+ }
5958
59+ upload := func (t * testing.T , body * bytes.Buffer , contentType string , expectedStatus int ) {
6060 req := NewRequestWithBody (t , "POST" , root , body ).
61- SetHeader ("Content-Type" , writer . FormDataContentType () ).
61+ SetHeader ("Content-Type" , contentType ).
6262 AddBasicAuth (user .Name )
6363 MakeRequest (t , req , expectedStatus )
6464 }
6565
66+ uploadFile := func (t * testing.T , filename , content string , expectedStatus int ) {
67+ body , writer := createBasicMultipartFile (packageName , filename , content )
68+
69+ writer .WriteField ("project_urls" , "DOCUMENTATION , https://readthedocs.org" )
70+ writer .WriteField ("project_urls" , fmt .Sprintf ("Home-page, %s" , projectURL ))
71+
72+ _ = writer .Close ()
73+
74+ upload (t , body , writer .FormDataContentType (), expectedStatus )
75+ }
76+
6677 t .Run ("Upload" , func (t * testing.T ) {
6778 defer tests .PrintCurrentTest (t )()
6879
@@ -137,6 +148,48 @@ func TestPackagePyPI(t *testing.T) {
137148 uploadFile (t , "test.tar.gz" , content , http .StatusConflict )
138149 })
139150
151+ t .Run ("UploadUsingDeprecatedHomepageMetadata" , func (t * testing.T ) {
152+ defer tests .PrintCurrentTest (t )()
153+
154+ pkgName := "homepage-package"
155+ body , writer := createBasicMultipartFile (pkgName , "test.whl" , content )
156+
157+ writer .WriteField ("home_page" , projectURL )
158+
159+ _ = writer .Close ()
160+
161+ upload (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 := createBasicMultipartFile (pkgName , "test.whl" , content )
178+
179+ _ = writer .Close ()
180+
181+ upload (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+
140193 t .Run ("Download" , func (t * testing.T ) {
141194 defer tests .PrintCurrentTest (t )()
142195
@@ -151,7 +204,7 @@ func TestPackagePyPI(t *testing.T) {
151204 downloadFile ("test.whl" )
152205 downloadFile ("test.tar.gz" )
153206
154- pvs , err := packages .GetVersionsByPackageType (db .DefaultContext , user .ID , packages .TypePyPI )
207+ pvs , err := packages .GetVersionsByPackageName (db .DefaultContext , user .ID , packages .TypePyPI , packageName )
155208 assert .NoError (t , err )
156209 assert .Len (t , pvs , 1 )
157210 assert .Equal (t , int64 (2 ), pvs [0 ].DownloadCount )
@@ -183,4 +236,5 @@ func TestPackagePyPI(t *testing.T) {
183236 }
184237 }
185238 })
239+
186240}
0 commit comments