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