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

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