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 2.9KB

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