You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

api_issue_test.go 5.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. // Copyright 2017 The Gitea Authors. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. package integrations
  5. import (
  6. "fmt"
  7. "net/http"
  8. "net/url"
  9. "testing"
  10. "code.gitea.io/gitea/models"
  11. api "code.gitea.io/gitea/modules/structs"
  12. "github.com/stretchr/testify/assert"
  13. )
  14. func TestAPIListIssues(t *testing.T) {
  15. defer prepareTestEnv(t)()
  16. repo := models.AssertExistsAndLoadBean(t, &models.Repository{ID: 1}).(*models.Repository)
  17. owner := models.AssertExistsAndLoadBean(t, &models.User{ID: repo.OwnerID}).(*models.User)
  18. session := loginUser(t, owner.Name)
  19. token := getTokenForLoggedInUser(t, session)
  20. req := NewRequestf(t, "GET", "/api/v1/repos/%s/%s/issues?state=all&token=%s",
  21. owner.Name, repo.Name, token)
  22. resp := session.MakeRequest(t, req, http.StatusOK)
  23. var apiIssues []*api.Issue
  24. DecodeJSON(t, resp, &apiIssues)
  25. assert.Len(t, apiIssues, models.GetCount(t, &models.Issue{RepoID: repo.ID}))
  26. for _, apiIssue := range apiIssues {
  27. models.AssertExistsAndLoadBean(t, &models.Issue{ID: apiIssue.ID, RepoID: repo.ID})
  28. }
  29. }
  30. func TestAPICreateIssue(t *testing.T) {
  31. defer prepareTestEnv(t)()
  32. const body, title = "apiTestBody", "apiTestTitle"
  33. repo := models.AssertExistsAndLoadBean(t, &models.Repository{ID: 1}).(*models.Repository)
  34. owner := models.AssertExistsAndLoadBean(t, &models.User{ID: repo.OwnerID}).(*models.User)
  35. session := loginUser(t, owner.Name)
  36. token := getTokenForLoggedInUser(t, session)
  37. urlStr := fmt.Sprintf("/api/v1/repos/%s/%s/issues?state=all&token=%s", owner.Name, repo.Name, token)
  38. req := NewRequestWithJSON(t, "POST", urlStr, &api.CreateIssueOption{
  39. Body: body,
  40. Title: title,
  41. Assignee: owner.Name,
  42. })
  43. resp := session.MakeRequest(t, req, http.StatusCreated)
  44. var apiIssue api.Issue
  45. DecodeJSON(t, resp, &apiIssue)
  46. assert.Equal(t, apiIssue.Body, body)
  47. assert.Equal(t, apiIssue.Title, title)
  48. models.AssertExistsAndLoadBean(t, &models.Issue{
  49. RepoID: repo.ID,
  50. AssigneeID: owner.ID,
  51. Content: body,
  52. Title: title,
  53. })
  54. }
  55. func TestAPIEditIssue(t *testing.T) {
  56. defer prepareTestEnv(t)()
  57. issueBefore := models.AssertExistsAndLoadBean(t, &models.Issue{ID: 10}).(*models.Issue)
  58. repo := models.AssertExistsAndLoadBean(t, &models.Repository{ID: issueBefore.RepoID}).(*models.Repository)
  59. owner := models.AssertExistsAndLoadBean(t, &models.User{ID: repo.OwnerID}).(*models.User)
  60. assert.NoError(t, issueBefore.LoadAttributes())
  61. assert.Equal(t, int64(1019307200), int64(issueBefore.DeadlineUnix))
  62. assert.Equal(t, api.StateOpen, issueBefore.State())
  63. session := loginUser(t, owner.Name)
  64. token := getTokenForLoggedInUser(t, session)
  65. // update values of issue
  66. issueState := "closed"
  67. removeDeadline := true
  68. milestone := int64(4)
  69. body := "new content!"
  70. title := "new title from api set"
  71. urlStr := fmt.Sprintf("/api/v1/repos/%s/%s/issues/%d?token=%s", owner.Name, repo.Name, issueBefore.Index, token)
  72. req := NewRequestWithJSON(t, "PATCH", urlStr, api.EditIssueOption{
  73. State: &issueState,
  74. RemoveDeadline: &removeDeadline,
  75. Milestone: &milestone,
  76. Body: &body,
  77. Title: title,
  78. // ToDo change more
  79. })
  80. resp := session.MakeRequest(t, req, http.StatusCreated)
  81. var apiIssue api.Issue
  82. DecodeJSON(t, resp, &apiIssue)
  83. issueAfter := models.AssertExistsAndLoadBean(t, &models.Issue{ID: 10}).(*models.Issue)
  84. // check deleted user
  85. assert.Equal(t, int64(500), issueAfter.PosterID)
  86. assert.NoError(t, issueAfter.LoadAttributes())
  87. assert.Equal(t, int64(-1), issueAfter.PosterID)
  88. assert.Equal(t, int64(-1), issueBefore.PosterID)
  89. assert.Equal(t, int64(-1), apiIssue.Poster.ID)
  90. // API response
  91. assert.Equal(t, api.StateClosed, apiIssue.State)
  92. assert.Equal(t, milestone, apiIssue.Milestone.ID)
  93. assert.Equal(t, body, apiIssue.Body)
  94. assert.True(t, apiIssue.Deadline == nil)
  95. assert.Equal(t, title, apiIssue.Title)
  96. // in database
  97. assert.Equal(t, api.StateClosed, issueAfter.State())
  98. assert.Equal(t, milestone, issueAfter.MilestoneID)
  99. assert.Equal(t, int64(0), int64(issueAfter.DeadlineUnix))
  100. assert.Equal(t, body, issueAfter.Content)
  101. assert.Equal(t, title, issueAfter.Title)
  102. }
  103. func TestAPISearchIssue(t *testing.T) {
  104. defer prepareTestEnv(t)()
  105. session := loginUser(t, "user2")
  106. token := getTokenForLoggedInUser(t, session)
  107. link, _ := url.Parse("/api/v1/repos/issues/search")
  108. req := NewRequest(t, "GET", link.String())
  109. resp := session.MakeRequest(t, req, http.StatusOK)
  110. var apiIssues []*api.Issue
  111. DecodeJSON(t, resp, &apiIssues)
  112. assert.Len(t, apiIssues, 9)
  113. query := url.Values{}
  114. query.Add("token", token)
  115. link.RawQuery = query.Encode()
  116. req = NewRequest(t, "GET", link.String())
  117. resp = session.MakeRequest(t, req, http.StatusOK)
  118. DecodeJSON(t, resp, &apiIssues)
  119. assert.Len(t, apiIssues, 9)
  120. query.Add("state", "closed")
  121. link.RawQuery = query.Encode()
  122. req = NewRequest(t, "GET", link.String())
  123. resp = session.MakeRequest(t, req, http.StatusOK)
  124. DecodeJSON(t, resp, &apiIssues)
  125. assert.Len(t, apiIssues, 2)
  126. query.Set("state", "all")
  127. link.RawQuery = query.Encode()
  128. req = NewRequest(t, "GET", link.String())
  129. resp = session.MakeRequest(t, req, http.StatusOK)
  130. DecodeJSON(t, resp, &apiIssues)
  131. assert.Len(t, apiIssues, 10) //there are more but 10 is page item limit
  132. query.Add("page", "2")
  133. link.RawQuery = query.Encode()
  134. req = NewRequest(t, "GET", link.String())
  135. resp = session.MakeRequest(t, req, http.StatusOK)
  136. DecodeJSON(t, resp, &apiIssues)
  137. assert.Len(t, apiIssues, 1)
  138. }