diff options
Diffstat (limited to 'integrations/api_issue_test.go')
-rw-r--r-- | integrations/api_issue_test.go | 328 |
1 files changed, 0 insertions, 328 deletions
diff --git a/integrations/api_issue_test.go b/integrations/api_issue_test.go deleted file mode 100644 index afb2f75c15..0000000000 --- a/integrations/api_issue_test.go +++ /dev/null @@ -1,328 +0,0 @@ -// 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 integrations - -import ( - "fmt" - "net/http" - "net/url" - "testing" - "time" - - "code.gitea.io/gitea/models/db" - 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" - "code.gitea.io/gitea/modules/setting" - api "code.gitea.io/gitea/modules/structs" - - "github.com/stretchr/testify/assert" -) - -func TestAPIListIssues(t *testing.T) { - defer prepareTestEnv(t)() - - repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}) - owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID}) - - session := loginUser(t, owner.Name) - token := getTokenForLoggedInUser(t, session) - link, _ := url.Parse(fmt.Sprintf("/api/v1/repos/%s/%s/issues", owner.Name, repo.Name)) - - link.RawQuery = url.Values{"token": {token}, "state": {"all"}}.Encode() - resp := session.MakeRequest(t, NewRequest(t, "GET", link.String()), http.StatusOK) - var apiIssues []*api.Issue - DecodeJSON(t, resp, &apiIssues) - assert.Len(t, apiIssues, unittest.GetCount(t, &issues_model.Issue{RepoID: repo.ID})) - for _, apiIssue := range apiIssues { - unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: apiIssue.ID, RepoID: repo.ID}) - } - - // test milestone filter - link.RawQuery = url.Values{"token": {token}, "state": {"all"}, "type": {"all"}, "milestones": {"ignore,milestone1,3,4"}}.Encode() - resp = session.MakeRequest(t, NewRequest(t, "GET", link.String()), http.StatusOK) - DecodeJSON(t, resp, &apiIssues) - if assert.Len(t, apiIssues, 2) { - assert.EqualValues(t, 3, apiIssues[0].Milestone.ID) - assert.EqualValues(t, 1, apiIssues[1].Milestone.ID) - } - - link.RawQuery = url.Values{"token": {token}, "state": {"all"}, "created_by": {"user2"}}.Encode() - resp = session.MakeRequest(t, NewRequest(t, "GET", link.String()), http.StatusOK) - DecodeJSON(t, resp, &apiIssues) - if assert.Len(t, apiIssues, 1) { - assert.EqualValues(t, 5, apiIssues[0].ID) - } - - link.RawQuery = url.Values{"token": {token}, "state": {"all"}, "assigned_by": {"user1"}}.Encode() - resp = session.MakeRequest(t, NewRequest(t, "GET", link.String()), http.StatusOK) - DecodeJSON(t, resp, &apiIssues) - if assert.Len(t, apiIssues, 1) { - assert.EqualValues(t, 1, apiIssues[0].ID) - } - - link.RawQuery = url.Values{"token": {token}, "state": {"all"}, "mentioned_by": {"user4"}}.Encode() - resp = session.MakeRequest(t, NewRequest(t, "GET", link.String()), http.StatusOK) - DecodeJSON(t, resp, &apiIssues) - if assert.Len(t, apiIssues, 1) { - assert.EqualValues(t, 1, apiIssues[0].ID) - } -} - -func TestAPICreateIssue(t *testing.T) { - defer prepareTestEnv(t)() - const body, title = "apiTestBody", "apiTestTitle" - - repoBefore := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}) - owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repoBefore.OwnerID}) - - session := loginUser(t, owner.Name) - token := getTokenForLoggedInUser(t, session) - urlStr := fmt.Sprintf("/api/v1/repos/%s/%s/issues?state=all&token=%s", owner.Name, repoBefore.Name, token) - req := NewRequestWithJSON(t, "POST", urlStr, &api.CreateIssueOption{ - Body: body, - Title: title, - Assignee: owner.Name, - }) - resp := session.MakeRequest(t, req, http.StatusCreated) - var apiIssue api.Issue - DecodeJSON(t, resp, &apiIssue) - assert.Equal(t, body, apiIssue.Body) - assert.Equal(t, title, apiIssue.Title) - - unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ - RepoID: repoBefore.ID, - AssigneeID: owner.ID, - Content: body, - Title: title, - }) - - repoAfter := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}) - assert.Equal(t, repoBefore.NumIssues+1, repoAfter.NumIssues) - assert.Equal(t, repoBefore.NumClosedIssues, repoAfter.NumClosedIssues) -} - -func TestAPIEditIssue(t *testing.T) { - defer prepareTestEnv(t)() - - issueBefore := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 10}) - repoBefore := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: issueBefore.RepoID}) - owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repoBefore.OwnerID}) - assert.NoError(t, issueBefore.LoadAttributes(db.DefaultContext)) - assert.Equal(t, int64(1019307200), int64(issueBefore.DeadlineUnix)) - assert.Equal(t, api.StateOpen, issueBefore.State()) - - session := loginUser(t, owner.Name) - token := getTokenForLoggedInUser(t, session) - - // update values of issue - issueState := "closed" - removeDeadline := true - milestone := int64(4) - body := "new content!" - title := "new title from api set" - - urlStr := fmt.Sprintf("/api/v1/repos/%s/%s/issues/%d?token=%s", owner.Name, repoBefore.Name, issueBefore.Index, token) - req := NewRequestWithJSON(t, "PATCH", urlStr, api.EditIssueOption{ - State: &issueState, - RemoveDeadline: &removeDeadline, - Milestone: &milestone, - Body: &body, - Title: title, - - // ToDo change more - }) - resp := session.MakeRequest(t, req, http.StatusCreated) - var apiIssue api.Issue - DecodeJSON(t, resp, &apiIssue) - - issueAfter := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 10}) - repoAfter := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: issueBefore.RepoID}) - - // check deleted user - assert.Equal(t, int64(500), issueAfter.PosterID) - assert.NoError(t, issueAfter.LoadAttributes(db.DefaultContext)) - assert.Equal(t, int64(-1), issueAfter.PosterID) - assert.Equal(t, int64(-1), issueBefore.PosterID) - assert.Equal(t, int64(-1), apiIssue.Poster.ID) - - // check repo change - assert.Equal(t, repoBefore.NumClosedIssues+1, repoAfter.NumClosedIssues) - - // API response - assert.Equal(t, api.StateClosed, apiIssue.State) - assert.Equal(t, milestone, apiIssue.Milestone.ID) - assert.Equal(t, body, apiIssue.Body) - assert.True(t, apiIssue.Deadline == nil) - assert.Equal(t, title, apiIssue.Title) - - // in database - assert.Equal(t, api.StateClosed, issueAfter.State()) - assert.Equal(t, milestone, issueAfter.MilestoneID) - assert.Equal(t, int64(0), int64(issueAfter.DeadlineUnix)) - assert.Equal(t, body, issueAfter.Content) - assert.Equal(t, title, issueAfter.Title) -} - -func TestAPISearchIssues(t *testing.T) { - defer prepareTestEnv(t)() - - token := getUserToken(t, "user2") - - // as this API was used in the frontend, it uses UI page size - expectedIssueCount := 15 // from the fixtures - if expectedIssueCount > setting.UI.IssuePagingNum { - expectedIssueCount = setting.UI.IssuePagingNum - } - - link, _ := url.Parse("/api/v1/repos/issues/search") - query := url.Values{"token": {getUserToken(t, "user1")}} - var apiIssues []*api.Issue - - link.RawQuery = query.Encode() - req := NewRequest(t, "GET", link.String()) - resp := MakeRequest(t, req, http.StatusOK) - DecodeJSON(t, resp, &apiIssues) - assert.Len(t, apiIssues, expectedIssueCount) - - since := "2000-01-01T00%3A50%3A01%2B00%3A00" // 946687801 - before := time.Unix(999307200, 0).Format(time.RFC3339) - query.Add("since", since) - query.Add("before", before) - query.Add("token", token) - link.RawQuery = query.Encode() - req = NewRequest(t, "GET", link.String()) - resp = MakeRequest(t, req, http.StatusOK) - DecodeJSON(t, resp, &apiIssues) - assert.Len(t, apiIssues, 8) - query.Del("since") - query.Del("before") - - query.Add("state", "closed") - link.RawQuery = query.Encode() - req = NewRequest(t, "GET", link.String()) - resp = MakeRequest(t, req, http.StatusOK) - DecodeJSON(t, resp, &apiIssues) - assert.Len(t, apiIssues, 2) - - query.Set("state", "all") - link.RawQuery = query.Encode() - req = NewRequest(t, "GET", link.String()) - resp = MakeRequest(t, req, http.StatusOK) - DecodeJSON(t, resp, &apiIssues) - assert.EqualValues(t, "17", resp.Header().Get("X-Total-Count")) - assert.Len(t, apiIssues, 17) - - query.Add("limit", "10") - link.RawQuery = query.Encode() - req = NewRequest(t, "GET", link.String()) - resp = MakeRequest(t, req, http.StatusOK) - DecodeJSON(t, resp, &apiIssues) - assert.EqualValues(t, "17", resp.Header().Get("X-Total-Count")) - assert.Len(t, apiIssues, 10) - - query = url.Values{"assigned": {"true"}, "state": {"all"}, "token": {token}} - link.RawQuery = query.Encode() - req = NewRequest(t, "GET", link.String()) - resp = MakeRequest(t, req, http.StatusOK) - DecodeJSON(t, resp, &apiIssues) - assert.Len(t, apiIssues, 2) - - query = url.Values{"milestones": {"milestone1"}, "state": {"all"}, "token": {token}} - link.RawQuery = query.Encode() - req = NewRequest(t, "GET", link.String()) - resp = MakeRequest(t, req, http.StatusOK) - DecodeJSON(t, resp, &apiIssues) - assert.Len(t, apiIssues, 1) - - query = url.Values{"milestones": {"milestone1,milestone3"}, "state": {"all"}, "token": {token}} - link.RawQuery = query.Encode() - req = NewRequest(t, "GET", link.String()) - resp = MakeRequest(t, req, http.StatusOK) - DecodeJSON(t, resp, &apiIssues) - assert.Len(t, apiIssues, 2) - - query = url.Values{"owner": {"user2"}, "token": {token}} // user - link.RawQuery = query.Encode() - req = NewRequest(t, "GET", link.String()) - resp = MakeRequest(t, req, http.StatusOK) - DecodeJSON(t, resp, &apiIssues) - assert.Len(t, apiIssues, 6) - - query = url.Values{"owner": {"user3"}, "token": {token}} // organization - link.RawQuery = query.Encode() - req = NewRequest(t, "GET", link.String()) - resp = MakeRequest(t, req, http.StatusOK) - DecodeJSON(t, resp, &apiIssues) - assert.Len(t, apiIssues, 5) - - query = url.Values{"owner": {"user3"}, "team": {"team1"}, "token": {token}} // organization + team - link.RawQuery = query.Encode() - req = NewRequest(t, "GET", link.String()) - resp = MakeRequest(t, req, http.StatusOK) - DecodeJSON(t, resp, &apiIssues) - assert.Len(t, apiIssues, 2) -} - -func TestAPISearchIssuesWithLabels(t *testing.T) { - defer prepareTestEnv(t)() - - // as this API was used in the frontend, it uses UI page size - expectedIssueCount := 15 // from the fixtures - if expectedIssueCount > setting.UI.IssuePagingNum { - expectedIssueCount = setting.UI.IssuePagingNum - } - - link, _ := url.Parse("/api/v1/repos/issues/search") - query := url.Values{"token": {getUserToken(t, "user1")}} - var apiIssues []*api.Issue - - link.RawQuery = query.Encode() - req := NewRequest(t, "GET", link.String()) - resp := MakeRequest(t, req, http.StatusOK) - DecodeJSON(t, resp, &apiIssues) - assert.Len(t, apiIssues, expectedIssueCount) - - query.Add("labels", "label1") - link.RawQuery = query.Encode() - req = NewRequest(t, "GET", link.String()) - resp = MakeRequest(t, req, http.StatusOK) - DecodeJSON(t, resp, &apiIssues) - assert.Len(t, apiIssues, 2) - - // multiple labels - query.Set("labels", "label1,label2") - link.RawQuery = query.Encode() - req = NewRequest(t, "GET", link.String()) - resp = MakeRequest(t, req, http.StatusOK) - DecodeJSON(t, resp, &apiIssues) - assert.Len(t, apiIssues, 2) - - // an org label - query.Set("labels", "orglabel4") - link.RawQuery = query.Encode() - req = NewRequest(t, "GET", link.String()) - resp = MakeRequest(t, req, http.StatusOK) - DecodeJSON(t, resp, &apiIssues) - assert.Len(t, apiIssues, 1) - - // org and repo label - query.Set("labels", "label2,orglabel4") - query.Add("state", "all") - link.RawQuery = query.Encode() - req = NewRequest(t, "GET", link.String()) - resp = MakeRequest(t, req, http.StatusOK) - DecodeJSON(t, resp, &apiIssues) - assert.Len(t, apiIssues, 2) - - // org and repo label which share the same issue - query.Set("labels", "label1,orglabel4") - link.RawQuery = query.Encode() - req = NewRequest(t, "GET", link.String()) - resp = MakeRequest(t, req, http.StatusOK) - DecodeJSON(t, resp, &apiIssues) - assert.Len(t, apiIssues, 2) -} |