You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

api_releases_test.go 4.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  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. package integrations
  5. import (
  6. "fmt"
  7. "net/http"
  8. "strings"
  9. "testing"
  10. "code.gitea.io/gitea/models"
  11. "code.gitea.io/gitea/modules/git"
  12. api "code.gitea.io/gitea/modules/structs"
  13. "github.com/stretchr/testify/assert"
  14. )
  15. func createNewReleaseUsingAPI(t *testing.T, session *TestSession, token string, owner *models.User, repo *models.Repository, name, target, title, desc string) *api.Release {
  16. urlStr := fmt.Sprintf("/api/v1/repos/%s/%s/releases?token=%s",
  17. owner.Name, repo.Name, token)
  18. req := NewRequestWithJSON(t, "POST", urlStr, &api.CreateReleaseOption{
  19. TagName: name,
  20. Title: title,
  21. Note: desc,
  22. IsDraft: false,
  23. IsPrerelease: false,
  24. Target: target,
  25. })
  26. resp := session.MakeRequest(t, req, http.StatusCreated)
  27. var newRelease api.Release
  28. DecodeJSON(t, resp, &newRelease)
  29. models.AssertExistsAndLoadBean(t, &models.Release{
  30. ID: newRelease.ID,
  31. TagName: newRelease.TagName,
  32. Title: newRelease.Title,
  33. Note: newRelease.Note,
  34. })
  35. return &newRelease
  36. }
  37. func TestAPICreateAndUpdateRelease(t *testing.T) {
  38. defer prepareTestEnv(t)()
  39. repo := models.AssertExistsAndLoadBean(t, &models.Repository{ID: 1}).(*models.Repository)
  40. owner := models.AssertExistsAndLoadBean(t, &models.User{ID: repo.OwnerID}).(*models.User)
  41. session := loginUser(t, owner.LowerName)
  42. token := getTokenForLoggedInUser(t, session)
  43. gitRepo, err := git.OpenRepository(repo.RepoPath())
  44. assert.NoError(t, err)
  45. defer gitRepo.Close()
  46. err = gitRepo.CreateTag("v0.0.1", "master")
  47. assert.NoError(t, err)
  48. target, err := gitRepo.GetTagCommitID("v0.0.1")
  49. assert.NoError(t, err)
  50. newRelease := createNewReleaseUsingAPI(t, session, token, owner, repo, "v0.0.1", target, "v0.0.1", "test")
  51. urlStr := fmt.Sprintf("/api/v1/repos/%s/%s/releases/%d?token=%s",
  52. owner.Name, repo.Name, newRelease.ID, token)
  53. req := NewRequest(t, "GET", urlStr)
  54. resp := session.MakeRequest(t, req, http.StatusOK)
  55. var release api.Release
  56. DecodeJSON(t, resp, &release)
  57. assert.Equal(t, newRelease.TagName, release.TagName)
  58. assert.Equal(t, newRelease.Title, release.Title)
  59. assert.Equal(t, newRelease.Note, release.Note)
  60. req = NewRequestWithJSON(t, "PATCH", urlStr, &api.EditReleaseOption{
  61. TagName: release.TagName,
  62. Title: release.Title,
  63. Note: "updated",
  64. IsDraft: &release.IsDraft,
  65. IsPrerelease: &release.IsPrerelease,
  66. Target: release.Target,
  67. })
  68. resp = session.MakeRequest(t, req, http.StatusOK)
  69. DecodeJSON(t, resp, &newRelease)
  70. models.AssertExistsAndLoadBean(t, &models.Release{
  71. ID: newRelease.ID,
  72. TagName: newRelease.TagName,
  73. Title: newRelease.Title,
  74. Note: newRelease.Note,
  75. })
  76. }
  77. func TestAPICreateReleaseToDefaultBranch(t *testing.T) {
  78. defer prepareTestEnv(t)()
  79. repo := models.AssertExistsAndLoadBean(t, &models.Repository{ID: 1}).(*models.Repository)
  80. owner := models.AssertExistsAndLoadBean(t, &models.User{ID: repo.OwnerID}).(*models.User)
  81. session := loginUser(t, owner.LowerName)
  82. token := getTokenForLoggedInUser(t, session)
  83. createNewReleaseUsingAPI(t, session, token, owner, repo, "v0.0.1", "", "v0.0.1", "test")
  84. }
  85. func TestAPICreateReleaseToDefaultBranchOnExistingTag(t *testing.T) {
  86. defer prepareTestEnv(t)()
  87. repo := models.AssertExistsAndLoadBean(t, &models.Repository{ID: 1}).(*models.Repository)
  88. owner := models.AssertExistsAndLoadBean(t, &models.User{ID: repo.OwnerID}).(*models.User)
  89. session := loginUser(t, owner.LowerName)
  90. token := getTokenForLoggedInUser(t, session)
  91. gitRepo, err := git.OpenRepository(repo.RepoPath())
  92. assert.NoError(t, err)
  93. defer gitRepo.Close()
  94. err = gitRepo.CreateTag("v0.0.1", "master")
  95. assert.NoError(t, err)
  96. createNewReleaseUsingAPI(t, session, token, owner, repo, "v0.0.1", "", "v0.0.1", "test")
  97. }
  98. func TestAPIGetReleaseByTag(t *testing.T) {
  99. defer prepareTestEnv(t)()
  100. repo := models.AssertExistsAndLoadBean(t, &models.Repository{ID: 1}).(*models.Repository)
  101. owner := models.AssertExistsAndLoadBean(t, &models.User{ID: repo.OwnerID}).(*models.User)
  102. session := loginUser(t, owner.LowerName)
  103. tag := "v1.1"
  104. urlStr := fmt.Sprintf("/api/v1/repos/%s/%s/releases/tags/%s/",
  105. owner.Name, repo.Name, tag)
  106. req := NewRequestf(t, "GET", urlStr)
  107. resp := session.MakeRequest(t, req, http.StatusOK)
  108. var release *api.Release
  109. DecodeJSON(t, resp, &release)
  110. assert.Equal(t, "testing-release", release.Title)
  111. nonexistingtag := "nonexistingtag"
  112. urlStr = fmt.Sprintf("/api/v1/repos/%s/%s/releases/tags/%s/",
  113. owner.Name, repo.Name, nonexistingtag)
  114. req = NewRequestf(t, "GET", urlStr)
  115. resp = session.MakeRequest(t, req, http.StatusNotFound)
  116. var err *api.APIError
  117. DecodeJSON(t, resp, &err)
  118. assert.True(t, strings.HasPrefix(err.Message, "release tag does not exist"))
  119. }