diff options
author | Ethan Koenig <etk39@cornell.edu> | 2017-01-31 20:31:35 -0500 |
---|---|---|
committer | Lunny Xiao <xiaolunwen@gmail.com> | 2017-02-01 09:31:35 +0800 |
commit | 10644d6dd7574b031118bf01b2bd737017230ffd (patch) | |
tree | 42f4fa34184145defb2237a78306c6da3c1ed3bd /models/issue_label_test.go | |
parent | 0a02fb3c4fc241aca54e4ec62e4029e6db3be3f9 (diff) | |
download | gitea-10644d6dd7574b031118bf01b2bd737017230ffd.tar.gz gitea-10644d6dd7574b031118bf01b2bd737017230ffd.zip |
Bug fixes and unit tests for models/issue_label (#802)
Diffstat (limited to 'models/issue_label_test.go')
-rw-r--r-- | models/issue_label_test.go | 244 |
1 files changed, 244 insertions, 0 deletions
diff --git a/models/issue_label_test.go b/models/issue_label_test.go new file mode 100644 index 0000000000..a1cdb8c9b6 --- /dev/null +++ b/models/issue_label_test.go @@ -0,0 +1,244 @@ +// Copyright 2017 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package models + +import ( + "html/template" + "testing" + + api "code.gitea.io/sdk/gitea" + + "github.com/stretchr/testify/assert" +) + +// TODO TestGetLabelTemplateFile + +func TestLabel_APIFormat(t *testing.T) { + assert.NoError(t, PrepareTestDatabase()) + label := AssertExistsAndLoadBean(t, &Label{ID: 1}).(*Label) + assert.Equal(t, api.Label{ + ID: label.ID, + Name: label.Name, + Color: "abcdef", + }, *label.APIFormat()) +} + +func TestLabel_CalOpenIssues(t *testing.T) { + assert.NoError(t, PrepareTestDatabase()) + label := AssertExistsAndLoadBean(t, &Label{ID: 1}).(*Label) + label.CalOpenIssues() + assert.EqualValues(t, 2, label.NumOpenIssues) +} + +func TestLabel_ForegroundColor(t *testing.T) { + assert.NoError(t, PrepareTestDatabase()) + label := AssertExistsAndLoadBean(t, &Label{ID: 1}).(*Label) + assert.Equal(t, template.CSS("#000"), label.ForegroundColor()) + + label = AssertExistsAndLoadBean(t, &Label{ID: 2}).(*Label) + assert.Equal(t, template.CSS("#fff"), label.ForegroundColor()) +} + +func TestNewLabels(t *testing.T) { + assert.NoError(t, PrepareTestDatabase()) + labels := []*Label{ + {RepoID: 2, Name: "labelName2", Color: "#123456"}, + {RepoID: 3, Name: "labelName3", Color: "#234567"}, + } + for _, label := range labels { + AssertNotExistsBean(t, label) + } + assert.NoError(t, NewLabels(labels...)) + for _, label := range labels { + AssertExistsAndLoadBean(t, label) + } +} + +func TestGetLabelByID(t *testing.T) { + assert.NoError(t, PrepareTestDatabase()) + label, err := GetLabelByID(1) + assert.NoError(t, err) + assert.EqualValues(t, 1, label.ID) + + _, err = GetLabelByID(NonexistentID) + assert.True(t, IsErrLabelNotExist(err)) +} + +func TestGetLabelInRepoByName(t *testing.T) { + assert.NoError(t, PrepareTestDatabase()) + label, err := GetLabelInRepoByName(1, "label1") + assert.NoError(t, err) + assert.EqualValues(t, 1, label.ID) + assert.Equal(t, "label1", label.Name) + + _, err = GetLabelInRepoByName(1, "") + assert.True(t, IsErrLabelNotExist(err)) + + _, err = GetLabelInRepoByName(NonexistentID, "nonexistent") + assert.True(t, IsErrLabelNotExist(err)) +} + +func TestGetLabelInRepoByID(t *testing.T) { + assert.NoError(t, PrepareTestDatabase()) + label, err := GetLabelInRepoByID(1, 1) + assert.NoError(t, err) + assert.EqualValues(t, 1, label.ID) + + _, err = GetLabelInRepoByID(1, -1) + assert.True(t, IsErrLabelNotExist(err)) + + _, err = GetLabelInRepoByID(NonexistentID, NonexistentID) + assert.True(t, IsErrLabelNotExist(err)) +} + +func TestGetLabelsInRepoByIDs(t *testing.T) { + assert.NoError(t, PrepareTestDatabase()) + labels, err := GetLabelsInRepoByIDs(1, []int64{1, 2, NonexistentID}) + assert.NoError(t, err) + assert.Len(t, labels, 2) + assert.EqualValues(t, 1, labels[0].ID) + assert.EqualValues(t, 2, labels[1].ID) +} + +func TestGetLabelsByRepoID(t *testing.T) { + assert.NoError(t, PrepareTestDatabase()) + testSuccess := func(repoID int64, sortType string, expectedIssueIDs []int64) { + labels, err := GetLabelsByRepoID(repoID, sortType) + assert.NoError(t, err) + assert.Len(t, labels, len(expectedIssueIDs)) + for i, label := range labels { + assert.EqualValues(t, expectedIssueIDs[i], label.ID) + } + } + testSuccess(1, "leastissues", []int64{2, 1}) + testSuccess(1, "mostissues", []int64{1, 2}) + testSuccess(1, "reversealphabetically", []int64{2, 1}) + testSuccess(1, "default", []int64{1, 2}) +} + +func TestGetLabelsByIssueID(t *testing.T) { + assert.NoError(t, PrepareTestDatabase()) + labels, err := GetLabelsByIssueID(1) + assert.NoError(t, err) + assert.Len(t, labels, 1) + assert.EqualValues(t, 1, labels[0].ID) + + labels, err = GetLabelsByIssueID(NonexistentID) + assert.NoError(t, err) + assert.Len(t, labels, 0) +} + +func TestUpdateLabel(t *testing.T) { + assert.NoError(t, PrepareTestDatabase()) + label := AssertExistsAndLoadBean(t, &Label{ID: 1}).(*Label) + label.Color = "#ffff00" + label.Name = "newLabelName" + assert.NoError(t, UpdateLabel(label)) + newLabel := AssertExistsAndLoadBean(t, &Label{ID: 1}).(*Label) + assert.Equal(t, *label, *newLabel) +} + +func TestDeleteLabel(t *testing.T) { + assert.NoError(t, PrepareTestDatabase()) + label := AssertExistsAndLoadBean(t, &Label{ID: 1}).(*Label) + assert.NoError(t, DeleteLabel(label.RepoID, label.ID)) + AssertNotExistsBean(t, &Label{ID: label.ID, RepoID: label.RepoID}) + + assert.NoError(t, DeleteLabel(label.RepoID, label.ID)) + AssertNotExistsBean(t, &Label{ID: label.ID, RepoID: label.RepoID}) + + assert.NoError(t, DeleteLabel(NonexistentID, NonexistentID)) +} + +func TestHasIssueLabel(t *testing.T) { + assert.NoError(t, PrepareTestDatabase()) + assert.True(t, HasIssueLabel(1, 1)) + assert.False(t, HasIssueLabel(1, 2)) + assert.False(t, HasIssueLabel(NonexistentID, NonexistentID)) +} + +func TestNewIssueLabel(t *testing.T) { + assert.NoError(t, PrepareTestDatabase()) + label := AssertExistsAndLoadBean(t, &Label{ID: 2}).(*Label) + issue := AssertExistsAndLoadBean(t, &Issue{ID: 1}).(*Issue) + doer := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User) + + // add new IssueLabel + prevNumIssues := label.NumIssues + assert.NoError(t, NewIssueLabel(issue, label, doer)) + AssertExistsAndLoadBean(t, &IssueLabel{IssueID: issue.ID, LabelID: label.ID}) + AssertExistsAndLoadBean(t, &Comment{ + Type: CommentTypeLabel, + PosterID: doer.ID, + IssueID: issue.ID, + LabelID: label.ID, + Content: "1", + }) + assert.EqualValues(t, prevNumIssues+1, label.NumIssues) + + // re-add existing IssueLabel + assert.NoError(t, NewIssueLabel(issue, label, doer)) +} + +func TestNewIssueLabels(t *testing.T) { + assert.NoError(t, PrepareTestDatabase()) + label1 := AssertExistsAndLoadBean(t, &Label{ID: 1}).(*Label) + label2 := AssertExistsAndLoadBean(t, &Label{ID: 2}).(*Label) + issue := AssertExistsAndLoadBean(t, &Issue{ID: 5}).(*Issue) + doer := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User) + + assert.NoError(t, NewIssueLabels(issue, []*Label{label1, label2}, doer)) + AssertExistsAndLoadBean(t, &IssueLabel{IssueID: issue.ID, LabelID: label1.ID}) + AssertExistsAndLoadBean(t, &Comment{ + Type: CommentTypeLabel, + PosterID: doer.ID, + IssueID: issue.ID, + LabelID: label1.ID, + Content: "1", + }) + AssertExistsAndLoadBean(t, &IssueLabel{IssueID: issue.ID, LabelID: label1.ID}) + label1 = AssertExistsAndLoadBean(t, &Label{ID: 1}).(*Label) + assert.EqualValues(t, 3, label1.NumIssues) + assert.EqualValues(t, 1, label1.NumClosedIssues) + label2 = AssertExistsAndLoadBean(t, &Label{ID: 2}).(*Label) + assert.EqualValues(t, 1, label2.NumIssues) + assert.EqualValues(t, 1, label2.NumClosedIssues) + + // corner case: test empty slice + assert.NoError(t, NewIssueLabels(issue, []*Label{}, doer)) +} + +func TestDeleteIssueLabel(t *testing.T) { + assert.NoError(t, PrepareTestDatabase()) + testSuccess := func(labelID, issueID, doerID int64) { + label := AssertExistsAndLoadBean(t, &Label{ID: labelID}).(*Label) + issue := AssertExistsAndLoadBean(t, &Issue{ID: issueID}).(*Issue) + doer := AssertExistsAndLoadBean(t, &User{ID: doerID}).(*User) + + expectedNumIssues := label.NumIssues + expectedNumClosedIssues := label.NumClosedIssues + if BeanExists(t, &IssueLabel{IssueID: issueID, LabelID: labelID}) { + expectedNumIssues-- + if issue.IsClosed { + expectedNumClosedIssues-- + } + } + + assert.NoError(t, DeleteIssueLabel(issue, label, doer)) + AssertNotExistsBean(t, &IssueLabel{IssueID: issueID, LabelID: labelID}) + AssertExistsAndLoadBean(t, &Comment{ + Type: CommentTypeLabel, + PosterID: doerID, + IssueID: issueID, + LabelID: labelID, + }, `content=""`) + label = AssertExistsAndLoadBean(t, &Label{ID: labelID}).(*Label) + assert.EqualValues(t, expectedNumIssues, label.NumIssues) + assert.EqualValues(t, expectedNumClosedIssues, label.NumClosedIssues) + } + testSuccess(1, 1, 2) + testSuccess(2, 5, 2) + testSuccess(1, 1, 2) // delete non-existent IssueLabel +} |