|
4 | 4 | package integration |
5 | 5 |
|
6 | 6 | import ( |
| 7 | + "bytes" |
7 | 8 | "fmt" |
| 9 | + "io" |
| 10 | + "mime/multipart" |
8 | 11 | "net/http" |
9 | 12 | "net/url" |
| 13 | + "strings" |
10 | 14 | "testing" |
11 | 15 |
|
12 | 16 | auth_model "code.gitea.io/gitea/models/auth" |
@@ -38,12 +42,15 @@ func TestAPIListReleases(t *testing.T) { |
38 | 42 | case 1: |
39 | 43 | assert.False(t, release.IsDraft) |
40 | 44 | assert.False(t, release.IsPrerelease) |
| 45 | + assert.True(t, strings.HasSuffix(release.UploadURL, "/api/v1/repos/user2/repo1/releases/1/assets"), release.UploadURL) |
41 | 46 | case 4: |
42 | 47 | assert.True(t, release.IsDraft) |
43 | 48 | assert.False(t, release.IsPrerelease) |
| 49 | + assert.True(t, strings.HasSuffix(release.UploadURL, "/api/v1/repos/user2/repo1/releases/4/assets"), release.UploadURL) |
44 | 50 | case 5: |
45 | 51 | assert.False(t, release.IsDraft) |
46 | 52 | assert.True(t, release.IsPrerelease) |
| 53 | + assert.True(t, strings.HasSuffix(release.UploadURL, "/api/v1/repos/user2/repo1/releases/5/assets"), release.UploadURL) |
47 | 54 | default: |
48 | 55 | assert.NoError(t, fmt.Errorf("unexpected release: %v", release)) |
49 | 56 | } |
@@ -248,3 +255,36 @@ func TestAPIDeleteReleaseByTagName(t *testing.T) { |
248 | 255 | req = NewRequestf(t, http.MethodDelete, fmt.Sprintf("/api/v1/repos/%s/%s/tags/release-tag?token=%s", owner.Name, repo.Name, token)) |
249 | 256 | _ = MakeRequest(t, req, http.StatusNoContent) |
250 | 257 | } |
| 258 | + |
| 259 | +func TestAPIUploadAssetRelease(t *testing.T) { |
| 260 | + defer tests.PrepareTestEnv(t)() |
| 261 | + |
| 262 | + repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}) |
| 263 | + owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID}) |
| 264 | + session := loginUser(t, owner.LowerName) |
| 265 | + token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteRepository) |
| 266 | + |
| 267 | + r := createNewReleaseUsingAPI(t, session, token, owner, repo, "release-tag", "", "Release Tag", "test") |
| 268 | + |
| 269 | + filename := "image.png" |
| 270 | + buff := generateImg() |
| 271 | + body := &bytes.Buffer{} |
| 272 | + |
| 273 | + writer := multipart.NewWriter(body) |
| 274 | + part, err := writer.CreateFormFile("attachment", filename) |
| 275 | + assert.NoError(t, err) |
| 276 | + _, err = io.Copy(part, &buff) |
| 277 | + assert.NoError(t, err) |
| 278 | + err = writer.Close() |
| 279 | + assert.NoError(t, err) |
| 280 | + |
| 281 | + req := NewRequestWithBody(t, http.MethodPost, fmt.Sprintf("/api/v1/repos/%s/%s/releases/%d/assets?name=test-asset&token=%s", owner.Name, repo.Name, r.ID, token), body) |
| 282 | + req.Header.Add("Content-Type", writer.FormDataContentType()) |
| 283 | + resp := MakeRequest(t, req, http.StatusCreated) |
| 284 | + |
| 285 | + var attachment *api.Attachment |
| 286 | + DecodeJSON(t, resp, &attachment) |
| 287 | + |
| 288 | + assert.EqualValues(t, "test-asset", attachment.Name) |
| 289 | + assert.EqualValues(t, 104, attachment.Size) |
| 290 | +} |
0 commit comments