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  }