Skip to content

Commit 695b10b

Browse files
SnowMBlafriks
authored andcommitted
Fix API-Endpoint release (#3012)
* Fixes API-Endpoint release (#3005) * Using context.ReferencesGitRepo(); doing the same in the PATCH route. * Add release create, get and update test
1 parent cc0c4a3 commit 695b10b

File tree

3 files changed

+91
-3
lines changed

3 files changed

+91
-3
lines changed

integrations/api_releases_test.go

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
// Copyright 2018 The Gitea Authors. All rights reserved.
2+
// Use of this source code is governed by a MIT-style
3+
// license that can be found in the LICENSE file.
4+
5+
package integrations
6+
7+
import (
8+
"fmt"
9+
"net/http"
10+
"testing"
11+
12+
"code.gitea.io/git"
13+
"code.gitea.io/gitea/models"
14+
api "code.gitea.io/sdk/gitea"
15+
16+
"github.com/stretchr/testify/assert"
17+
)
18+
19+
func TestAPICreateRelease(t *testing.T) {
20+
prepareTestEnv(t)
21+
22+
repo := models.AssertExistsAndLoadBean(t, &models.Repository{ID: 1}).(*models.Repository)
23+
owner := models.AssertExistsAndLoadBean(t, &models.User{ID: repo.OwnerID}).(*models.User)
24+
session := loginUser(t, owner.LowerName)
25+
26+
gitRepo, err := git.OpenRepository(repo.RepoPath())
27+
assert.NoError(t, err)
28+
29+
err = gitRepo.CreateTag("v0.0.1", "master")
30+
assert.NoError(t, err)
31+
32+
commitID, err := gitRepo.GetTagCommitID("v0.0.1")
33+
assert.NoError(t, err)
34+
35+
urlStr := fmt.Sprintf("/api/v1/repos/%s/%s/releases",
36+
owner.Name, repo.Name)
37+
req := NewRequestWithJSON(t, "POST", urlStr, &api.CreateReleaseOption{
38+
TagName: "v0.0.1",
39+
Title: "v0.0.1",
40+
Note: "test",
41+
IsDraft: false,
42+
IsPrerelease: false,
43+
Target: commitID,
44+
})
45+
resp := session.MakeRequest(t, req, http.StatusCreated)
46+
47+
var newRelease api.Release
48+
DecodeJSON(t, resp, &newRelease)
49+
models.AssertExistsAndLoadBean(t, &models.Release{
50+
ID: newRelease.ID,
51+
TagName: newRelease.TagName,
52+
Title: newRelease.Title,
53+
Note: newRelease.Note,
54+
})
55+
56+
urlStr = fmt.Sprintf("/api/v1/repos/%s/%s/releases/%d",
57+
owner.Name, repo.Name, newRelease.ID)
58+
req = NewRequest(t, "GET", urlStr)
59+
resp = session.MakeRequest(t, req, http.StatusOK)
60+
61+
var release api.Release
62+
DecodeJSON(t, resp, &release)
63+
64+
assert.Equal(t, newRelease.TagName, release.TagName)
65+
assert.Equal(t, newRelease.Title, release.Title)
66+
assert.Equal(t, newRelease.Note, release.Note)
67+
68+
req = NewRequestWithJSON(t, "PATCH", urlStr, &api.EditReleaseOption{
69+
TagName: release.TagName,
70+
Title: release.Title,
71+
Note: "updated",
72+
IsDraft: &release.IsDraft,
73+
IsPrerelease: &release.IsPrerelease,
74+
Target: release.Target,
75+
})
76+
resp = session.MakeRequest(t, req, http.StatusOK)
77+
78+
DecodeJSON(t, resp, &newRelease)
79+
models.AssertExistsAndLoadBean(t, &models.Release{
80+
ID: newRelease.ID,
81+
TagName: newRelease.TagName,
82+
Title: newRelease.Title,
83+
Note: newRelease.Note,
84+
})
85+
}

routers/api/v1/api.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -463,9 +463,9 @@ func RegisterRoutes(m *macaron.Macaron) {
463463
})
464464
m.Group("/releases", func() {
465465
m.Combo("").Get(repo.ListReleases).
466-
Post(reqToken(), reqRepoWriter(), bind(api.CreateReleaseOption{}), repo.CreateRelease)
466+
Post(reqToken(), reqRepoWriter(), context.ReferencesGitRepo(), bind(api.CreateReleaseOption{}), repo.CreateRelease)
467467
m.Combo("/:id").Get(repo.GetRelease).
468-
Patch(reqToken(), reqRepoWriter(), bind(api.EditReleaseOption{}), repo.EditRelease).
468+
Patch(reqToken(), reqRepoWriter(), context.ReferencesGitRepo(), bind(api.EditReleaseOption{}), repo.EditRelease).
469469
Delete(reqToken(), reqRepoWriter(), repo.DeleteRelease)
470470
})
471471
m.Post("/mirror-sync", reqToken(), reqRepoWriter(), repo.MirrorSync)

routers/api/v1/repo/release.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ func ListReleases(ctx *context.APIContext) {
9696

9797
// CreateRelease create a release
9898
func CreateRelease(ctx *context.APIContext, form api.CreateReleaseOption) {
99-
// swagger:operation GET /repos/{owner}/{repo}/releases repository repoCreateRelease
99+
// swagger:operation POST /repos/{owner}/{repo}/releases repository repoCreateRelease
100100
// ---
101101
// summary: Create a release
102102
// consumes:
@@ -146,6 +146,7 @@ func CreateRelease(ctx *context.APIContext, form api.CreateReleaseOption) {
146146
IsDraft: form.IsDraft,
147147
IsPrerelease: form.IsPrerelease,
148148
IsTag: false,
149+
Repo: ctx.Repo.Repository,
149150
}
150151
if err := models.CreateRelease(ctx.Repo.GitRepo, rel, nil); err != nil {
151152
if models.IsErrReleaseAlreadyExist(err) {
@@ -167,6 +168,8 @@ func CreateRelease(ctx *context.APIContext, form api.CreateReleaseOption) {
167168
rel.IsPrerelease = form.IsPrerelease
168169
rel.PublisherID = ctx.User.ID
169170
rel.IsTag = false
171+
rel.Repo = ctx.Repo.Repository
172+
rel.Publisher = ctx.User
170173

171174
if err = models.UpdateRelease(ctx.Repo.GitRepo, rel, nil); err != nil {
172175
ctx.ServerError("UpdateRelease", err)

0 commit comments

Comments
 (0)