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_issue_label_test.go 7.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. // Copyright 2017 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. repo_model "code.gitea.io/gitea/models/repo"
  12. "code.gitea.io/gitea/models/unittest"
  13. user_model "code.gitea.io/gitea/models/user"
  14. api "code.gitea.io/gitea/modules/structs"
  15. "github.com/stretchr/testify/assert"
  16. )
  17. func TestAPIModifyLabels(t *testing.T) {
  18. assert.NoError(t, unittest.LoadFixtures())
  19. repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 2}).(*repo_model.Repository)
  20. owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID}).(*user_model.User)
  21. session := loginUser(t, owner.Name)
  22. token := getTokenForLoggedInUser(t, session)
  23. urlStr := fmt.Sprintf("/api/v1/repos/%s/%s/labels?token=%s", owner.Name, repo.Name, token)
  24. // CreateLabel
  25. req := NewRequestWithJSON(t, "POST", urlStr, &api.CreateLabelOption{
  26. Name: "TestL 1",
  27. Color: "abcdef",
  28. Description: "test label",
  29. })
  30. resp := session.MakeRequest(t, req, http.StatusCreated)
  31. apiLabel := new(api.Label)
  32. DecodeJSON(t, resp, &apiLabel)
  33. dbLabel := unittest.AssertExistsAndLoadBean(t, &models.Label{ID: apiLabel.ID, RepoID: repo.ID}).(*models.Label)
  34. assert.EqualValues(t, dbLabel.Name, apiLabel.Name)
  35. assert.EqualValues(t, strings.TrimLeft(dbLabel.Color, "#"), apiLabel.Color)
  36. req = NewRequestWithJSON(t, "POST", urlStr, &api.CreateLabelOption{
  37. Name: "TestL 2",
  38. Color: "#123456",
  39. Description: "jet another test label",
  40. })
  41. session.MakeRequest(t, req, http.StatusCreated)
  42. req = NewRequestWithJSON(t, "POST", urlStr, &api.CreateLabelOption{
  43. Name: "WrongTestL",
  44. Color: "#12345g",
  45. })
  46. session.MakeRequest(t, req, http.StatusUnprocessableEntity)
  47. // ListLabels
  48. req = NewRequest(t, "GET", urlStr)
  49. resp = session.MakeRequest(t, req, http.StatusOK)
  50. var apiLabels []*api.Label
  51. DecodeJSON(t, resp, &apiLabels)
  52. assert.Len(t, apiLabels, 2)
  53. // GetLabel
  54. singleURLStr := fmt.Sprintf("/api/v1/repos/%s/%s/labels/%d?token=%s", owner.Name, repo.Name, dbLabel.ID, token)
  55. req = NewRequest(t, "GET", singleURLStr)
  56. resp = session.MakeRequest(t, req, http.StatusOK)
  57. DecodeJSON(t, resp, &apiLabel)
  58. assert.EqualValues(t, strings.TrimLeft(dbLabel.Color, "#"), apiLabel.Color)
  59. // EditLabel
  60. newName := "LabelNewName"
  61. newColor := "09876a"
  62. newColorWrong := "09g76a"
  63. req = NewRequestWithJSON(t, "PATCH", singleURLStr, &api.EditLabelOption{
  64. Name: &newName,
  65. Color: &newColor,
  66. })
  67. resp = session.MakeRequest(t, req, http.StatusOK)
  68. DecodeJSON(t, resp, &apiLabel)
  69. assert.EqualValues(t, newColor, apiLabel.Color)
  70. req = NewRequestWithJSON(t, "PATCH", singleURLStr, &api.EditLabelOption{
  71. Color: &newColorWrong,
  72. })
  73. session.MakeRequest(t, req, http.StatusUnprocessableEntity)
  74. // DeleteLabel
  75. req = NewRequest(t, "DELETE", singleURLStr)
  76. session.MakeRequest(t, req, http.StatusNoContent)
  77. }
  78. func TestAPIAddIssueLabels(t *testing.T) {
  79. assert.NoError(t, unittest.LoadFixtures())
  80. repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}).(*repo_model.Repository)
  81. issue := unittest.AssertExistsAndLoadBean(t, &models.Issue{RepoID: repo.ID}).(*models.Issue)
  82. _ = unittest.AssertExistsAndLoadBean(t, &models.Label{RepoID: repo.ID, ID: 2}).(*models.Label)
  83. owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID}).(*user_model.User)
  84. session := loginUser(t, owner.Name)
  85. token := getTokenForLoggedInUser(t, session)
  86. urlStr := fmt.Sprintf("/api/v1/repos/%s/%s/issues/%d/labels?token=%s",
  87. repo.OwnerName, repo.Name, issue.Index, token)
  88. req := NewRequestWithJSON(t, "POST", urlStr, &api.IssueLabelsOption{
  89. Labels: []int64{1, 2},
  90. })
  91. resp := session.MakeRequest(t, req, http.StatusOK)
  92. var apiLabels []*api.Label
  93. DecodeJSON(t, resp, &apiLabels)
  94. assert.Len(t, apiLabels, unittest.GetCount(t, &models.IssueLabel{IssueID: issue.ID}))
  95. unittest.AssertExistsAndLoadBean(t, &models.IssueLabel{IssueID: issue.ID, LabelID: 2})
  96. }
  97. func TestAPIReplaceIssueLabels(t *testing.T) {
  98. assert.NoError(t, unittest.LoadFixtures())
  99. repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}).(*repo_model.Repository)
  100. issue := unittest.AssertExistsAndLoadBean(t, &models.Issue{RepoID: repo.ID}).(*models.Issue)
  101. label := unittest.AssertExistsAndLoadBean(t, &models.Label{RepoID: repo.ID}).(*models.Label)
  102. owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID}).(*user_model.User)
  103. session := loginUser(t, owner.Name)
  104. token := getTokenForLoggedInUser(t, session)
  105. urlStr := fmt.Sprintf("/api/v1/repos/%s/%s/issues/%d/labels?token=%s",
  106. owner.Name, repo.Name, issue.Index, token)
  107. req := NewRequestWithJSON(t, "PUT", urlStr, &api.IssueLabelsOption{
  108. Labels: []int64{label.ID},
  109. })
  110. resp := session.MakeRequest(t, req, http.StatusOK)
  111. var apiLabels []*api.Label
  112. DecodeJSON(t, resp, &apiLabels)
  113. if assert.Len(t, apiLabels, 1) {
  114. assert.EqualValues(t, label.ID, apiLabels[0].ID)
  115. }
  116. unittest.AssertCount(t, &models.IssueLabel{IssueID: issue.ID}, 1)
  117. unittest.AssertExistsAndLoadBean(t, &models.IssueLabel{IssueID: issue.ID, LabelID: label.ID})
  118. }
  119. func TestAPIModifyOrgLabels(t *testing.T) {
  120. assert.NoError(t, unittest.LoadFixtures())
  121. repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 3}).(*repo_model.Repository)
  122. owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID}).(*user_model.User)
  123. user := "user1"
  124. session := loginUser(t, user)
  125. token := getTokenForLoggedInUser(t, session)
  126. urlStr := fmt.Sprintf("/api/v1/orgs/%s/labels?token=%s", owner.Name, token)
  127. // CreateLabel
  128. req := NewRequestWithJSON(t, "POST", urlStr, &api.CreateLabelOption{
  129. Name: "TestL 1",
  130. Color: "abcdef",
  131. Description: "test label",
  132. })
  133. resp := session.MakeRequest(t, req, http.StatusCreated)
  134. apiLabel := new(api.Label)
  135. DecodeJSON(t, resp, &apiLabel)
  136. dbLabel := unittest.AssertExistsAndLoadBean(t, &models.Label{ID: apiLabel.ID, OrgID: owner.ID}).(*models.Label)
  137. assert.EqualValues(t, dbLabel.Name, apiLabel.Name)
  138. assert.EqualValues(t, strings.TrimLeft(dbLabel.Color, "#"), apiLabel.Color)
  139. req = NewRequestWithJSON(t, "POST", urlStr, &api.CreateLabelOption{
  140. Name: "TestL 2",
  141. Color: "#123456",
  142. Description: "jet another test label",
  143. })
  144. session.MakeRequest(t, req, http.StatusCreated)
  145. req = NewRequestWithJSON(t, "POST", urlStr, &api.CreateLabelOption{
  146. Name: "WrongTestL",
  147. Color: "#12345g",
  148. })
  149. session.MakeRequest(t, req, http.StatusUnprocessableEntity)
  150. // ListLabels
  151. req = NewRequest(t, "GET", urlStr)
  152. resp = session.MakeRequest(t, req, http.StatusOK)
  153. var apiLabels []*api.Label
  154. DecodeJSON(t, resp, &apiLabels)
  155. assert.Len(t, apiLabels, 4)
  156. // GetLabel
  157. singleURLStr := fmt.Sprintf("/api/v1/orgs/%s/labels/%d?token=%s", owner.Name, dbLabel.ID, token)
  158. req = NewRequest(t, "GET", singleURLStr)
  159. resp = session.MakeRequest(t, req, http.StatusOK)
  160. DecodeJSON(t, resp, &apiLabel)
  161. assert.EqualValues(t, strings.TrimLeft(dbLabel.Color, "#"), apiLabel.Color)
  162. // EditLabel
  163. newName := "LabelNewName"
  164. newColor := "09876a"
  165. newColorWrong := "09g76a"
  166. req = NewRequestWithJSON(t, "PATCH", singleURLStr, &api.EditLabelOption{
  167. Name: &newName,
  168. Color: &newColor,
  169. })
  170. resp = session.MakeRequest(t, req, http.StatusOK)
  171. DecodeJSON(t, resp, &apiLabel)
  172. assert.EqualValues(t, newColor, apiLabel.Color)
  173. req = NewRequestWithJSON(t, "PATCH", singleURLStr, &api.EditLabelOption{
  174. Color: &newColorWrong,
  175. })
  176. session.MakeRequest(t, req, http.StatusUnprocessableEntity)
  177. // DeleteLabel
  178. req = NewRequest(t, "DELETE", singleURLStr)
  179. session.MakeRequest(t, req, http.StatusNoContent)
  180. }