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 9.9 kB

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