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.

action_test.go 11 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361
  1. package models
  2. import (
  3. "path"
  4. "strings"
  5. "testing"
  6. "code.gitea.io/gitea/modules/setting"
  7. "github.com/stretchr/testify/assert"
  8. )
  9. func TestAction_GetRepoPath(t *testing.T) {
  10. assert.NoError(t, PrepareTestDatabase())
  11. repo := AssertExistsAndLoadBean(t, &Repository{}).(*Repository)
  12. owner := AssertExistsAndLoadBean(t, &User{ID: repo.OwnerID}).(*User)
  13. action := &Action{RepoID: repo.ID}
  14. assert.Equal(t, path.Join(owner.Name, repo.Name), action.GetRepoPath())
  15. }
  16. func TestAction_GetRepoLink(t *testing.T) {
  17. assert.NoError(t, PrepareTestDatabase())
  18. repo := AssertExistsAndLoadBean(t, &Repository{}).(*Repository)
  19. owner := AssertExistsAndLoadBean(t, &User{ID: repo.OwnerID}).(*User)
  20. action := &Action{RepoID: repo.ID}
  21. setting.AppSubURL = "/suburl/"
  22. expected := path.Join(setting.AppSubURL, owner.Name, repo.Name)
  23. assert.Equal(t, expected, action.GetRepoLink())
  24. }
  25. func TestNewRepoAction(t *testing.T) {
  26. assert.NoError(t, PrepareTestDatabase())
  27. user := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User)
  28. repo := AssertExistsAndLoadBean(t, &Repository{OwnerID: user.ID}).(*Repository)
  29. repo.Owner = user
  30. actionBean := &Action{
  31. OpType: ActionCreateRepo,
  32. ActUserID: user.ID,
  33. RepoID: repo.ID,
  34. ActUser: user,
  35. Repo: repo,
  36. IsPrivate: repo.IsPrivate,
  37. }
  38. AssertNotExistsBean(t, actionBean)
  39. assert.NoError(t, NewRepoAction(user, repo))
  40. AssertExistsAndLoadBean(t, actionBean)
  41. CheckConsistencyFor(t, &Action{})
  42. }
  43. func TestRenameRepoAction(t *testing.T) {
  44. assert.NoError(t, PrepareTestDatabase())
  45. user := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User)
  46. repo := AssertExistsAndLoadBean(t, &Repository{OwnerID: user.ID}).(*Repository)
  47. repo.Owner = user
  48. oldRepoName := repo.Name
  49. const newRepoName = "newRepoName"
  50. repo.Name = newRepoName
  51. repo.LowerName = strings.ToLower(newRepoName)
  52. actionBean := &Action{
  53. OpType: ActionRenameRepo,
  54. ActUserID: user.ID,
  55. ActUser: user,
  56. RepoID: repo.ID,
  57. Repo: repo,
  58. IsPrivate: repo.IsPrivate,
  59. Content: oldRepoName,
  60. }
  61. AssertNotExistsBean(t, actionBean)
  62. assert.NoError(t, RenameRepoAction(user, oldRepoName, repo))
  63. AssertExistsAndLoadBean(t, actionBean)
  64. _, err := x.Id(repo.ID).Cols("name", "lower_name").Update(repo)
  65. assert.NoError(t, err)
  66. CheckConsistencyFor(t, &Action{})
  67. }
  68. func TestPushCommits_ToAPIPayloadCommits(t *testing.T) {
  69. pushCommits := NewPushCommits()
  70. pushCommits.Commits = []*PushCommit{
  71. {
  72. Sha1: "abcdef1",
  73. CommitterEmail: "user2@example.com",
  74. CommitterName: "User Two",
  75. AuthorEmail: "user4@example.com",
  76. AuthorName: "User Four",
  77. Message: "message1",
  78. },
  79. {
  80. Sha1: "abcdef2",
  81. CommitterEmail: "user2@example.com",
  82. CommitterName: "User Two",
  83. AuthorEmail: "user2@example.com",
  84. AuthorName: "User Two",
  85. Message: "message2",
  86. },
  87. }
  88. pushCommits.Len = len(pushCommits.Commits)
  89. payloadCommits := pushCommits.ToAPIPayloadCommits("/username/reponame")
  90. if assert.Len(t, payloadCommits, 2) {
  91. assert.Equal(t, "abcdef1", payloadCommits[0].ID)
  92. assert.Equal(t, "message1", payloadCommits[0].Message)
  93. assert.Equal(t, "/username/reponame/commit/abcdef1", payloadCommits[0].URL)
  94. assert.Equal(t, "User Two", payloadCommits[0].Committer.Name)
  95. assert.Equal(t, "user2", payloadCommits[0].Committer.UserName)
  96. assert.Equal(t, "User Four", payloadCommits[0].Author.Name)
  97. assert.Equal(t, "user4", payloadCommits[0].Author.UserName)
  98. assert.Equal(t, "abcdef2", payloadCommits[1].ID)
  99. assert.Equal(t, "message2", payloadCommits[1].Message)
  100. assert.Equal(t, "/username/reponame/commit/abcdef2", payloadCommits[1].URL)
  101. assert.Equal(t, "User Two", payloadCommits[1].Committer.Name)
  102. assert.Equal(t, "user2", payloadCommits[1].Committer.UserName)
  103. assert.Equal(t, "User Two", payloadCommits[1].Author.Name)
  104. assert.Equal(t, "user2", payloadCommits[1].Author.UserName)
  105. }
  106. }
  107. func TestPushCommits_AvatarLink(t *testing.T) {
  108. pushCommits := NewPushCommits()
  109. pushCommits.Commits = []*PushCommit{
  110. {
  111. Sha1: "abcdef1",
  112. CommitterEmail: "user2@example.com",
  113. CommitterName: "User Two",
  114. AuthorEmail: "user4@example.com",
  115. AuthorName: "User Four",
  116. Message: "message1",
  117. },
  118. {
  119. Sha1: "abcdef2",
  120. CommitterEmail: "user2@example.com",
  121. CommitterName: "User Two",
  122. AuthorEmail: "user2@example.com",
  123. AuthorName: "User Two",
  124. Message: "message2",
  125. },
  126. }
  127. pushCommits.Len = len(pushCommits.Commits)
  128. assert.Equal(t,
  129. "https://secure.gravatar.com/avatar/ab53a2911ddf9b4817ac01ddcd3d975f",
  130. pushCommits.AvatarLink("user2@example.com"))
  131. assert.Equal(t,
  132. "https://secure.gravatar.com/avatar/19ade630b94e1e0535b3df7387434154",
  133. pushCommits.AvatarLink("nonexistent@example.com"))
  134. }
  135. func TestUpdateIssuesCommit(t *testing.T) {
  136. assert.NoError(t, PrepareTestDatabase())
  137. pushCommits := []*PushCommit{
  138. {
  139. Sha1: "abcdef1",
  140. CommitterEmail: "user2@example.com",
  141. CommitterName: "User Two",
  142. AuthorEmail: "user4@example.com",
  143. AuthorName: "User Four",
  144. Message: "start working on #FST-1, #1",
  145. },
  146. {
  147. Sha1: "abcdef2",
  148. CommitterEmail: "user2@example.com",
  149. CommitterName: "User Two",
  150. AuthorEmail: "user2@example.com",
  151. AuthorName: "User Two",
  152. Message: "a plain message",
  153. },
  154. {
  155. Sha1: "abcdef2",
  156. CommitterEmail: "user2@example.com",
  157. CommitterName: "User Two",
  158. AuthorEmail: "user2@example.com",
  159. AuthorName: "User Two",
  160. Message: "close #2",
  161. },
  162. }
  163. user := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User)
  164. repo := AssertExistsAndLoadBean(t, &Repository{ID: 1}).(*Repository)
  165. repo.Owner = user
  166. commentBean := &Comment{
  167. Type: CommentTypeCommitRef,
  168. CommitSHA: "abcdef1",
  169. PosterID: user.ID,
  170. IssueID: 1,
  171. }
  172. issueBean := &Issue{RepoID: repo.ID, Index: 2}
  173. AssertNotExistsBean(t, commentBean)
  174. AssertNotExistsBean(t, &Issue{RepoID: repo.ID, Index: 2}, "is_closed=1")
  175. assert.NoError(t, UpdateIssuesCommit(user, repo, pushCommits))
  176. AssertExistsAndLoadBean(t, commentBean)
  177. AssertExistsAndLoadBean(t, issueBean, "is_closed=1")
  178. CheckConsistencyFor(t, &Action{})
  179. }
  180. func TestCommitRepoAction(t *testing.T) {
  181. assert.NoError(t, PrepareTestDatabase())
  182. user := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User)
  183. repo := AssertExistsAndLoadBean(t, &Repository{ID: 2, OwnerID: user.ID}).(*Repository)
  184. repo.Owner = user
  185. pushCommits := NewPushCommits()
  186. pushCommits.Commits = []*PushCommit{
  187. {
  188. Sha1: "abcdef1",
  189. CommitterEmail: "user2@example.com",
  190. CommitterName: "User Two",
  191. AuthorEmail: "user4@example.com",
  192. AuthorName: "User Four",
  193. Message: "message1",
  194. },
  195. {
  196. Sha1: "abcdef2",
  197. CommitterEmail: "user2@example.com",
  198. CommitterName: "User Two",
  199. AuthorEmail: "user2@example.com",
  200. AuthorName: "User Two",
  201. Message: "message2",
  202. },
  203. }
  204. pushCommits.Len = len(pushCommits.Commits)
  205. actionBean := &Action{
  206. OpType: ActionCommitRepo,
  207. ActUserID: user.ID,
  208. ActUser: user,
  209. RepoID: repo.ID,
  210. Repo: repo,
  211. RefName: "refName",
  212. IsPrivate: repo.IsPrivate,
  213. }
  214. AssertNotExistsBean(t, actionBean)
  215. assert.NoError(t, CommitRepoAction(CommitRepoActionOptions{
  216. PusherName: user.Name,
  217. RepoOwnerID: user.ID,
  218. RepoName: repo.Name,
  219. RefFullName: "refName",
  220. OldCommitID: "oldCommitID",
  221. NewCommitID: "newCommitID",
  222. Commits: pushCommits,
  223. }))
  224. AssertExistsAndLoadBean(t, actionBean)
  225. CheckConsistencyFor(t, &Action{})
  226. }
  227. func TestTransferRepoAction(t *testing.T) {
  228. assert.NoError(t, PrepareTestDatabase())
  229. user2 := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User)
  230. user4 := AssertExistsAndLoadBean(t, &User{ID: 4}).(*User)
  231. repo := AssertExistsAndLoadBean(t, &Repository{ID: 1, OwnerID: user2.ID}).(*Repository)
  232. repo.OwnerID = user4.ID
  233. repo.Owner = user4
  234. actionBean := &Action{
  235. OpType: ActionTransferRepo,
  236. ActUserID: user2.ID,
  237. ActUser: user2,
  238. RepoID: repo.ID,
  239. Repo: repo,
  240. IsPrivate: repo.IsPrivate,
  241. }
  242. AssertNotExistsBean(t, actionBean)
  243. assert.NoError(t, TransferRepoAction(user2, user2, repo))
  244. AssertExistsAndLoadBean(t, actionBean)
  245. _, err := x.Id(repo.ID).Cols("owner_id").Update(repo)
  246. assert.NoError(t, err)
  247. CheckConsistencyFor(t, &Action{})
  248. }
  249. func TestMergePullRequestAction(t *testing.T) {
  250. assert.NoError(t, PrepareTestDatabase())
  251. user := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User)
  252. repo := AssertExistsAndLoadBean(t, &Repository{ID: 1, OwnerID: user.ID}).(*Repository)
  253. repo.Owner = user
  254. issue := AssertExistsAndLoadBean(t, &Issue{ID: 3, RepoID: repo.ID}).(*Issue)
  255. actionBean := &Action{
  256. OpType: ActionMergePullRequest,
  257. ActUserID: user.ID,
  258. ActUser: user,
  259. RepoID: repo.ID,
  260. Repo: repo,
  261. IsPrivate: repo.IsPrivate,
  262. }
  263. AssertNotExistsBean(t, actionBean)
  264. assert.NoError(t, MergePullRequestAction(user, repo, issue))
  265. AssertExistsAndLoadBean(t, actionBean)
  266. CheckConsistencyFor(t, &Action{})
  267. }
  268. func TestGetFeeds(t *testing.T) {
  269. // test with an individual user
  270. assert.NoError(t, PrepareTestDatabase())
  271. user := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User)
  272. actions, err := GetFeeds(GetFeedsOptions{
  273. RequestedUser: user,
  274. RequestingUserID: user.ID,
  275. IncludePrivate: true,
  276. OnlyPerformedBy: false,
  277. IncludeDeleted: true,
  278. })
  279. assert.NoError(t, err)
  280. if assert.Len(t, actions, 1) {
  281. assert.EqualValues(t, 1, actions[0].ID)
  282. assert.EqualValues(t, user.ID, actions[0].UserID)
  283. }
  284. actions, err = GetFeeds(GetFeedsOptions{
  285. RequestedUser: user,
  286. RequestingUserID: user.ID,
  287. IncludePrivate: false,
  288. OnlyPerformedBy: false,
  289. })
  290. assert.NoError(t, err)
  291. assert.Len(t, actions, 0)
  292. }
  293. func TestGetFeeds2(t *testing.T) {
  294. // test with an organization user
  295. assert.NoError(t, PrepareTestDatabase())
  296. org := AssertExistsAndLoadBean(t, &User{ID: 3}).(*User)
  297. userID := AssertExistsAndLoadBean(t, &OrgUser{OrgID: org.ID, IsOwner: true}).(*OrgUser).UID
  298. actions, err := GetFeeds(GetFeedsOptions{
  299. RequestedUser: org,
  300. RequestingUserID: userID,
  301. IncludePrivate: true,
  302. OnlyPerformedBy: false,
  303. IncludeDeleted: true,
  304. })
  305. assert.NoError(t, err)
  306. assert.Len(t, actions, 1)
  307. if assert.Len(t, actions, 1) {
  308. assert.EqualValues(t, 2, actions[0].ID)
  309. assert.EqualValues(t, org.ID, actions[0].UserID)
  310. }
  311. actions, err = GetFeeds(GetFeedsOptions{
  312. RequestedUser: org,
  313. RequestingUserID: userID,
  314. IncludePrivate: false,
  315. OnlyPerformedBy: false,
  316. IncludeDeleted: true,
  317. })
  318. assert.NoError(t, err)
  319. assert.Len(t, actions, 0)
  320. }