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.

issue_label_test.go 5.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. // Copyright 2017 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package repo
  4. import (
  5. "net/http"
  6. "strconv"
  7. "testing"
  8. issues_model "code.gitea.io/gitea/models/issues"
  9. "code.gitea.io/gitea/models/unittest"
  10. "code.gitea.io/gitea/modules/contexttest"
  11. "code.gitea.io/gitea/modules/repository"
  12. "code.gitea.io/gitea/modules/test"
  13. "code.gitea.io/gitea/modules/web"
  14. "code.gitea.io/gitea/services/forms"
  15. "github.com/stretchr/testify/assert"
  16. )
  17. func int64SliceToCommaSeparated(a []int64) string {
  18. s := ""
  19. for i, n := range a {
  20. if i > 0 {
  21. s += ","
  22. }
  23. s += strconv.Itoa(int(n))
  24. }
  25. return s
  26. }
  27. func TestInitializeLabels(t *testing.T) {
  28. unittest.PrepareTestEnv(t)
  29. assert.NoError(t, repository.LoadRepoConfig())
  30. ctx, _ := contexttest.MockContext(t, "user2/repo1/labels/initialize")
  31. contexttest.LoadUser(t, ctx, 2)
  32. contexttest.LoadRepo(t, ctx, 2)
  33. web.SetForm(ctx, &forms.InitializeLabelsForm{TemplateName: "Default"})
  34. InitializeLabels(ctx)
  35. assert.EqualValues(t, http.StatusSeeOther, ctx.Resp.Status())
  36. unittest.AssertExistsAndLoadBean(t, &issues_model.Label{
  37. RepoID: 2,
  38. Name: "enhancement",
  39. Color: "#84b6eb",
  40. })
  41. assert.Equal(t, "/user2/repo2/labels", test.RedirectURL(ctx.Resp))
  42. }
  43. func TestRetrieveLabels(t *testing.T) {
  44. unittest.PrepareTestEnv(t)
  45. for _, testCase := range []struct {
  46. RepoID int64
  47. Sort string
  48. ExpectedLabelIDs []int64
  49. }{
  50. {1, "", []int64{1, 2}},
  51. {1, "leastissues", []int64{2, 1}},
  52. {2, "", []int64{}},
  53. } {
  54. ctx, _ := contexttest.MockContext(t, "user/repo/issues")
  55. contexttest.LoadUser(t, ctx, 2)
  56. contexttest.LoadRepo(t, ctx, testCase.RepoID)
  57. ctx.Req.Form.Set("sort", testCase.Sort)
  58. RetrieveLabels(ctx)
  59. assert.False(t, ctx.Written())
  60. labels, ok := ctx.Data["Labels"].([]*issues_model.Label)
  61. assert.True(t, ok)
  62. if assert.Len(t, labels, len(testCase.ExpectedLabelIDs)) {
  63. for i, label := range labels {
  64. assert.EqualValues(t, testCase.ExpectedLabelIDs[i], label.ID)
  65. }
  66. }
  67. }
  68. }
  69. func TestNewLabel(t *testing.T) {
  70. unittest.PrepareTestEnv(t)
  71. ctx, _ := contexttest.MockContext(t, "user2/repo1/labels/edit")
  72. contexttest.LoadUser(t, ctx, 2)
  73. contexttest.LoadRepo(t, ctx, 1)
  74. web.SetForm(ctx, &forms.CreateLabelForm{
  75. Title: "newlabel",
  76. Color: "#abcdef",
  77. })
  78. NewLabel(ctx)
  79. assert.EqualValues(t, http.StatusSeeOther, ctx.Resp.Status())
  80. unittest.AssertExistsAndLoadBean(t, &issues_model.Label{
  81. Name: "newlabel",
  82. Color: "#abcdef",
  83. })
  84. assert.Equal(t, "/user2/repo1/labels", test.RedirectURL(ctx.Resp))
  85. }
  86. func TestUpdateLabel(t *testing.T) {
  87. unittest.PrepareTestEnv(t)
  88. ctx, _ := contexttest.MockContext(t, "user2/repo1/labels/edit")
  89. contexttest.LoadUser(t, ctx, 2)
  90. contexttest.LoadRepo(t, ctx, 1)
  91. web.SetForm(ctx, &forms.CreateLabelForm{
  92. ID: 2,
  93. Title: "newnameforlabel",
  94. Color: "#abcdef",
  95. IsArchived: true,
  96. })
  97. UpdateLabel(ctx)
  98. assert.EqualValues(t, http.StatusSeeOther, ctx.Resp.Status())
  99. unittest.AssertExistsAndLoadBean(t, &issues_model.Label{
  100. ID: 2,
  101. Name: "newnameforlabel",
  102. Color: "#abcdef",
  103. })
  104. assert.Equal(t, "/user2/repo1/labels", test.RedirectURL(ctx.Resp))
  105. }
  106. func TestDeleteLabel(t *testing.T) {
  107. unittest.PrepareTestEnv(t)
  108. ctx, _ := contexttest.MockContext(t, "user2/repo1/labels/delete")
  109. contexttest.LoadUser(t, ctx, 2)
  110. contexttest.LoadRepo(t, ctx, 1)
  111. ctx.Req.Form.Set("id", "2")
  112. DeleteLabel(ctx)
  113. assert.EqualValues(t, http.StatusOK, ctx.Resp.Status())
  114. unittest.AssertNotExistsBean(t, &issues_model.Label{ID: 2})
  115. unittest.AssertNotExistsBean(t, &issues_model.IssueLabel{LabelID: 2})
  116. assert.Equal(t, ctx.Tr("repo.issues.label_deletion_success"), ctx.Flash.SuccessMsg)
  117. }
  118. func TestUpdateIssueLabel_Clear(t *testing.T) {
  119. unittest.PrepareTestEnv(t)
  120. ctx, _ := contexttest.MockContext(t, "user2/repo1/issues/labels")
  121. contexttest.LoadUser(t, ctx, 2)
  122. contexttest.LoadRepo(t, ctx, 1)
  123. ctx.Req.Form.Set("issue_ids", "1,3")
  124. ctx.Req.Form.Set("action", "clear")
  125. UpdateIssueLabel(ctx)
  126. assert.EqualValues(t, http.StatusOK, ctx.Resp.Status())
  127. unittest.AssertNotExistsBean(t, &issues_model.IssueLabel{IssueID: 1})
  128. unittest.AssertNotExistsBean(t, &issues_model.IssueLabel{IssueID: 3})
  129. unittest.CheckConsistencyFor(t, &issues_model.Label{})
  130. }
  131. func TestUpdateIssueLabel_Toggle(t *testing.T) {
  132. for _, testCase := range []struct {
  133. Action string
  134. IssueIDs []int64
  135. LabelID int64
  136. ExpectedAdd bool // whether we expect the label to be added to the issues
  137. }{
  138. {"attach", []int64{1, 3}, 1, true},
  139. {"detach", []int64{1, 3}, 1, false},
  140. {"toggle", []int64{1, 3}, 1, false},
  141. {"toggle", []int64{1, 2}, 2, true},
  142. } {
  143. unittest.PrepareTestEnv(t)
  144. ctx, _ := contexttest.MockContext(t, "user2/repo1/issues/labels")
  145. contexttest.LoadUser(t, ctx, 2)
  146. contexttest.LoadRepo(t, ctx, 1)
  147. ctx.Req.Form.Set("issue_ids", int64SliceToCommaSeparated(testCase.IssueIDs))
  148. ctx.Req.Form.Set("action", testCase.Action)
  149. ctx.Req.Form.Set("id", strconv.Itoa(int(testCase.LabelID)))
  150. UpdateIssueLabel(ctx)
  151. assert.EqualValues(t, http.StatusOK, ctx.Resp.Status())
  152. for _, issueID := range testCase.IssueIDs {
  153. unittest.AssertExistsIf(t, testCase.ExpectedAdd, &issues_model.IssueLabel{
  154. IssueID: issueID,
  155. LabelID: testCase.LabelID,
  156. })
  157. }
  158. unittest.CheckConsistencyFor(t, &issues_model.Label{})
  159. }
  160. }