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.5KB

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