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.

release_test.go 7.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. // Copyright 2018 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 release
  5. import (
  6. "path/filepath"
  7. "testing"
  8. "time"
  9. "code.gitea.io/gitea/models"
  10. "code.gitea.io/gitea/modules/git"
  11. "github.com/stretchr/testify/assert"
  12. )
  13. func TestMain(m *testing.M) {
  14. models.MainTest(m, filepath.Join("..", ".."))
  15. }
  16. func TestRelease_Create(t *testing.T) {
  17. assert.NoError(t, models.PrepareTestDatabase())
  18. user := models.AssertExistsAndLoadBean(t, &models.User{ID: 2}).(*models.User)
  19. repo := models.AssertExistsAndLoadBean(t, &models.Repository{ID: 1}).(*models.Repository)
  20. repoPath := models.RepoPath(user.Name, repo.Name)
  21. gitRepo, err := git.OpenRepository(repoPath)
  22. assert.NoError(t, err)
  23. defer gitRepo.Close()
  24. assert.NoError(t, CreateRelease(gitRepo, &models.Release{
  25. RepoID: repo.ID,
  26. PublisherID: user.ID,
  27. TagName: "v0.1",
  28. Target: "master",
  29. Title: "v0.1 is released",
  30. Note: "v0.1 is released",
  31. IsDraft: false,
  32. IsPrerelease: false,
  33. IsTag: false,
  34. }, nil))
  35. assert.NoError(t, CreateRelease(gitRepo, &models.Release{
  36. RepoID: repo.ID,
  37. PublisherID: user.ID,
  38. TagName: "v0.1.1",
  39. Target: "65f1bf27bc3bf70f64657658635e66094edbcb4d",
  40. Title: "v0.1.1 is released",
  41. Note: "v0.1.1 is released",
  42. IsDraft: false,
  43. IsPrerelease: false,
  44. IsTag: false,
  45. }, nil))
  46. assert.NoError(t, CreateRelease(gitRepo, &models.Release{
  47. RepoID: repo.ID,
  48. PublisherID: user.ID,
  49. TagName: "v0.1.2",
  50. Target: "65f1bf2",
  51. Title: "v0.1.2 is released",
  52. Note: "v0.1.2 is released",
  53. IsDraft: false,
  54. IsPrerelease: false,
  55. IsTag: false,
  56. }, nil))
  57. assert.NoError(t, CreateRelease(gitRepo, &models.Release{
  58. RepoID: repo.ID,
  59. PublisherID: user.ID,
  60. TagName: "v0.1.3",
  61. Target: "65f1bf2",
  62. Title: "v0.1.3 is released",
  63. Note: "v0.1.3 is released",
  64. IsDraft: true,
  65. IsPrerelease: false,
  66. IsTag: false,
  67. }, nil))
  68. assert.NoError(t, CreateRelease(gitRepo, &models.Release{
  69. RepoID: repo.ID,
  70. PublisherID: user.ID,
  71. TagName: "v0.1.4",
  72. Target: "65f1bf2",
  73. Title: "v0.1.4 is released",
  74. Note: "v0.1.4 is released",
  75. IsDraft: false,
  76. IsPrerelease: true,
  77. IsTag: false,
  78. }, nil))
  79. assert.NoError(t, CreateRelease(gitRepo, &models.Release{
  80. RepoID: repo.ID,
  81. PublisherID: user.ID,
  82. TagName: "v0.1.5",
  83. Target: "65f1bf2",
  84. Title: "v0.1.5 is released",
  85. Note: "v0.1.5 is released",
  86. IsDraft: false,
  87. IsPrerelease: false,
  88. IsTag: true,
  89. }, nil))
  90. }
  91. func TestRelease_Update(t *testing.T) {
  92. assert.NoError(t, models.PrepareTestDatabase())
  93. user := models.AssertExistsAndLoadBean(t, &models.User{ID: 2}).(*models.User)
  94. repo := models.AssertExistsAndLoadBean(t, &models.Repository{ID: 1}).(*models.Repository)
  95. repoPath := models.RepoPath(user.Name, repo.Name)
  96. gitRepo, err := git.OpenRepository(repoPath)
  97. assert.NoError(t, err)
  98. defer gitRepo.Close()
  99. // Test a changed release
  100. assert.NoError(t, CreateRelease(gitRepo, &models.Release{
  101. RepoID: repo.ID,
  102. PublisherID: user.ID,
  103. TagName: "v1.1.1",
  104. Target: "master",
  105. Title: "v1.1.1 is released",
  106. Note: "v1.1.1 is released",
  107. IsDraft: false,
  108. IsPrerelease: false,
  109. IsTag: false,
  110. }, nil))
  111. release, err := models.GetRelease(repo.ID, "v1.1.1")
  112. assert.NoError(t, err)
  113. releaseCreatedUnix := release.CreatedUnix
  114. time.Sleep(2 * time.Second) // sleep 2 seconds to ensure a different timestamp
  115. release.Note = "Changed note"
  116. assert.NoError(t, UpdateRelease(user, gitRepo, release, nil))
  117. release, err = models.GetReleaseByID(release.ID)
  118. assert.NoError(t, err)
  119. assert.Equal(t, int64(releaseCreatedUnix), int64(release.CreatedUnix))
  120. // Test a changed draft
  121. assert.NoError(t, CreateRelease(gitRepo, &models.Release{
  122. RepoID: repo.ID,
  123. PublisherID: user.ID,
  124. TagName: "v1.2.1",
  125. Target: "65f1bf2",
  126. Title: "v1.2.1 is draft",
  127. Note: "v1.2.1 is draft",
  128. IsDraft: true,
  129. IsPrerelease: false,
  130. IsTag: false,
  131. }, nil))
  132. release, err = models.GetRelease(repo.ID, "v1.2.1")
  133. assert.NoError(t, err)
  134. releaseCreatedUnix = release.CreatedUnix
  135. time.Sleep(2 * time.Second) // sleep 2 seconds to ensure a different timestamp
  136. release.Title = "Changed title"
  137. assert.NoError(t, UpdateRelease(user, gitRepo, release, nil))
  138. release, err = models.GetReleaseByID(release.ID)
  139. assert.NoError(t, err)
  140. assert.Less(t, int64(releaseCreatedUnix), int64(release.CreatedUnix))
  141. // Test a changed pre-release
  142. assert.NoError(t, CreateRelease(gitRepo, &models.Release{
  143. RepoID: repo.ID,
  144. PublisherID: user.ID,
  145. TagName: "v1.3.1",
  146. Target: "65f1bf2",
  147. Title: "v1.3.1 is pre-released",
  148. Note: "v1.3.1 is pre-released",
  149. IsDraft: false,
  150. IsPrerelease: true,
  151. IsTag: false,
  152. }, nil))
  153. release, err = models.GetRelease(repo.ID, "v1.3.1")
  154. assert.NoError(t, err)
  155. releaseCreatedUnix = release.CreatedUnix
  156. time.Sleep(2 * time.Second) // sleep 2 seconds to ensure a different timestamp
  157. release.Title = "Changed title"
  158. release.Note = "Changed note"
  159. assert.NoError(t, UpdateRelease(user, gitRepo, release, nil))
  160. release, err = models.GetReleaseByID(release.ID)
  161. assert.NoError(t, err)
  162. assert.Equal(t, int64(releaseCreatedUnix), int64(release.CreatedUnix))
  163. }
  164. func TestRelease_createTag(t *testing.T) {
  165. assert.NoError(t, models.PrepareTestDatabase())
  166. user := models.AssertExistsAndLoadBean(t, &models.User{ID: 2}).(*models.User)
  167. repo := models.AssertExistsAndLoadBean(t, &models.Repository{ID: 1}).(*models.Repository)
  168. repoPath := models.RepoPath(user.Name, repo.Name)
  169. gitRepo, err := git.OpenRepository(repoPath)
  170. assert.NoError(t, err)
  171. defer gitRepo.Close()
  172. // Test a changed release
  173. release := &models.Release{
  174. RepoID: repo.ID,
  175. PublisherID: user.ID,
  176. TagName: "v2.1.1",
  177. Target: "master",
  178. Title: "v2.1.1 is released",
  179. Note: "v2.1.1 is released",
  180. IsDraft: false,
  181. IsPrerelease: false,
  182. IsTag: false,
  183. }
  184. assert.NoError(t, createTag(gitRepo, release))
  185. assert.NotEmpty(t, release.CreatedUnix)
  186. releaseCreatedUnix := release.CreatedUnix
  187. time.Sleep(2 * time.Second) // sleep 2 seconds to ensure a different timestamp
  188. release.Note = "Changed note"
  189. assert.NoError(t, createTag(gitRepo, release))
  190. assert.Equal(t, int64(releaseCreatedUnix), int64(release.CreatedUnix))
  191. // Test a changed draft
  192. release = &models.Release{
  193. RepoID: repo.ID,
  194. PublisherID: user.ID,
  195. TagName: "v2.2.1",
  196. Target: "65f1bf2",
  197. Title: "v2.2.1 is draft",
  198. Note: "v2.2.1 is draft",
  199. IsDraft: true,
  200. IsPrerelease: false,
  201. IsTag: false,
  202. }
  203. assert.NoError(t, createTag(gitRepo, release))
  204. releaseCreatedUnix = release.CreatedUnix
  205. time.Sleep(2 * time.Second) // sleep 2 seconds to ensure a different timestamp
  206. release.Title = "Changed title"
  207. assert.NoError(t, createTag(gitRepo, release))
  208. assert.Less(t, int64(releaseCreatedUnix), int64(release.CreatedUnix))
  209. // Test a changed pre-release
  210. release = &models.Release{
  211. RepoID: repo.ID,
  212. PublisherID: user.ID,
  213. TagName: "v2.3.1",
  214. Target: "65f1bf2",
  215. Title: "v2.3.1 is pre-released",
  216. Note: "v2.3.1 is pre-released",
  217. IsDraft: false,
  218. IsPrerelease: true,
  219. IsTag: false,
  220. }
  221. assert.NoError(t, createTag(gitRepo, release))
  222. releaseCreatedUnix = release.CreatedUnix
  223. time.Sleep(2 * time.Second) // sleep 2 seconds to ensure a different timestamp
  224. release.Title = "Changed title"
  225. release.Note = "Changed note"
  226. assert.NoError(t, createTag(gitRepo, release))
  227. assert.Equal(t, int64(releaseCreatedUnix), int64(release.CreatedUnix))
  228. }