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 4.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  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. }