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.

protected_tag_test.go 3.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. // Copyright 2021 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package git_test
  4. import (
  5. "testing"
  6. "code.gitea.io/gitea/models/db"
  7. git_model "code.gitea.io/gitea/models/git"
  8. "code.gitea.io/gitea/models/unittest"
  9. "github.com/stretchr/testify/assert"
  10. )
  11. func TestIsUserAllowed(t *testing.T) {
  12. assert.NoError(t, unittest.PrepareTestDatabase())
  13. pt := &git_model.ProtectedTag{}
  14. allowed, err := git_model.IsUserAllowedModifyTag(db.DefaultContext, pt, 1)
  15. assert.NoError(t, err)
  16. assert.False(t, allowed)
  17. pt = &git_model.ProtectedTag{
  18. AllowlistUserIDs: []int64{1},
  19. }
  20. allowed, err = git_model.IsUserAllowedModifyTag(db.DefaultContext, pt, 1)
  21. assert.NoError(t, err)
  22. assert.True(t, allowed)
  23. allowed, err = git_model.IsUserAllowedModifyTag(db.DefaultContext, pt, 2)
  24. assert.NoError(t, err)
  25. assert.False(t, allowed)
  26. pt = &git_model.ProtectedTag{
  27. AllowlistTeamIDs: []int64{1},
  28. }
  29. allowed, err = git_model.IsUserAllowedModifyTag(db.DefaultContext, pt, 1)
  30. assert.NoError(t, err)
  31. assert.False(t, allowed)
  32. allowed, err = git_model.IsUserAllowedModifyTag(db.DefaultContext, pt, 2)
  33. assert.NoError(t, err)
  34. assert.True(t, allowed)
  35. pt = &git_model.ProtectedTag{
  36. AllowlistUserIDs: []int64{1},
  37. AllowlistTeamIDs: []int64{1},
  38. }
  39. allowed, err = git_model.IsUserAllowedModifyTag(db.DefaultContext, pt, 1)
  40. assert.NoError(t, err)
  41. assert.True(t, allowed)
  42. allowed, err = git_model.IsUserAllowedModifyTag(db.DefaultContext, pt, 2)
  43. assert.NoError(t, err)
  44. assert.True(t, allowed)
  45. }
  46. func TestIsUserAllowedToControlTag(t *testing.T) {
  47. cases := []struct {
  48. name string
  49. userid int64
  50. allowed bool
  51. }{
  52. {
  53. name: "test",
  54. userid: 1,
  55. allowed: true,
  56. },
  57. {
  58. name: "test",
  59. userid: 3,
  60. allowed: true,
  61. },
  62. {
  63. name: "gitea",
  64. userid: 1,
  65. allowed: true,
  66. },
  67. {
  68. name: "gitea",
  69. userid: 3,
  70. allowed: false,
  71. },
  72. {
  73. name: "test-gitea",
  74. userid: 1,
  75. allowed: true,
  76. },
  77. {
  78. name: "test-gitea",
  79. userid: 3,
  80. allowed: false,
  81. },
  82. {
  83. name: "gitea-test",
  84. userid: 1,
  85. allowed: true,
  86. },
  87. {
  88. name: "gitea-test",
  89. userid: 3,
  90. allowed: true,
  91. },
  92. {
  93. name: "v-1",
  94. userid: 1,
  95. allowed: false,
  96. },
  97. {
  98. name: "v-1",
  99. userid: 2,
  100. allowed: true,
  101. },
  102. {
  103. name: "release",
  104. userid: 1,
  105. allowed: false,
  106. },
  107. }
  108. t.Run("Glob", func(t *testing.T) {
  109. protectedTags := []*git_model.ProtectedTag{
  110. {
  111. NamePattern: `*gitea`,
  112. AllowlistUserIDs: []int64{1},
  113. },
  114. {
  115. NamePattern: `v-*`,
  116. AllowlistUserIDs: []int64{2},
  117. },
  118. {
  119. NamePattern: "release",
  120. },
  121. }
  122. for n, c := range cases {
  123. isAllowed, err := git_model.IsUserAllowedToControlTag(db.DefaultContext, protectedTags, c.name, c.userid)
  124. assert.NoError(t, err)
  125. assert.Equal(t, c.allowed, isAllowed, "case %d: error should match", n)
  126. }
  127. })
  128. t.Run("Regex", func(t *testing.T) {
  129. protectedTags := []*git_model.ProtectedTag{
  130. {
  131. NamePattern: `/gitea\z/`,
  132. AllowlistUserIDs: []int64{1},
  133. },
  134. {
  135. NamePattern: `/\Av-/`,
  136. AllowlistUserIDs: []int64{2},
  137. },
  138. {
  139. NamePattern: "/release/",
  140. },
  141. }
  142. for n, c := range cases {
  143. isAllowed, err := git_model.IsUserAllowedToControlTag(db.DefaultContext, protectedTags, c.name, c.userid)
  144. assert.NoError(t, err)
  145. assert.Equal(t, c.allowed, isAllowed, "case %d: error should match", n)
  146. }
  147. })
  148. }