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
This commit is contained in:
		
							parent
							
								
									cc0c4a30a7
								
							
						
					
					
						commit
						695b10bedd
					
				
					 3 changed files with 91 additions and 3 deletions
				
			
		
							
								
								
									
										85
									
								
								integrations/api_releases_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								integrations/api_releases_test.go
									
									
									
									
									
										Normal file
									
								
							|  | @ -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, | ||||
| 	}) | ||||
| } | ||||
|  | @ -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) | ||||
|  |  | |||
|  | @ -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) | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue