summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarc Brückner <marc@ma-br.de>2018-01-16 09:54:13 +0100
committerLauris BH <lauris@nix.lv>2018-01-16 10:54:13 +0200
commit695b10beddc640d333fd5864cb6edb03e540b344 (patch)
tree8bf0e4da05f6fc8b5303780abfe2b36bccf4f8bd
parentcc0c4a30a778b27393923d29fe97b8bc33f345f4 (diff)
downloadgitea-695b10beddc640d333fd5864cb6edb03e540b344.tar.gz
gitea-695b10beddc640d333fd5864cb6edb03e540b344.zip
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
-rw-r--r--integrations/api_releases_test.go85
-rw-r--r--routers/api/v1/api.go4
-rw-r--r--routers/api/v1/repo/release.go5
3 files changed, 91 insertions, 3 deletions
diff --git a/integrations/api_releases_test.go b/integrations/api_releases_test.go
new file mode 100644
index 0000000000..678075935c
--- /dev/null
+++ b/integrations/api_releases_test.go
@@ -0,0 +1,85 @@
+// Copyright 2018 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package integrations
+
+import (
+ "fmt"
+ "net/http"
+ "testing"
+
+ "code.gitea.io/git"
+ "code.gitea.io/gitea/models"
+ api "code.gitea.io/sdk/gitea"
+
+ "github.com/stretchr/testify/assert"
+)
+
+func TestAPICreateRelease(t *testing.T) {
+ prepareTestEnv(t)
+
+ repo := models.AssertExistsAndLoadBean(t, &models.Repository{ID: 1}).(*models.Repository)
+ owner := models.AssertExistsAndLoadBean(t, &models.User{ID: repo.OwnerID}).(*models.User)
+ session := loginUser(t, owner.LowerName)
+
+ gitRepo, err := git.OpenRepository(repo.RepoPath())
+ assert.NoError(t, err)
+
+ err = gitRepo.CreateTag("v0.0.1", "master")
+ assert.NoError(t, err)
+
+ commitID, err := gitRepo.GetTagCommitID("v0.0.1")
+ assert.NoError(t, err)
+
+ urlStr := fmt.Sprintf("/api/v1/repos/%s/%s/releases",
+ owner.Name, repo.Name)
+ req := NewRequestWithJSON(t, "POST", urlStr, &api.CreateReleaseOption{
+ TagName: "v0.0.1",
+ Title: "v0.0.1",
+ Note: "test",
+ IsDraft: false,
+ IsPrerelease: false,
+ Target: commitID,
+ })
+ resp := session.MakeRequest(t, req, http.StatusCreated)
+
+ var newRelease api.Release
+ DecodeJSON(t, resp, &newRelease)
+ models.AssertExistsAndLoadBean(t, &models.Release{
+ ID: newRelease.ID,
+ TagName: newRelease.TagName,
+ Title: newRelease.Title,
+ Note: newRelease.Note,
+ })
+
+ urlStr = fmt.Sprintf("/api/v1/repos/%s/%s/releases/%d",
+ owner.Name, repo.Name, newRelease.ID)
+ req = NewRequest(t, "GET", urlStr)
+ resp = session.MakeRequest(t, req, http.StatusOK)
+
+ var release api.Release
+ DecodeJSON(t, resp, &release)
+
+ assert.Equal(t, newRelease.TagName, release.TagName)
+ assert.Equal(t, newRelease.Title, release.Title)
+ assert.Equal(t, newRelease.Note, release.Note)
+
+ req = NewRequestWithJSON(t, "PATCH", urlStr, &api.EditReleaseOption{
+ TagName: release.TagName,
+ Title: release.Title,
+ Note: "updated",
+ IsDraft: &release.IsDraft,
+ IsPrerelease: &release.IsPrerelease,
+ Target: release.Target,
+ })
+ resp = session.MakeRequest(t, req, http.StatusOK)
+
+ DecodeJSON(t, resp, &newRelease)
+ models.AssertExistsAndLoadBean(t, &models.Release{
+ ID: newRelease.ID,
+ TagName: newRelease.TagName,
+ Title: newRelease.Title,
+ Note: newRelease.Note,
+ })
+}
diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go
index 8a300f9958..6bbc014266 100644
--- a/routers/api/v1/api.go
+++ b/routers/api/v1/api.go
@@ -463,9 +463,9 @@ func RegisterRoutes(m *macaron.Macaron) {
})
m.Group("/releases", func() {
m.Combo("").Get(repo.ListReleases).
- Post(reqToken(), reqRepoWriter(), bind(api.CreateReleaseOption{}), repo.CreateRelease)
+ Post(reqToken(), reqRepoWriter(), context.ReferencesGitRepo(), bind(api.CreateReleaseOption{}), repo.CreateRelease)
m.Combo("/:id").Get(repo.GetRelease).
- Patch(reqToken(), reqRepoWriter(), bind(api.EditReleaseOption{}), repo.EditRelease).
+ Patch(reqToken(), reqRepoWriter(), context.ReferencesGitRepo(), bind(api.EditReleaseOption{}), repo.EditRelease).
Delete(reqToken(), reqRepoWriter(), repo.DeleteRelease)
})
m.Post("/mirror-sync", reqToken(), reqRepoWriter(), repo.MirrorSync)
diff --git a/routers/api/v1/repo/release.go b/routers/api/v1/repo/release.go
index f5b529ac6a..41efa482dd 100644
--- a/routers/api/v1/repo/release.go
+++ b/routers/api/v1/repo/release.go
@@ -96,7 +96,7 @@ func ListReleases(ctx *context.APIContext) {
// CreateRelease create a release
func CreateRelease(ctx *context.APIContext, form api.CreateReleaseOption) {
- // swagger:operation GET /repos/{owner}/{repo}/releases repository repoCreateRelease
+ // swagger:operation POST /repos/{owner}/{repo}/releases repository repoCreateRelease
// ---
// summary: Create a release
// consumes:
@@ -146,6 +146,7 @@ func CreateRelease(ctx *context.APIContext, form api.CreateReleaseOption) {
IsDraft: form.IsDraft,
IsPrerelease: form.IsPrerelease,
IsTag: false,
+ Repo: ctx.Repo.Repository,
}
if err := models.CreateRelease(ctx.Repo.GitRepo, rel, nil); err != nil {
if models.IsErrReleaseAlreadyExist(err) {
@@ -167,6 +168,8 @@ func CreateRelease(ctx *context.APIContext, form api.CreateReleaseOption) {
rel.IsPrerelease = form.IsPrerelease
rel.PublisherID = ctx.User.ID
rel.IsTag = false
+ rel.Repo = ctx.Repo.Repository
+ rel.Publisher = ctx.User
if err = models.UpdateRelease(ctx.Repo.GitRepo, rel, nil); err != nil {
ctx.ServerError("UpdateRelease", err)