@@ -35,6 +35,7 @@ func TestPackageSwift(t *testing.T) {
35
35
packageName := "test_package"
36
36
packageID := packageScope + "." + packageName
37
37
packageVersion := "1.0.3"
38
+ packageVersion2 := "1.0.4"
38
39
packageAuthor := "KN4CK3R"
39
40
packageDescription := "Gitea Test Package"
40
41
packageRepositoryURL := "https://gitea.io/gitea/gitea"
@@ -184,6 +185,94 @@ func TestPackageSwift(t *testing.T) {
184
185
)
185
186
})
186
187
188
+ t .Run ("UploadMultipart" , func (t * testing.T ) {
189
+ defer tests .PrintCurrentTest (t )()
190
+
191
+ uploadPackage := func (t * testing.T , url string , expectedStatus int , sr io.Reader , metadata string ) {
192
+ var body bytes.Buffer
193
+ mpw := multipart .NewWriter (& body )
194
+
195
+ // Read the source archive content
196
+ sourceContent , err := io .ReadAll (sr )
197
+ assert .NoError (t , err )
198
+ mpw .WriteField ("source-archive" , string (sourceContent ))
199
+
200
+ if metadata != "" {
201
+ mpw .WriteField ("metadata" , metadata )
202
+ }
203
+
204
+ mpw .Close ()
205
+
206
+ req := NewRequestWithBody (t , "PUT" , url , & body ).
207
+ SetHeader ("Content-Type" , mpw .FormDataContentType ()).
208
+ SetHeader ("Accept" , swift_router .AcceptJSON ).
209
+ AddBasicAuth (user .Name )
210
+ MakeRequest (t , req , expectedStatus )
211
+ }
212
+
213
+ createArchive := func (files map [string ]string ) * bytes.Buffer {
214
+ var buf bytes.Buffer
215
+ zw := zip .NewWriter (& buf )
216
+ for filename , content := range files {
217
+ w , _ := zw .Create (filename )
218
+ w .Write ([]byte (content ))
219
+ }
220
+ zw .Close ()
221
+ return & buf
222
+ }
223
+
224
+ uploadURL := fmt .Sprintf ("%s/%s/%s/%s" , url , packageScope , packageName , packageVersion2 )
225
+
226
+ req := NewRequestWithBody (t , "PUT" , uploadURL , bytes .NewReader ([]byte {}))
227
+ MakeRequest (t , req , http .StatusUnauthorized )
228
+
229
+ // Test with metadata as form field
230
+ uploadPackage (
231
+ t ,
232
+ uploadURL ,
233
+ http .StatusCreated ,
234
+ createArchive (map [string ]string {
235
+ "Package.swift" : contentManifest1 ,
236
+ "[email protected] " :
contentManifest2 ,
237
+ }),
238
+ `{"name":"` + packageName + `","version":"` + packageVersion2 + `","description":"` + packageDescription + `","codeRepository":"` + packageRepositoryURL + `","author":{"givenName":"` + packageAuthor + `"},"repositoryURLs":["` + packageRepositoryURL + `"]}` ,
239
+ )
240
+
241
+ pvs , err := packages .GetVersionsByPackageType (db .DefaultContext , user .ID , packages .TypeSwift )
242
+ assert .NoError (t , err )
243
+ require .Len (t , pvs , 2 ) // ATTENTION: many subtests are unable to run separately, they depend on the results of previous tests
244
+ thisPackageVersion := pvs [0 ]
245
+ pd , err := packages .GetPackageDescriptor (db .DefaultContext , thisPackageVersion )
246
+ assert .NoError (t , err )
247
+ assert .NotNil (t , pd .SemVer )
248
+ assert .Equal (t , packageID , pd .Package .Name )
249
+ assert .Equal (t , packageVersion2 , pd .Version .Version )
250
+ assert .IsType (t , & swift_module.Metadata {}, pd .Metadata )
251
+ metadata := pd .Metadata .(* swift_module.Metadata )
252
+ assert .Equal (t , packageDescription , metadata .Description )
253
+ assert .Len (t , metadata .Manifests , 2 )
254
+ assert .Equal (t , contentManifest1 , metadata .Manifests ["" ].Content )
255
+ assert .Equal (t , contentManifest2 , metadata .Manifests ["5.6" ].Content )
256
+ assert .Len (t , pd .VersionProperties , 1 )
257
+ assert .Equal (t , packageRepositoryURL , pd .VersionProperties .GetByName (swift_module .PropertyRepositoryURL ))
258
+
259
+ pfs , err := packages .GetFilesByVersionID (db .DefaultContext , thisPackageVersion .ID )
260
+ assert .NoError (t , err )
261
+ assert .Len (t , pfs , 1 )
262
+ assert .Equal (t , fmt .Sprintf ("%s-%s.zip" , packageName , packageVersion2 ), pfs [0 ].Name )
263
+ assert .True (t , pfs [0 ].IsLead )
264
+
265
+ uploadPackage (
266
+ t ,
267
+ uploadURL ,
268
+ http .StatusConflict ,
269
+ createArchive (map [string ]string {
270
+ "Package.swift" : contentManifest1 ,
271
+ }),
272
+ "" ,
273
+ )
274
+ })
275
+
187
276
t .Run ("Download" , func (t * testing.T ) {
188
277
defer tests .PrintCurrentTest (t )()
189
278
@@ -212,7 +301,7 @@ func TestPackageSwift(t *testing.T) {
212
301
SetHeader ("Accept" , swift_router .AcceptJSON )
213
302
resp := MakeRequest (t , req , http .StatusOK )
214
303
215
- versionURL := setting .AppURL + url [1 :] + fmt .Sprintf ("/%s/%s/%s" , packageScope , packageName , packageVersion )
304
+ versionURL := setting .AppURL + url [1 :] + fmt .Sprintf ("/%s/%s/%s" , packageScope , packageName , packageVersion2 )
216
305
217
306
assert .Equal (t , "1" , resp .Header ().Get ("Content-Version" ))
218
307
assert .Equal (t , fmt .Sprintf (`<%s>; rel="latest-version"` , versionURL ), resp .Header ().Get ("Link" ))
@@ -222,9 +311,9 @@ func TestPackageSwift(t *testing.T) {
222
311
var result * swift_router.EnumeratePackageVersionsResponse
223
312
DecodeJSON (t , resp , & result )
224
313
225
- assert .Len (t , result .Releases , 1 )
226
- assert .Contains (t , result .Releases , packageVersion )
227
- assert .Equal (t , versionURL , result .Releases [packageVersion ].URL )
314
+ assert .Len (t , result .Releases , 2 )
315
+ assert .Contains (t , result .Releases , packageVersion2 )
316
+ assert .Equal (t , versionURL , result .Releases [packageVersion2 ].URL )
228
317
229
318
req = NewRequest (t , "GET" , fmt .Sprintf ("%s/%s/%s.json" , url , packageScope , packageName )).
230
319
AddBasicAuth (user .Name )
0 commit comments