Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

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