Skip to content

Commit e5a75a6

Browse files
committed
improve tests
1 parent a1c39e8 commit e5a75a6

File tree

1 file changed

+43
-36
lines changed

1 file changed

+43
-36
lines changed

tests/integration/api_releases_test.go

Lines changed: 43 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"io"
1010
"mime/multipart"
1111
"net/http"
12+
"net/http/httptest"
1213
"net/url"
1314
"strings"
1415
"testing"
@@ -18,7 +19,9 @@ import (
1819
"code.gitea.io/gitea/models/unittest"
1920
user_model "code.gitea.io/gitea/models/user"
2021
"code.gitea.io/gitea/modules/gitrepo"
22+
"code.gitea.io/gitea/modules/setting"
2123
api "code.gitea.io/gitea/modules/structs"
24+
"code.gitea.io/gitea/modules/test"
2225
"code.gitea.io/gitea/tests"
2326

2427
"github.com/stretchr/testify/assert"
@@ -294,6 +297,7 @@ func TestAPIDeleteReleaseByTagName(t *testing.T) {
294297

295298
func TestAPIUploadAssetRelease(t *testing.T) {
296299
defer tests.PrepareTestEnv(t)()
300+
defer test.MockVariableValue(&setting.Attachment.MaxSize, 1)()
297301

298302
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
299303
owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID})
@@ -303,56 +307,59 @@ func TestAPIUploadAssetRelease(t *testing.T) {
303307
r := createNewReleaseUsingAPI(t, token, owner, repo, "release-tag", "", "Release Tag", "test")
304308

305309
filename := "image.png"
306-
buff := generateImg()
310+
bufImage := generateImg()
311+
bufLargeBytes := bytes.Repeat([]byte{' '}, 2*1024*1024)
307312

308313
assetURL := fmt.Sprintf("/api/v1/repos/%s/%s/releases/%d/assets", owner.Name, repo.Name, r.ID)
309314

310315
t.Run("multipart/form-data", func(t *testing.T) {
311316
defer tests.PrintCurrentTest(t)()
312317

313-
body := &bytes.Buffer{}
314-
315-
writer := multipart.NewWriter(body)
316-
part, err := writer.CreateFormFile("attachment", filename)
317-
assert.NoError(t, err)
318-
_, err = io.Copy(part, bytes.NewReader(buff.Bytes()))
319-
assert.NoError(t, err)
320-
err = writer.Close()
321-
assert.NoError(t, err)
322-
323-
req := NewRequestWithBody(t, http.MethodPost, assetURL, bytes.NewReader(body.Bytes())).
324-
AddTokenAuth(token).
325-
SetHeader("Content-Type", writer.FormDataContentType())
326-
resp := MakeRequest(t, req, http.StatusCreated)
327-
328-
var attachment *api.Attachment
329-
DecodeJSON(t, resp, &attachment)
330-
331-
assert.Equal(t, filename, attachment.Name)
332-
assert.EqualValues(t, 104, attachment.Size)
333-
334-
req = NewRequestWithBody(t, http.MethodPost, assetURL+"?name=test-asset", bytes.NewReader(body.Bytes())).
335-
AddTokenAuth(token).
336-
SetHeader("Content-Type", writer.FormDataContentType())
337-
resp = MakeRequest(t, req, http.StatusCreated)
338-
339-
var attachment2 *api.Attachment
340-
DecodeJSON(t, resp, &attachment2)
318+
performUpload := func(t *testing.T, uploadURL string, buf []byte, expectedStatus int) *httptest.ResponseRecorder {
319+
body := &bytes.Buffer{}
320+
writer := multipart.NewWriter(body)
321+
part, err := writer.CreateFormFile("attachment", filename)
322+
assert.NoError(t, err)
323+
_, err = io.Copy(part, bytes.NewReader(bufImage.Bytes()))
324+
assert.NoError(t, err)
325+
err = writer.Close()
326+
assert.NoError(t, err)
327+
328+
req := NewRequestWithBody(t, http.MethodPost, uploadURL, bytes.NewReader(body.Bytes())).
329+
AddTokenAuth(token).
330+
SetHeader("Content-Type", writer.FormDataContentType())
331+
return MakeRequest(t, req, http.StatusCreated)
332+
}
341333

342-
assert.Equal(t, "test-asset", attachment2.Name)
343-
assert.EqualValues(t, 104, attachment2.Size)
334+
performUpload(t, assetURL, bufLargeBytes, http.StatusRequestEntityTooLarge)
335+
336+
t.Run("UploadDefaultName", func(t *testing.T) {
337+
resp := performUpload(t, assetURL, bufImage.Bytes(), http.StatusCreated)
338+
var attachment api.Attachment
339+
DecodeJSON(t, resp, &attachment)
340+
assert.Equal(t, filename, attachment.Name)
341+
assert.EqualValues(t, 104, attachment.Size)
342+
})
343+
t.Run("UploadWithName", func(t *testing.T) {
344+
resp := performUpload(t, assetURL+"?name=test-asset", bufImage.Bytes(), http.StatusCreated)
345+
var attachment api.Attachment
346+
DecodeJSON(t, resp, &attachment)
347+
assert.Equal(t, "test-asset", attachment.Name)
348+
assert.EqualValues(t, 104, attachment.Size)
349+
})
344350
})
345351

346352
t.Run("application/octet-stream", func(t *testing.T) {
347353
defer tests.PrintCurrentTest(t)()
348354

349-
req := NewRequestWithBody(t, http.MethodPost, assetURL, bytes.NewReader(buff.Bytes())).
350-
AddTokenAuth(token)
355+
req := NewRequestWithBody(t, http.MethodPost, assetURL, bytes.NewReader(bufImage.Bytes())).AddTokenAuth(token)
351356
MakeRequest(t, req, http.StatusBadRequest)
352357

353-
req = NewRequestWithBody(t, http.MethodPost, assetURL+"?name=stream.bin", bytes.NewReader(buff.Bytes())).
354-
AddTokenAuth(token)
355-
resp := MakeRequest(t, req, http.StatusCreated)
358+
req = NewRequestWithBody(t, http.MethodPost, assetURL+"?name=stream.bin", bytes.NewReader(bufLargeBytes)).AddTokenAuth(token)
359+
resp := MakeRequest(t, req, http.StatusRequestEntityTooLarge)
360+
361+
req = NewRequestWithBody(t, http.MethodPost, assetURL+"?name=stream.bin", bytes.NewReader(bufImage.Bytes())).AddTokenAuth(token)
362+
resp = MakeRequest(t, req, http.StatusCreated)
356363

357364
var attachment *api.Attachment
358365
DecodeJSON(t, resp, &attachment)

0 commit comments

Comments
 (0)