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

pull_test.go 7.1 kB

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