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.

pull_test.go 6.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  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 models
  5. import (
  6. "testing"
  7. "time"
  8. "github.com/stretchr/testify/assert"
  9. )
  10. // getPullRequest load a fixture pull request from the test database
  11. func loadFixturePullRequest(t *testing.T, id int64) *PullRequest {
  12. sess := x.NewSession()
  13. defer sess.Close()
  14. pr := &PullRequest{ID: id}
  15. has, err := sess.Get(pr)
  16. assert.NoError(t, err)
  17. assert.True(t, has)
  18. return pr
  19. }
  20. func TestPullRequest_LoadAttributes(t *testing.T) {
  21. assert.NoError(t, PrepareTestDatabase())
  22. pr := loadFixturePullRequest(t, 1)
  23. assert.NoError(t, pr.LoadAttributes())
  24. assert.NotNil(t, pr.Merger)
  25. assert.Equal(t, pr.MergerID, pr.Merger.ID)
  26. }
  27. func TestPullRequest_LoadIssue(t *testing.T) {
  28. assert.NoError(t, PrepareTestDatabase())
  29. pr := loadFixturePullRequest(t, 1)
  30. assert.NoError(t, pr.LoadIssue())
  31. assert.NotNil(t, pr.Issue)
  32. assert.Equal(t, int64(2), pr.Issue.ID)
  33. }
  34. // TODO TestPullRequest_APIFormat
  35. func TestPullRequest_GetBaseRepo(t *testing.T) {
  36. assert.NoError(t, PrepareTestDatabase())
  37. pr := loadFixturePullRequest(t, 1)
  38. assert.NoError(t, pr.GetBaseRepo())
  39. assert.NotNil(t, pr.BaseRepo)
  40. assert.Equal(t, pr.BaseRepoID, pr.BaseRepo.ID)
  41. }
  42. func TestPullRequest_GetHeadRepo(t *testing.T) {
  43. assert.NoError(t, PrepareTestDatabase())
  44. pr := loadFixturePullRequest(t, 1)
  45. assert.NoError(t, pr.GetHeadRepo())
  46. assert.NotNil(t, pr.HeadRepo)
  47. assert.Equal(t, pr.HeadRepoID, pr.HeadRepo.ID)
  48. }
  49. // TODO TestMerge
  50. // TODO TestNewPullRequest
  51. func TestPullRequestsNewest(t *testing.T) {
  52. assert.NoError(t, PrepareTestDatabase())
  53. prs, count, err := PullRequests(1, &PullRequestsOptions{
  54. Page: 1,
  55. State: "open",
  56. SortType: "newest",
  57. Labels: []string{},
  58. })
  59. assert.NoError(t, err)
  60. assert.Equal(t, int64(2), count)
  61. assert.Len(t, prs, 2)
  62. assert.Equal(t, int64(2), prs[0].ID)
  63. assert.Equal(t, int64(1), prs[1].ID)
  64. }
  65. func TestPullRequestsOldest(t *testing.T) {
  66. assert.NoError(t, PrepareTestDatabase())
  67. prs, count, err := PullRequests(1, &PullRequestsOptions{
  68. Page: 1,
  69. State: "open",
  70. SortType: "oldest",
  71. Labels: []string{},
  72. })
  73. assert.NoError(t, err)
  74. assert.Equal(t, int64(2), count)
  75. assert.Len(t, prs, 2)
  76. assert.Equal(t, int64(1), prs[0].ID)
  77. assert.Equal(t, int64(2), prs[1].ID)
  78. }
  79. func TestGetUnmergedPullRequest(t *testing.T) {
  80. assert.NoError(t, PrepareTestDatabase())
  81. pr, err := GetUnmergedPullRequest(1, 1, "branch2", "master")
  82. assert.NoError(t, err)
  83. assert.Equal(t, int64(2), pr.ID)
  84. pr, err = GetUnmergedPullRequest(1, 9223372036854775807, "branch1", "master")
  85. assert.Error(t, err)
  86. assert.True(t, IsErrPullRequestNotExist(err))
  87. }
  88. func TestGetUnmergedPullRequestsByHeadInfo(t *testing.T) {
  89. assert.NoError(t, PrepareTestDatabase())
  90. prs, err := GetUnmergedPullRequestsByHeadInfo(1, "branch2")
  91. assert.NoError(t, err)
  92. assert.Len(t, prs, 1)
  93. for _, pr := range prs {
  94. assert.Equal(t, int64(1), pr.HeadRepoID)
  95. assert.Equal(t, "branch2", pr.HeadBranch)
  96. }
  97. }
  98. func TestGetUnmergedPullRequestsByBaseInfo(t *testing.T) {
  99. assert.NoError(t, PrepareTestDatabase())
  100. prs, err := GetUnmergedPullRequestsByBaseInfo(1, "master")
  101. assert.NoError(t, err)
  102. assert.Len(t, prs, 1)
  103. pr := prs[0]
  104. assert.Equal(t, int64(2), pr.ID)
  105. assert.Equal(t, int64(1), pr.BaseRepoID)
  106. assert.Equal(t, "master", pr.BaseBranch)
  107. }
  108. func TestGetPullRequestByIndex(t *testing.T) {
  109. assert.NoError(t, PrepareTestDatabase())
  110. pr, err := GetPullRequestByIndex(1, 2)
  111. assert.NoError(t, err)
  112. assert.Equal(t, int64(1), pr.BaseRepoID)
  113. assert.Equal(t, int64(2), pr.Index)
  114. pr, err = GetPullRequestByIndex(9223372036854775807, 9223372036854775807)
  115. assert.Error(t, err)
  116. assert.True(t, IsErrPullRequestNotExist(err))
  117. }
  118. func TestGetPullRequestByID(t *testing.T) {
  119. assert.NoError(t, PrepareTestDatabase())
  120. pr, err := GetPullRequestByID(1)
  121. assert.NoError(t, err)
  122. assert.Equal(t, int64(1), pr.ID)
  123. assert.Equal(t, int64(2), pr.IssueID)
  124. _, err = GetPullRequestByID(9223372036854775807)
  125. assert.Error(t, err)
  126. assert.True(t, IsErrPullRequestNotExist(err))
  127. }
  128. func TestGetPullRequestByIssueID(t *testing.T) {
  129. assert.NoError(t, PrepareTestDatabase())
  130. pr, err := GetPullRequestByIssueID(2)
  131. assert.NoError(t, err)
  132. assert.Equal(t, int64(2), pr.IssueID)
  133. pr, err = GetPullRequestByIssueID(9223372036854775807)
  134. assert.Error(t, err)
  135. assert.True(t, IsErrPullRequestNotExist(err))
  136. }
  137. func TestPullRequest_Update(t *testing.T) {
  138. assert.NoError(t, PrepareTestDatabase())
  139. pr := &PullRequest{
  140. ID: 1,
  141. IssueID: 100,
  142. BaseBranch: "baseBranch",
  143. HeadBranch: "headBranch",
  144. }
  145. pr.Update()
  146. sess := x.NewSession()
  147. defer sess.Close()
  148. pr = &PullRequest{ID: 1}
  149. has, err := sess.Get(pr)
  150. assert.NoError(t, err)
  151. assert.True(t, has)
  152. assert.Equal(t, int64(100), pr.IssueID)
  153. assert.Equal(t, "baseBranch", pr.BaseBranch)
  154. assert.Equal(t, "headBranch", pr.HeadBranch)
  155. }
  156. func TestPullRequest_UpdateCols(t *testing.T) {
  157. assert.NoError(t, PrepareTestDatabase())
  158. pr := &PullRequest{
  159. ID: 1,
  160. IssueID: int64(100),
  161. BaseBranch: "baseBranch",
  162. HeadBranch: "headBranch",
  163. }
  164. pr.UpdateCols("issue_id", "head_branch")
  165. sess := x.NewSession()
  166. defer sess.Close()
  167. pr = &PullRequest{ID: 1}
  168. has, err := sess.Get(pr)
  169. assert.NoError(t, err)
  170. assert.True(t, has)
  171. assert.Equal(t, int64(100), pr.IssueID)
  172. assert.Equal(t, "master", pr.BaseBranch)
  173. assert.Equal(t, "headBranch", pr.HeadBranch)
  174. }
  175. // TODO TestPullRequest_UpdatePatch
  176. // TODO TestPullRequest_PushToBaseRepo
  177. func TestPullRequest_AddToTaskQueue(t *testing.T) {
  178. assert.NoError(t, PrepareTestDatabase())
  179. pr := loadFixturePullRequest(t, 1)
  180. pr.AddToTaskQueue()
  181. // briefly sleep so that background threads have time to run
  182. time.Sleep(time.Millisecond)
  183. assert.True(t, pullRequestQueue.Exist(pr.ID))
  184. pr = loadFixturePullRequest(t, 1)
  185. assert.Equal(t, PullRequestStatusChecking, pr.Status)
  186. }
  187. func TestPullRequestList_LoadAttributes(t *testing.T) {
  188. assert.NoError(t, PrepareTestDatabase())
  189. prs := []*PullRequest{
  190. loadFixturePullRequest(t, 1),
  191. loadFixturePullRequest(t, 2),
  192. }
  193. assert.NoError(t, PullRequestList(prs).LoadAttributes())
  194. for _, pr := range prs {
  195. assert.NotNil(t, pr.Issue)
  196. assert.Equal(t, pr.IssueID, pr.Issue.ID)
  197. }
  198. }
  199. // TODO TestAddTestPullRequestTask
  200. func TestChangeUsernameInPullRequests(t *testing.T) {
  201. assert.NoError(t, PrepareTestDatabase())
  202. const newUsername = "newusername"
  203. assert.NoError(t, ChangeUsernameInPullRequests("user1", newUsername))
  204. sess := x.NewSession()
  205. defer sess.Close()
  206. prs := make([]*PullRequest, 0, 10)
  207. assert.NoError(t, sess.Where("head_user_name = ?", newUsername).Find(&prs))
  208. assert.Len(t, prs, 2)
  209. for _, pr := range prs {
  210. assert.Equal(t, newUsername, pr.HeadUserName)
  211. }
  212. }