@@ -23,6 +23,7 @@ import (
23
23
"code.gitea.io/gitea/tests"
24
24
25
25
"github.com/stretchr/testify/assert"
26
+ "github.com/stretchr/testify/require"
26
27
)
27
28
28
29
func TestPackageSwift (t * testing.T ) {
@@ -34,6 +35,7 @@ func TestPackageSwift(t *testing.T) {
34
35
packageName := "test_package"
35
36
packageID := packageScope + "." + packageName
36
37
packageVersion := "1.0.3"
38
+ packageVersion2 := "1.0.4"
37
39
packageAuthor := "KN4CK3R"
38
40
packageDescription := "Gitea Test Package"
39
41
packageRepositoryURL := "https://gitea.io/gitea/gitea"
@@ -183,6 +185,94 @@ func TestPackageSwift(t *testing.T) {
183
185
)
184
186
})
185
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
+
186
276
t .Run ("Download" , func (t * testing.T ) {
187
277
defer tests .PrintCurrentTest (t )()
188
278
@@ -211,7 +301,7 @@ func TestPackageSwift(t *testing.T) {
211
301
SetHeader ("Accept" , swift_router .AcceptJSON )
212
302
resp := MakeRequest (t , req , http .StatusOK )
213
303
214
- 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 )
215
305
216
306
assert .Equal (t , "1" , resp .Header ().Get ("Content-Version" ))
217
307
assert .Equal (t , fmt .Sprintf (`<%s>; rel="latest-version"` , versionURL ), resp .Header ().Get ("Link" ))
@@ -221,9 +311,9 @@ func TestPackageSwift(t *testing.T) {
221
311
var result * swift_router.EnumeratePackageVersionsResponse
222
312
DecodeJSON (t , resp , & result )
223
313
224
- assert .Len (t , result .Releases , 1 )
225
- assert .Contains (t , result .Releases , packageVersion )
226
- 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 )
227
317
228
318
req = NewRequest (t , "GET" , fmt .Sprintf ("%s/%s/%s.json" , url , packageScope , packageName )).
229
319
AddBasicAuth (user .Name )
0 commit comments