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.0KB

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