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_tag_test.go 2.1KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. // Copyright 2021 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 integrations
  5. import (
  6. "net/url"
  7. "os"
  8. "testing"
  9. "code.gitea.io/gitea/models"
  10. "code.gitea.io/gitea/models/unittest"
  11. user_model "code.gitea.io/gitea/models/user"
  12. "code.gitea.io/gitea/modules/git"
  13. "code.gitea.io/gitea/modules/util"
  14. "code.gitea.io/gitea/services/release"
  15. "github.com/stretchr/testify/assert"
  16. )
  17. func TestCreateNewTagProtected(t *testing.T) {
  18. defer prepareTestEnv(t)()
  19. repo := unittest.AssertExistsAndLoadBean(t, &models.Repository{ID: 1}).(*models.Repository)
  20. owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID}).(*user_model.User)
  21. t.Run("API", func(t *testing.T) {
  22. defer PrintCurrentTest(t)()
  23. err := release.CreateNewTag(owner, repo, "master", "v-1", "first tag")
  24. assert.NoError(t, err)
  25. err = models.InsertProtectedTag(&models.ProtectedTag{
  26. RepoID: repo.ID,
  27. NamePattern: "v-*",
  28. })
  29. assert.NoError(t, err)
  30. err = models.InsertProtectedTag(&models.ProtectedTag{
  31. RepoID: repo.ID,
  32. NamePattern: "v-1.1",
  33. AllowlistUserIDs: []int64{repo.OwnerID},
  34. })
  35. assert.NoError(t, err)
  36. err = release.CreateNewTag(owner, repo, "master", "v-2", "second tag")
  37. assert.Error(t, err)
  38. assert.True(t, models.IsErrProtectedTagName(err))
  39. err = release.CreateNewTag(owner, repo, "master", "v-1.1", "third tag")
  40. assert.NoError(t, err)
  41. })
  42. t.Run("Git", func(t *testing.T) {
  43. onGiteaRun(t, func(t *testing.T, u *url.URL) {
  44. username := "user2"
  45. httpContext := NewAPITestContext(t, username, "repo1")
  46. dstPath, err := os.MkdirTemp("", httpContext.Reponame)
  47. assert.NoError(t, err)
  48. defer util.RemoveAll(dstPath)
  49. u.Path = httpContext.GitPath()
  50. u.User = url.UserPassword(username, userPassword)
  51. doGitClone(dstPath, u)(t)
  52. _, err = git.NewCommand("tag", "v-2").RunInDir(dstPath)
  53. assert.NoError(t, err)
  54. _, err = git.NewCommand("push", "--tags").RunInDir(dstPath)
  55. assert.Error(t, err)
  56. assert.Contains(t, err.Error(), "Tag v-2 is protected")
  57. })
  58. })
  59. }