Files
Atay-Makhzan/tests/integration/api_issue_label_test.go
T

209 lines
7.4 KiB
Go
Raw Normal View History

2017-06-24 19:52:51 -04:00
// Copyright 2017 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
2017-06-24 19:52:51 -04:00
2022-09-02 15:18:23 -04:00
package integration
2017-06-24 19:52:51 -04:00
import (
"fmt"
"net/http"
"strings"
2017-06-24 19:52:51 -04:00
"testing"
2023-01-17 16:46:03 -05:00
auth_model "code.gitea.io/gitea/models/auth"
issues_model "code.gitea.io/gitea/models/issues"
repo_model "code.gitea.io/gitea/models/repo"
"code.gitea.io/gitea/models/unittest"
user_model "code.gitea.io/gitea/models/user"
2019-05-11 18:21:34 +08:00
api "code.gitea.io/gitea/modules/structs"
2017-06-24 19:52:51 -04:00
"github.com/stretchr/testify/assert"
)
func TestAPIModifyLabels(t *testing.T) {
assert.NoError(t, unittest.LoadFixtures())
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 2})
owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID})
session := loginUser(t, owner.Name)
2023-06-04 14:57:16 -04:00
token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteIssue)
urlStr := fmt.Sprintf("/api/v1/repos/%s/%s/labels?token=%s", owner.Name, repo.Name, token)
// CreateLabel
req := NewRequestWithJSON(t, "POST", urlStr, &api.CreateLabelOption{
Name: "TestL 1",
Color: "abcdef",
Description: "test label",
})
2022-12-02 11:39:42 +08:00
resp := MakeRequest(t, req, http.StatusCreated)
apiLabel := new(api.Label)
DecodeJSON(t, resp, &apiLabel)
dbLabel := unittest.AssertExistsAndLoadBean(t, &issues_model.Label{ID: apiLabel.ID, RepoID: repo.ID})
assert.EqualValues(t, dbLabel.Name, apiLabel.Name)
assert.EqualValues(t, strings.TrimLeft(dbLabel.Color, "#"), apiLabel.Color)
req = NewRequestWithJSON(t, "POST", urlStr, &api.CreateLabelOption{
Name: "TestL 2",
Color: "#123456",
Description: "jet another test label",
})
2022-12-02 11:39:42 +08:00
MakeRequest(t, req, http.StatusCreated)
req = NewRequestWithJSON(t, "POST", urlStr, &api.CreateLabelOption{
Name: "WrongTestL",
Color: "#12345g",
})
2022-12-02 11:39:42 +08:00
MakeRequest(t, req, http.StatusUnprocessableEntity)
2022-01-20 18:46:10 +01:00
// ListLabels
req = NewRequest(t, "GET", urlStr)
2022-12-02 11:39:42 +08:00
resp = MakeRequest(t, req, http.StatusOK)
var apiLabels []*api.Label
DecodeJSON(t, resp, &apiLabels)
assert.Len(t, apiLabels, 2)
2022-01-20 18:46:10 +01:00
// GetLabel
singleURLStr := fmt.Sprintf("/api/v1/repos/%s/%s/labels/%d?token=%s", owner.Name, repo.Name, dbLabel.ID, token)
req = NewRequest(t, "GET", singleURLStr)
2022-12-02 11:39:42 +08:00
resp = MakeRequest(t, req, http.StatusOK)
DecodeJSON(t, resp, &apiLabel)
assert.EqualValues(t, strings.TrimLeft(dbLabel.Color, "#"), apiLabel.Color)
2022-01-20 18:46:10 +01:00
// EditLabel
newName := "LabelNewName"
newColor := "09876a"
newColorWrong := "09g76a"
req = NewRequestWithJSON(t, "PATCH", singleURLStr, &api.EditLabelOption{
Name: &newName,
Color: &newColor,
})
2022-12-02 11:39:42 +08:00
resp = MakeRequest(t, req, http.StatusOK)
DecodeJSON(t, resp, &apiLabel)
assert.EqualValues(t, newColor, apiLabel.Color)
req = NewRequestWithJSON(t, "PATCH", singleURLStr, &api.EditLabelOption{
Color: &newColorWrong,
})
2022-12-02 11:39:42 +08:00
MakeRequest(t, req, http.StatusUnprocessableEntity)
2022-01-20 18:46:10 +01:00
// DeleteLabel
req = NewRequest(t, "DELETE", singleURLStr)
2022-12-02 11:39:42 +08:00
MakeRequest(t, req, http.StatusNoContent)
}
2017-06-24 19:52:51 -04:00
func TestAPIAddIssueLabels(t *testing.T) {
assert.NoError(t, unittest.LoadFixtures())
2017-06-24 19:52:51 -04:00
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{RepoID: repo.ID})
_ = unittest.AssertExistsAndLoadBean(t, &issues_model.Label{RepoID: repo.ID, ID: 2})
owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID})
2017-06-24 19:52:51 -04:00
session := loginUser(t, owner.Name)
2023-06-04 14:57:16 -04:00
token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteIssue)
urlStr := fmt.Sprintf("/api/v1/repos/%s/%s/issues/%d/labels?token=%s",
repo.OwnerName, repo.Name, issue.Index, token)
2017-06-24 19:52:51 -04:00
req := NewRequestWithJSON(t, "POST", urlStr, &api.IssueLabelsOption{
Labels: []int64{1, 2},
2017-06-24 19:52:51 -04:00
})
2022-12-02 11:39:42 +08:00
resp := MakeRequest(t, req, http.StatusOK)
2017-06-24 19:52:51 -04:00
var apiLabels []*api.Label
DecodeJSON(t, resp, &apiLabels)
assert.Len(t, apiLabels, unittest.GetCount(t, &issues_model.IssueLabel{IssueID: issue.ID}))
2017-06-24 19:52:51 -04:00
unittest.AssertExistsAndLoadBean(t, &issues_model.IssueLabel{IssueID: issue.ID, LabelID: 2})
2017-06-24 19:52:51 -04:00
}
func TestAPIReplaceIssueLabels(t *testing.T) {
assert.NoError(t, unittest.LoadFixtures())
2017-06-24 19:52:51 -04:00
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{RepoID: repo.ID})
label := unittest.AssertExistsAndLoadBean(t, &issues_model.Label{RepoID: repo.ID})
owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID})
2017-06-24 19:52:51 -04:00
session := loginUser(t, owner.Name)
2023-06-04 14:57:16 -04:00
token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteIssue)
urlStr := fmt.Sprintf("/api/v1/repos/%s/%s/issues/%d/labels?token=%s",
owner.Name, repo.Name, issue.Index, token)
2017-06-24 19:52:51 -04:00
req := NewRequestWithJSON(t, "PUT", urlStr, &api.IssueLabelsOption{
Labels: []int64{label.ID},
})
2022-12-02 11:39:42 +08:00
resp := MakeRequest(t, req, http.StatusOK)
2017-06-24 19:52:51 -04:00
var apiLabels []*api.Label
DecodeJSON(t, resp, &apiLabels)
if assert.Len(t, apiLabels, 1) {
assert.EqualValues(t, label.ID, apiLabels[0].ID)
}
2017-06-24 19:52:51 -04:00
unittest.AssertCount(t, &issues_model.IssueLabel{IssueID: issue.ID}, 1)
unittest.AssertExistsAndLoadBean(t, &issues_model.IssueLabel{IssueID: issue.ID, LabelID: label.ID})
2017-06-24 19:52:51 -04:00
}
2020-04-01 00:14:46 -04:00
func TestAPIModifyOrgLabels(t *testing.T) {
assert.NoError(t, unittest.LoadFixtures())
2020-04-01 00:14:46 -04:00
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 3})
owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID})
2020-04-01 00:14:46 -04:00
user := "user1"
session := loginUser(t, user)
2023-06-04 14:57:16 -04:00
token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteRepository, auth_model.AccessTokenScopeWriteOrganization)
2020-04-01 00:14:46 -04:00
urlStr := fmt.Sprintf("/api/v1/orgs/%s/labels?token=%s", owner.Name, token)
// CreateLabel
req := NewRequestWithJSON(t, "POST", urlStr, &api.CreateLabelOption{
Name: "TestL 1",
Color: "abcdef",
Description: "test label",
})
2022-12-02 11:39:42 +08:00
resp := MakeRequest(t, req, http.StatusCreated)
2020-04-01 00:14:46 -04:00
apiLabel := new(api.Label)
DecodeJSON(t, resp, &apiLabel)
dbLabel := unittest.AssertExistsAndLoadBean(t, &issues_model.Label{ID: apiLabel.ID, OrgID: owner.ID})
2020-04-01 00:14:46 -04:00
assert.EqualValues(t, dbLabel.Name, apiLabel.Name)
assert.EqualValues(t, strings.TrimLeft(dbLabel.Color, "#"), apiLabel.Color)
req = NewRequestWithJSON(t, "POST", urlStr, &api.CreateLabelOption{
Name: "TestL 2",
Color: "#123456",
Description: "jet another test label",
})
2022-12-02 11:39:42 +08:00
MakeRequest(t, req, http.StatusCreated)
2020-04-01 00:14:46 -04:00
req = NewRequestWithJSON(t, "POST", urlStr, &api.CreateLabelOption{
Name: "WrongTestL",
Color: "#12345g",
})
2022-12-02 11:39:42 +08:00
MakeRequest(t, req, http.StatusUnprocessableEntity)
2020-04-01 00:14:46 -04:00
2022-01-20 18:46:10 +01:00
// ListLabels
2020-04-01 00:14:46 -04:00
req = NewRequest(t, "GET", urlStr)
2022-12-02 11:39:42 +08:00
resp = MakeRequest(t, req, http.StatusOK)
2020-04-01 00:14:46 -04:00
var apiLabels []*api.Label
DecodeJSON(t, resp, &apiLabels)
assert.Len(t, apiLabels, 4)
2022-01-20 18:46:10 +01:00
// GetLabel
2020-04-01 00:14:46 -04:00
singleURLStr := fmt.Sprintf("/api/v1/orgs/%s/labels/%d?token=%s", owner.Name, dbLabel.ID, token)
req = NewRequest(t, "GET", singleURLStr)
2022-12-02 11:39:42 +08:00
resp = MakeRequest(t, req, http.StatusOK)
2020-04-01 00:14:46 -04:00
DecodeJSON(t, resp, &apiLabel)
assert.EqualValues(t, strings.TrimLeft(dbLabel.Color, "#"), apiLabel.Color)
2022-01-20 18:46:10 +01:00
// EditLabel
2020-04-01 00:14:46 -04:00
newName := "LabelNewName"
newColor := "09876a"
newColorWrong := "09g76a"
req = NewRequestWithJSON(t, "PATCH", singleURLStr, &api.EditLabelOption{
Name: &newName,
Color: &newColor,
})
2022-12-02 11:39:42 +08:00
resp = MakeRequest(t, req, http.StatusOK)
2020-04-01 00:14:46 -04:00
DecodeJSON(t, resp, &apiLabel)
assert.EqualValues(t, newColor, apiLabel.Color)
req = NewRequestWithJSON(t, "PATCH", singleURLStr, &api.EditLabelOption{
Color: &newColorWrong,
})
2022-12-02 11:39:42 +08:00
MakeRequest(t, req, http.StatusUnprocessableEntity)
2020-04-01 00:14:46 -04:00
2022-01-20 18:46:10 +01:00
// DeleteLabel
2020-04-01 00:14:46 -04:00
req = NewRequest(t, "DELETE", singleURLStr)
2022-12-02 11:39:42 +08:00
MakeRequest(t, req, http.StatusNoContent)
2020-04-01 00:14:46 -04:00
}