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

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