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.

repo_test.go 5.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. // Copyright 2017 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package repo_test
  4. import (
  5. "testing"
  6. "code.gitea.io/gitea/models/db"
  7. repo_model "code.gitea.io/gitea/models/repo"
  8. "code.gitea.io/gitea/models/unit"
  9. "code.gitea.io/gitea/models/unittest"
  10. user_model "code.gitea.io/gitea/models/user"
  11. "code.gitea.io/gitea/modules/markup"
  12. "code.gitea.io/gitea/modules/util"
  13. "github.com/stretchr/testify/assert"
  14. )
  15. var (
  16. countRepospts = repo_model.CountRepositoryOptions{OwnerID: 10}
  17. countReposptsPublic = repo_model.CountRepositoryOptions{OwnerID: 10, Private: util.OptionalBoolFalse}
  18. countReposptsPrivate = repo_model.CountRepositoryOptions{OwnerID: 10, Private: util.OptionalBoolTrue}
  19. )
  20. func TestGetRepositoryCount(t *testing.T) {
  21. assert.NoError(t, unittest.PrepareTestDatabase())
  22. ctx := db.DefaultContext
  23. count, err1 := repo_model.CountRepositories(ctx, countRepospts)
  24. privateCount, err2 := repo_model.CountRepositories(ctx, countReposptsPrivate)
  25. publicCount, err3 := repo_model.CountRepositories(ctx, countReposptsPublic)
  26. assert.NoError(t, err1)
  27. assert.NoError(t, err2)
  28. assert.NoError(t, err3)
  29. assert.Equal(t, int64(3), count)
  30. assert.Equal(t, privateCount+publicCount, count)
  31. }
  32. func TestGetPublicRepositoryCount(t *testing.T) {
  33. assert.NoError(t, unittest.PrepareTestDatabase())
  34. count, err := repo_model.CountRepositories(db.DefaultContext, countReposptsPublic)
  35. assert.NoError(t, err)
  36. assert.Equal(t, int64(1), count)
  37. }
  38. func TestGetPrivateRepositoryCount(t *testing.T) {
  39. assert.NoError(t, unittest.PrepareTestDatabase())
  40. count, err := repo_model.CountRepositories(db.DefaultContext, countReposptsPrivate)
  41. assert.NoError(t, err)
  42. assert.Equal(t, int64(2), count)
  43. }
  44. func TestRepoAPIURL(t *testing.T) {
  45. assert.NoError(t, unittest.PrepareTestDatabase())
  46. repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 10})
  47. assert.Equal(t, "https://try.gitea.io/api/v1/repos/user12/repo10", repo.APIURL())
  48. }
  49. func TestWatchRepo(t *testing.T) {
  50. assert.NoError(t, unittest.PrepareTestDatabase())
  51. const repoID = 3
  52. const userID = 2
  53. assert.NoError(t, repo_model.WatchRepo(db.DefaultContext, userID, repoID, true))
  54. unittest.AssertExistsAndLoadBean(t, &repo_model.Watch{RepoID: repoID, UserID: userID})
  55. unittest.CheckConsistencyFor(t, &repo_model.Repository{ID: repoID})
  56. assert.NoError(t, repo_model.WatchRepo(db.DefaultContext, userID, repoID, false))
  57. unittest.AssertNotExistsBean(t, &repo_model.Watch{RepoID: repoID, UserID: userID})
  58. unittest.CheckConsistencyFor(t, &repo_model.Repository{ID: repoID})
  59. }
  60. func TestMetas(t *testing.T) {
  61. assert.NoError(t, unittest.PrepareTestDatabase())
  62. repo := &repo_model.Repository{Name: "testRepo"}
  63. repo.Owner = &user_model.User{Name: "testOwner"}
  64. repo.OwnerName = repo.Owner.Name
  65. repo.Units = nil
  66. metas := repo.ComposeMetas()
  67. assert.Equal(t, "testRepo", metas["repo"])
  68. assert.Equal(t, "testOwner", metas["user"])
  69. externalTracker := repo_model.RepoUnit{
  70. Type: unit.TypeExternalTracker,
  71. Config: &repo_model.ExternalTrackerConfig{
  72. ExternalTrackerFormat: "https://someurl.com/{user}/{repo}/{issue}",
  73. },
  74. }
  75. testSuccess := func(expectedStyle string) {
  76. repo.Units = []*repo_model.RepoUnit{&externalTracker}
  77. repo.RenderingMetas = nil
  78. metas := repo.ComposeMetas()
  79. assert.Equal(t, expectedStyle, metas["style"])
  80. assert.Equal(t, "testRepo", metas["repo"])
  81. assert.Equal(t, "testOwner", metas["user"])
  82. assert.Equal(t, "https://someurl.com/{user}/{repo}/{issue}", metas["format"])
  83. }
  84. testSuccess(markup.IssueNameStyleNumeric)
  85. externalTracker.ExternalTrackerConfig().ExternalTrackerStyle = markup.IssueNameStyleAlphanumeric
  86. testSuccess(markup.IssueNameStyleAlphanumeric)
  87. externalTracker.ExternalTrackerConfig().ExternalTrackerStyle = markup.IssueNameStyleNumeric
  88. testSuccess(markup.IssueNameStyleNumeric)
  89. externalTracker.ExternalTrackerConfig().ExternalTrackerStyle = markup.IssueNameStyleRegexp
  90. testSuccess(markup.IssueNameStyleRegexp)
  91. repo, err := repo_model.GetRepositoryByID(db.DefaultContext, 3)
  92. assert.NoError(t, err)
  93. metas = repo.ComposeMetas()
  94. assert.Contains(t, metas, "org")
  95. assert.Contains(t, metas, "teams")
  96. assert.Equal(t, "org3", metas["org"])
  97. assert.Equal(t, ",owners,team1,", metas["teams"])
  98. }
  99. func TestGetRepositoryByURL(t *testing.T) {
  100. assert.NoError(t, unittest.PrepareTestDatabase())
  101. t.Run("InvalidPath", func(t *testing.T) {
  102. repo, err := repo_model.GetRepositoryByURL(db.DefaultContext, "something")
  103. assert.Nil(t, repo)
  104. assert.Error(t, err)
  105. })
  106. t.Run("ValidHttpURL", func(t *testing.T) {
  107. test := func(t *testing.T, url string) {
  108. repo, err := repo_model.GetRepositoryByURL(db.DefaultContext, url)
  109. assert.NotNil(t, repo)
  110. assert.NoError(t, err)
  111. assert.Equal(t, repo.ID, int64(2))
  112. assert.Equal(t, repo.OwnerID, int64(2))
  113. }
  114. test(t, "https://try.gitea.io/user2/repo2")
  115. test(t, "https://try.gitea.io/user2/repo2.git")
  116. })
  117. t.Run("ValidGitSshURL", func(t *testing.T) {
  118. test := func(t *testing.T, url string) {
  119. repo, err := repo_model.GetRepositoryByURL(db.DefaultContext, url)
  120. assert.NotNil(t, repo)
  121. assert.NoError(t, err)
  122. assert.Equal(t, repo.ID, int64(2))
  123. assert.Equal(t, repo.OwnerID, int64(2))
  124. }
  125. test(t, "git+ssh://sshuser@try.gitea.io/user2/repo2")
  126. test(t, "git+ssh://sshuser@try.gitea.io/user2/repo2.git")
  127. test(t, "git+ssh://try.gitea.io/user2/repo2")
  128. test(t, "git+ssh://try.gitea.io/user2/repo2.git")
  129. })
  130. t.Run("ValidImplicitSshURL", func(t *testing.T) {
  131. test := func(t *testing.T, url string) {
  132. repo, err := repo_model.GetRepositoryByURL(db.DefaultContext, url)
  133. assert.NotNil(t, repo)
  134. assert.NoError(t, err)
  135. assert.Equal(t, repo.ID, int64(2))
  136. assert.Equal(t, repo.OwnerID, int64(2))
  137. }
  138. test(t, "sshuser@try.gitea.io:user2/repo2")
  139. test(t, "sshuser@try.gitea.io:user2/repo2.git")
  140. test(t, "try.gitea.io:user2/repo2")
  141. test(t, "try.gitea.io:user2/repo2.git")
  142. })
  143. }