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