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.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341
  1. // Copyright 2019 The Gitea Authors. All rights reserved.
  2. // Copyright 2018 Jonas Franz. All rights reserved.
  3. // Use of this source code is governed by a MIT-style
  4. // license that can be found in the LICENSE file.
  5. package migrations
  6. import (
  7. "os"
  8. "testing"
  9. "time"
  10. "code.gitea.io/gitea/modules/migrations/base"
  11. "github.com/stretchr/testify/assert"
  12. )
  13. func assertMilestoneEqual(t *testing.T, description, title, dueOn, created, updated, closed, state string, ms *base.Milestone) {
  14. var tmPtr *time.Time
  15. if dueOn != "" {
  16. tm, err := time.Parse("2006-01-02 15:04:05 -0700 MST", dueOn)
  17. assert.NoError(t, err)
  18. tmPtr = &tm
  19. }
  20. var (
  21. createdTM time.Time
  22. updatedTM *time.Time
  23. closedTM *time.Time
  24. )
  25. if created != "" {
  26. var err error
  27. createdTM, err = time.Parse("2006-01-02 15:04:05 -0700 MST", created)
  28. assert.NoError(t, err)
  29. }
  30. if updated != "" {
  31. updatedTemp, err := time.Parse("2006-01-02 15:04:05 -0700 MST", updated)
  32. assert.NoError(t, err)
  33. updatedTM = &updatedTemp
  34. }
  35. if closed != "" {
  36. closedTemp, err := time.Parse("2006-01-02 15:04:05 -0700 MST", closed)
  37. assert.NoError(t, err)
  38. closedTM = &closedTemp
  39. }
  40. assert.EqualValues(t, &base.Milestone{
  41. Description: description,
  42. Title: title,
  43. Deadline: tmPtr,
  44. State: state,
  45. Created: createdTM,
  46. Updated: updatedTM,
  47. Closed: closedTM,
  48. }, ms)
  49. }
  50. func assertLabelEqual(t *testing.T, name, color, description string, label *base.Label) {
  51. assert.EqualValues(t, &base.Label{
  52. Name: name,
  53. Color: color,
  54. Description: description,
  55. }, label)
  56. }
  57. func TestGitHubDownloadRepo(t *testing.T) {
  58. GithubLimitRateRemaining = 3 //Wait at 3 remaining since we could have 3 CI in //
  59. downloader := NewGithubDownloaderV3(os.Getenv("GITHUB_READ_TOKEN"), "", "go-gitea", "test_repo")
  60. err := downloader.RefreshRate()
  61. assert.NoError(t, err)
  62. repo, err := downloader.GetRepoInfo()
  63. assert.NoError(t, err)
  64. assert.EqualValues(t, &base.Repository{
  65. Name: "test_repo",
  66. Owner: "go-gitea",
  67. Description: "Test repository for testing migration from github to gitea",
  68. CloneURL: "https://github.com/go-gitea/test_repo.git",
  69. OriginalURL: "https://github.com/go-gitea/test_repo",
  70. }, repo)
  71. topics, err := downloader.GetTopics()
  72. assert.NoError(t, err)
  73. assert.Contains(t, topics, "gitea")
  74. milestones, err := downloader.GetMilestones()
  75. assert.NoError(t, err)
  76. assert.True(t, len(milestones) >= 2)
  77. for _, milestone := range milestones {
  78. switch milestone.Title {
  79. case "1.0.0":
  80. assertMilestoneEqual(t, "Milestone 1.0.0", "1.0.0", "2019-11-11 08:00:00 +0000 UTC",
  81. "2019-11-12 19:37:08 +0000 UTC",
  82. "2019-11-12 21:56:17 +0000 UTC",
  83. "2019-11-12 19:45:49 +0000 UTC",
  84. "closed", milestone)
  85. case "1.1.0":
  86. assertMilestoneEqual(t, "Milestone 1.1.0", "1.1.0", "2019-11-12 08:00:00 +0000 UTC",
  87. "2019-11-12 19:37:25 +0000 UTC",
  88. "2019-11-12 21:39:27 +0000 UTC",
  89. "2019-11-12 19:45:46 +0000 UTC",
  90. "closed", milestone)
  91. }
  92. }
  93. labels, err := downloader.GetLabels()
  94. assert.NoError(t, err)
  95. assert.True(t, len(labels) >= 8)
  96. for _, l := range labels {
  97. switch l.Name {
  98. case "bug":
  99. assertLabelEqual(t, "bug", "d73a4a", "Something isn't working", l)
  100. case "documentation":
  101. assertLabelEqual(t, "documentation", "0075ca", "Improvements or additions to documentation", l)
  102. case "duplicate":
  103. assertLabelEqual(t, "duplicate", "cfd3d7", "This issue or pull request already exists", l)
  104. case "enhancement":
  105. assertLabelEqual(t, "enhancement", "a2eeef", "New feature or request", l)
  106. case "good first issue":
  107. assertLabelEqual(t, "good first issue", "7057ff", "Good for newcomers", l)
  108. case "help wanted":
  109. assertLabelEqual(t, "help wanted", "008672", "Extra attention is needed", l)
  110. case "invalid":
  111. assertLabelEqual(t, "invalid", "e4e669", "This doesn't seem right", l)
  112. case "question":
  113. assertLabelEqual(t, "question", "d876e3", "Further information is requested", l)
  114. }
  115. }
  116. releases, err := downloader.GetReleases()
  117. assert.NoError(t, err)
  118. assert.EqualValues(t, []*base.Release{
  119. {
  120. TagName: "v0.9.99",
  121. TargetCommitish: "master",
  122. Name: "First Release",
  123. Body: "A test release",
  124. Created: time.Date(2019, 11, 9, 16, 49, 21, 0, time.UTC),
  125. Published: time.Date(2019, 11, 12, 20, 12, 10, 0, time.UTC),
  126. PublisherID: 1669571,
  127. PublisherName: "mrsdizzie",
  128. },
  129. }, releases[len(releases)-1:])
  130. // downloader.GetIssues()
  131. issues, isEnd, err := downloader.GetIssues(1, 2)
  132. assert.NoError(t, err)
  133. assert.EqualValues(t, 2, len(issues))
  134. assert.False(t, isEnd)
  135. var (
  136. closed1 = time.Date(2019, 11, 12, 20, 22, 22, 0, time.UTC)
  137. closed2 = time.Date(2019, 11, 12, 21, 1, 31, 0, time.UTC)
  138. )
  139. assert.EqualValues(t, []*base.Issue{
  140. {
  141. Number: 1,
  142. Title: "Please add an animated gif icon to the merge button",
  143. Content: "I just want the merge button to hurt my eyes a little. \xF0\x9F\x98\x9D ",
  144. Milestone: "1.0.0",
  145. PosterID: 18600385,
  146. PosterName: "guillep2k",
  147. State: "closed",
  148. Created: time.Date(2019, 11, 9, 17, 0, 29, 0, time.UTC),
  149. Updated: time.Date(2019, 11, 12, 20, 29, 53, 0, time.UTC),
  150. Labels: []*base.Label{
  151. {
  152. Name: "bug",
  153. Color: "d73a4a",
  154. Description: "Something isn't working",
  155. },
  156. {
  157. Name: "good first issue",
  158. Color: "7057ff",
  159. Description: "Good for newcomers",
  160. },
  161. },
  162. Reactions: &base.Reactions{
  163. TotalCount: 1,
  164. PlusOne: 1,
  165. MinusOne: 0,
  166. Laugh: 0,
  167. Confused: 0,
  168. Heart: 0,
  169. Hooray: 0,
  170. },
  171. Closed: &closed1,
  172. },
  173. {
  174. Number: 2,
  175. Title: "Test issue",
  176. Content: "This is test issue 2, do not touch!",
  177. Milestone: "1.1.0",
  178. PosterID: 1669571,
  179. PosterName: "mrsdizzie",
  180. State: "closed",
  181. Created: time.Date(2019, 11, 12, 21, 0, 6, 0, time.UTC),
  182. Updated: time.Date(2019, 11, 12, 22, 7, 14, 0, time.UTC),
  183. Labels: []*base.Label{
  184. {
  185. Name: "duplicate",
  186. Color: "cfd3d7",
  187. Description: "This issue or pull request already exists",
  188. },
  189. },
  190. Reactions: &base.Reactions{
  191. TotalCount: 6,
  192. PlusOne: 1,
  193. MinusOne: 1,
  194. Laugh: 1,
  195. Confused: 1,
  196. Heart: 1,
  197. Hooray: 1,
  198. },
  199. Closed: &closed2,
  200. },
  201. }, issues)
  202. // downloader.GetComments()
  203. comments, err := downloader.GetComments(2)
  204. assert.NoError(t, err)
  205. assert.EqualValues(t, 2, len(comments))
  206. assert.EqualValues(t, []*base.Comment{
  207. {
  208. IssueIndex: 2,
  209. PosterID: 1669571,
  210. PosterName: "mrsdizzie",
  211. Created: time.Date(2019, 11, 12, 21, 0, 13, 0, time.UTC),
  212. Updated: time.Date(2019, 11, 12, 21, 0, 13, 0, time.UTC),
  213. Content: "This is a comment",
  214. Reactions: &base.Reactions{
  215. TotalCount: 1,
  216. PlusOne: 1,
  217. MinusOne: 0,
  218. Laugh: 0,
  219. Confused: 0,
  220. Heart: 0,
  221. Hooray: 0,
  222. },
  223. },
  224. {
  225. IssueIndex: 2,
  226. PosterID: 1669571,
  227. PosterName: "mrsdizzie",
  228. Created: time.Date(2019, 11, 12, 22, 7, 14, 0, time.UTC),
  229. Updated: time.Date(2019, 11, 12, 22, 7, 14, 0, time.UTC),
  230. Content: "A second comment",
  231. Reactions: &base.Reactions{
  232. TotalCount: 0,
  233. PlusOne: 0,
  234. MinusOne: 0,
  235. Laugh: 0,
  236. Confused: 0,
  237. Heart: 0,
  238. Hooray: 0,
  239. },
  240. },
  241. }, comments[:2])
  242. // downloader.GetPullRequests()
  243. prs, err := downloader.GetPullRequests(1, 2)
  244. assert.NoError(t, err)
  245. assert.EqualValues(t, 2, len(prs))
  246. closed1 = time.Date(2019, 11, 12, 21, 39, 27, 0, time.UTC)
  247. var merged1 = time.Date(2019, 11, 12, 21, 39, 27, 0, time.UTC)
  248. assert.EqualValues(t, []*base.PullRequest{
  249. {
  250. Number: 3,
  251. Title: "Update README.md",
  252. Content: "add warning to readme",
  253. Milestone: "1.1.0",
  254. PosterID: 1669571,
  255. PosterName: "mrsdizzie",
  256. State: "closed",
  257. Created: time.Date(2019, 11, 12, 21, 21, 43, 0, time.UTC),
  258. Updated: time.Date(2019, 11, 12, 21, 39, 28, 0, time.UTC),
  259. Labels: []*base.Label{
  260. {
  261. Name: "documentation",
  262. Color: "0075ca",
  263. Description: "Improvements or additions to documentation",
  264. },
  265. },
  266. PatchURL: "https://github.com/go-gitea/test_repo/pull/3.patch",
  267. Head: base.PullRequestBranch{
  268. Ref: "master",
  269. CloneURL: "https://github.com/mrsdizzie/test_repo.git",
  270. SHA: "076160cf0b039f13e5eff19619932d181269414b",
  271. RepoName: "test_repo",
  272. OwnerName: "mrsdizzie",
  273. },
  274. Base: base.PullRequestBranch{
  275. Ref: "master",
  276. SHA: "72866af952e98d02a73003501836074b286a78f6",
  277. OwnerName: "go-gitea",
  278. RepoName: "test_repo",
  279. },
  280. Closed: &closed1,
  281. Merged: true,
  282. MergedTime: &merged1,
  283. MergeCommitSHA: "f32b0a9dfd09a60f616f29158f772cedd89942d2",
  284. },
  285. {
  286. Number: 4,
  287. Title: "Test branch",
  288. Content: "do not merge this PR",
  289. Milestone: "1.0.0",
  290. PosterID: 1669571,
  291. PosterName: "mrsdizzie",
  292. State: "open",
  293. Created: time.Date(2019, 11, 12, 21, 54, 18, 0, time.UTC),
  294. Updated: time.Date(2020, 1, 4, 11, 30, 1, 0, time.UTC),
  295. Labels: []*base.Label{
  296. {
  297. Name: "bug",
  298. Color: "d73a4a",
  299. Description: "Something isn't working",
  300. },
  301. },
  302. PatchURL: "https://github.com/go-gitea/test_repo/pull/4.patch",
  303. Head: base.PullRequestBranch{
  304. Ref: "test-branch",
  305. SHA: "2be9101c543658591222acbee3eb799edfc3853d",
  306. RepoName: "test_repo",
  307. OwnerName: "mrsdizzie",
  308. CloneURL: "https://github.com/mrsdizzie/test_repo.git",
  309. },
  310. Base: base.PullRequestBranch{
  311. Ref: "master",
  312. SHA: "f32b0a9dfd09a60f616f29158f772cedd89942d2",
  313. OwnerName: "go-gitea",
  314. RepoName: "test_repo",
  315. },
  316. Merged: false,
  317. MergeCommitSHA: "565d1208f5fffdc1c5ae1a2436491eb9a5e4ebae",
  318. },
  319. }, prs)
  320. }