選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

refname_test.go 5.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. // Copyright 2017 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package validation
  4. import (
  5. "testing"
  6. "gitea.com/go-chi/binding"
  7. )
  8. var gitRefNameValidationTestCases = []validationTestCase{
  9. {
  10. description: "Reference name contains only characters",
  11. data: TestForm{
  12. BranchName: "test",
  13. },
  14. expectedErrors: binding.Errors{},
  15. },
  16. {
  17. description: "Reference name contains single slash",
  18. data: TestForm{
  19. BranchName: "feature/test",
  20. },
  21. expectedErrors: binding.Errors{},
  22. },
  23. {
  24. description: "Reference name has allowed special characters",
  25. data: TestForm{
  26. BranchName: "debian/1%1.6.0-2",
  27. },
  28. expectedErrors: binding.Errors{},
  29. },
  30. {
  31. description: "Reference name contains backslash",
  32. data: TestForm{
  33. BranchName: "feature\\test",
  34. },
  35. expectedErrors: binding.Errors{
  36. binding.Error{
  37. FieldNames: []string{"BranchName"},
  38. Classification: ErrGitRefName,
  39. Message: "GitRefName",
  40. },
  41. },
  42. },
  43. {
  44. description: "Reference name starts with dot",
  45. data: TestForm{
  46. BranchName: ".test",
  47. },
  48. expectedErrors: binding.Errors{
  49. binding.Error{
  50. FieldNames: []string{"BranchName"},
  51. Classification: ErrGitRefName,
  52. Message: "GitRefName",
  53. },
  54. },
  55. },
  56. {
  57. description: "Reference name ends with dot",
  58. data: TestForm{
  59. BranchName: "test.",
  60. },
  61. expectedErrors: binding.Errors{
  62. binding.Error{
  63. FieldNames: []string{"BranchName"},
  64. Classification: ErrGitRefName,
  65. Message: "GitRefName",
  66. },
  67. },
  68. },
  69. {
  70. description: "Reference name starts with slash",
  71. data: TestForm{
  72. BranchName: "/test",
  73. },
  74. expectedErrors: binding.Errors{
  75. binding.Error{
  76. FieldNames: []string{"BranchName"},
  77. Classification: ErrGitRefName,
  78. Message: "GitRefName",
  79. },
  80. },
  81. },
  82. {
  83. description: "Reference name ends with slash",
  84. data: TestForm{
  85. BranchName: "test/",
  86. },
  87. expectedErrors: binding.Errors{
  88. binding.Error{
  89. FieldNames: []string{"BranchName"},
  90. Classification: ErrGitRefName,
  91. Message: "GitRefName",
  92. },
  93. },
  94. },
  95. {
  96. description: "Reference name ends with .lock",
  97. data: TestForm{
  98. BranchName: "test.lock",
  99. },
  100. expectedErrors: binding.Errors{
  101. binding.Error{
  102. FieldNames: []string{"BranchName"},
  103. Classification: ErrGitRefName,
  104. Message: "GitRefName",
  105. },
  106. },
  107. },
  108. {
  109. description: "Reference name contains multiple consecutive dots",
  110. data: TestForm{
  111. BranchName: "te..st",
  112. },
  113. expectedErrors: binding.Errors{
  114. binding.Error{
  115. FieldNames: []string{"BranchName"},
  116. Classification: ErrGitRefName,
  117. Message: "GitRefName",
  118. },
  119. },
  120. },
  121. {
  122. description: "Reference name contains multiple consecutive slashes",
  123. data: TestForm{
  124. BranchName: "te//st",
  125. },
  126. expectedErrors: binding.Errors{
  127. binding.Error{
  128. FieldNames: []string{"BranchName"},
  129. Classification: ErrGitRefName,
  130. Message: "GitRefName",
  131. },
  132. },
  133. },
  134. {
  135. description: "Reference name is single @",
  136. data: TestForm{
  137. BranchName: "@",
  138. },
  139. expectedErrors: binding.Errors{
  140. binding.Error{
  141. FieldNames: []string{"BranchName"},
  142. Classification: ErrGitRefName,
  143. Message: "GitRefName",
  144. },
  145. },
  146. },
  147. {
  148. description: "Reference name has @{",
  149. data: TestForm{
  150. BranchName: "branch@{",
  151. },
  152. expectedErrors: binding.Errors{
  153. binding.Error{
  154. FieldNames: []string{"BranchName"},
  155. Classification: ErrGitRefName,
  156. Message: "GitRefName",
  157. },
  158. },
  159. },
  160. {
  161. description: "Reference name has unallowed special character ~",
  162. data: TestForm{
  163. BranchName: "~debian/1%1.6.0-2",
  164. },
  165. expectedErrors: binding.Errors{
  166. binding.Error{
  167. FieldNames: []string{"BranchName"},
  168. Classification: ErrGitRefName,
  169. Message: "GitRefName",
  170. },
  171. },
  172. },
  173. {
  174. description: "Reference name has unallowed special character *",
  175. data: TestForm{
  176. BranchName: "*debian/1%1.6.0-2",
  177. },
  178. expectedErrors: binding.Errors{
  179. binding.Error{
  180. FieldNames: []string{"BranchName"},
  181. Classification: ErrGitRefName,
  182. Message: "GitRefName",
  183. },
  184. },
  185. },
  186. {
  187. description: "Reference name has unallowed special character ?",
  188. data: TestForm{
  189. BranchName: "?debian/1%1.6.0-2",
  190. },
  191. expectedErrors: binding.Errors{
  192. binding.Error{
  193. FieldNames: []string{"BranchName"},
  194. Classification: ErrGitRefName,
  195. Message: "GitRefName",
  196. },
  197. },
  198. },
  199. {
  200. description: "Reference name has unallowed special character ^",
  201. data: TestForm{
  202. BranchName: "^debian/1%1.6.0-2",
  203. },
  204. expectedErrors: binding.Errors{
  205. binding.Error{
  206. FieldNames: []string{"BranchName"},
  207. Classification: ErrGitRefName,
  208. Message: "GitRefName",
  209. },
  210. },
  211. },
  212. {
  213. description: "Reference name has unallowed special character :",
  214. data: TestForm{
  215. BranchName: "debian:jessie",
  216. },
  217. expectedErrors: binding.Errors{
  218. binding.Error{
  219. FieldNames: []string{"BranchName"},
  220. Classification: ErrGitRefName,
  221. Message: "GitRefName",
  222. },
  223. },
  224. },
  225. {
  226. description: "Reference name has unallowed special character (whitespace)",
  227. data: TestForm{
  228. BranchName: "debian jessie",
  229. },
  230. expectedErrors: binding.Errors{
  231. binding.Error{
  232. FieldNames: []string{"BranchName"},
  233. Classification: ErrGitRefName,
  234. Message: "GitRefName",
  235. },
  236. },
  237. },
  238. {
  239. description: "Reference name has unallowed special character [",
  240. data: TestForm{
  241. BranchName: "debian[jessie",
  242. },
  243. expectedErrors: binding.Errors{
  244. binding.Error{
  245. FieldNames: []string{"BranchName"},
  246. Classification: ErrGitRefName,
  247. Message: "GitRefName",
  248. },
  249. },
  250. },
  251. }
  252. func Test_GitRefNameValidation(t *testing.T) {
  253. AddBindingRules()
  254. for _, testCase := range gitRefNameValidationTestCases {
  255. t.Run(testCase.description, func(t *testing.T) {
  256. performValidationTest(t, testCase)
  257. })
  258. }
  259. }