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.

fix16961_test.go 7.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. // Copyright 2021 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package doctor
  4. import (
  5. "testing"
  6. repo_model "code.gitea.io/gitea/models/repo"
  7. "github.com/stretchr/testify/assert"
  8. )
  9. func Test_fixUnitConfig_16961(t *testing.T) {
  10. tests := []struct {
  11. name string
  12. bs string
  13. wantFixed bool
  14. wantErr bool
  15. }{
  16. {
  17. name: "empty",
  18. bs: "",
  19. wantFixed: true,
  20. wantErr: false,
  21. },
  22. {
  23. name: "normal: {}",
  24. bs: "{}",
  25. wantFixed: false,
  26. wantErr: false,
  27. },
  28. {
  29. name: "broken but fixable: &{}",
  30. bs: "&{}",
  31. wantFixed: true,
  32. wantErr: false,
  33. },
  34. {
  35. name: "broken but unfixable: &{asdasd}",
  36. bs: "&{asdasd}",
  37. wantFixed: false,
  38. wantErr: true,
  39. },
  40. }
  41. for _, tt := range tests {
  42. t.Run(tt.name, func(t *testing.T) {
  43. gotFixed, err := fixUnitConfig16961([]byte(tt.bs), &repo_model.UnitConfig{})
  44. if (err != nil) != tt.wantErr {
  45. t.Errorf("fixUnitConfig_16961() error = %v, wantErr %v", err, tt.wantErr)
  46. return
  47. }
  48. if gotFixed != tt.wantFixed {
  49. t.Errorf("fixUnitConfig_16961() = %v, want %v", gotFixed, tt.wantFixed)
  50. }
  51. })
  52. }
  53. }
  54. func Test_fixExternalWikiConfig_16961(t *testing.T) {
  55. tests := []struct {
  56. name string
  57. bs string
  58. expected string
  59. wantFixed bool
  60. wantErr bool
  61. }{
  62. {
  63. name: "normal: {\"ExternalWikiURL\":\"http://someurl\"}",
  64. bs: "{\"ExternalWikiURL\":\"http://someurl\"}",
  65. expected: "http://someurl",
  66. wantFixed: false,
  67. wantErr: false,
  68. },
  69. {
  70. name: "broken: &{http://someurl}",
  71. bs: "&{http://someurl}",
  72. expected: "http://someurl",
  73. wantFixed: true,
  74. wantErr: false,
  75. },
  76. {
  77. name: "broken but unfixable: http://someurl",
  78. bs: "http://someurl",
  79. wantFixed: false,
  80. wantErr: true,
  81. },
  82. }
  83. for _, tt := range tests {
  84. t.Run(tt.name, func(t *testing.T) {
  85. cfg := &repo_model.ExternalWikiConfig{}
  86. gotFixed, err := fixExternalWikiConfig16961([]byte(tt.bs), cfg)
  87. if (err != nil) != tt.wantErr {
  88. t.Errorf("fixExternalWikiConfig_16961() error = %v, wantErr %v", err, tt.wantErr)
  89. return
  90. }
  91. if gotFixed != tt.wantFixed {
  92. t.Errorf("fixExternalWikiConfig_16961() = %v, want %v", gotFixed, tt.wantFixed)
  93. }
  94. if cfg.ExternalWikiURL != tt.expected {
  95. t.Errorf("fixExternalWikiConfig_16961().ExternalWikiURL = %v, want %v", cfg.ExternalWikiURL, tt.expected)
  96. }
  97. })
  98. }
  99. }
  100. func Test_fixExternalTrackerConfig_16961(t *testing.T) {
  101. tests := []struct {
  102. name string
  103. bs string
  104. expected repo_model.ExternalTrackerConfig
  105. wantFixed bool
  106. wantErr bool
  107. }{
  108. {
  109. name: "normal",
  110. bs: `{"ExternalTrackerURL":"a","ExternalTrackerFormat":"b","ExternalTrackerStyle":"c"}`,
  111. expected: repo_model.ExternalTrackerConfig{
  112. ExternalTrackerURL: "a",
  113. ExternalTrackerFormat: "b",
  114. ExternalTrackerStyle: "c",
  115. },
  116. wantFixed: false,
  117. wantErr: false,
  118. },
  119. {
  120. name: "broken",
  121. bs: "&{a b c}",
  122. expected: repo_model.ExternalTrackerConfig{
  123. ExternalTrackerURL: "a",
  124. ExternalTrackerFormat: "b",
  125. ExternalTrackerStyle: "c",
  126. },
  127. wantFixed: true,
  128. wantErr: false,
  129. },
  130. {
  131. name: "broken - too many fields",
  132. bs: "&{a b c d}",
  133. wantFixed: false,
  134. wantErr: true,
  135. },
  136. {
  137. name: "broken - wrong format",
  138. bs: "a b c d}",
  139. wantFixed: false,
  140. wantErr: true,
  141. },
  142. }
  143. for _, tt := range tests {
  144. t.Run(tt.name, func(t *testing.T) {
  145. cfg := &repo_model.ExternalTrackerConfig{}
  146. gotFixed, err := fixExternalTrackerConfig16961([]byte(tt.bs), cfg)
  147. if (err != nil) != tt.wantErr {
  148. t.Errorf("fixExternalTrackerConfig_16961() error = %v, wantErr %v", err, tt.wantErr)
  149. return
  150. }
  151. if gotFixed != tt.wantFixed {
  152. t.Errorf("fixExternalTrackerConfig_16961() = %v, want %v", gotFixed, tt.wantFixed)
  153. }
  154. if cfg.ExternalTrackerFormat != tt.expected.ExternalTrackerFormat {
  155. t.Errorf("fixExternalTrackerConfig_16961().ExternalTrackerFormat = %v, want %v", tt.expected.ExternalTrackerFormat, cfg.ExternalTrackerFormat)
  156. }
  157. if cfg.ExternalTrackerStyle != tt.expected.ExternalTrackerStyle {
  158. t.Errorf("fixExternalTrackerConfig_16961().ExternalTrackerStyle = %v, want %v", tt.expected.ExternalTrackerStyle, cfg.ExternalTrackerStyle)
  159. }
  160. if cfg.ExternalTrackerURL != tt.expected.ExternalTrackerURL {
  161. t.Errorf("fixExternalTrackerConfig_16961().ExternalTrackerURL = %v, want %v", tt.expected.ExternalTrackerURL, cfg.ExternalTrackerURL)
  162. }
  163. })
  164. }
  165. }
  166. func Test_fixPullRequestsConfig_16961(t *testing.T) {
  167. tests := []struct {
  168. name string
  169. bs string
  170. expected repo_model.PullRequestsConfig
  171. wantFixed bool
  172. wantErr bool
  173. }{
  174. {
  175. name: "normal",
  176. bs: `{"IgnoreWhitespaceConflicts":false,"AllowMerge":false,"AllowRebase":false,"AllowRebaseMerge":false,"AllowSquash":false,"AllowManualMerge":false,"AutodetectManualMerge":false,"DefaultDeleteBranchAfterMerge":false,"DefaultMergeStyle":""}`,
  177. },
  178. {
  179. name: "broken - 1.14",
  180. bs: `&{%!s(bool=false) %!s(bool=true) %!s(bool=true) %!s(bool=true) %!s(bool=true) %!s(bool=false) %!s(bool=false)}`,
  181. expected: repo_model.PullRequestsConfig{
  182. IgnoreWhitespaceConflicts: false,
  183. AllowMerge: true,
  184. AllowRebase: true,
  185. AllowRebaseMerge: true,
  186. AllowSquash: true,
  187. AllowManualMerge: false,
  188. AutodetectManualMerge: false,
  189. },
  190. wantFixed: true,
  191. },
  192. {
  193. name: "broken - 1.15",
  194. bs: `&{%!s(bool=false) %!s(bool=true) %!s(bool=true) %!s(bool=true) %!s(bool=true) %!s(bool=false) %!s(bool=false) %!s(bool=false) merge}`,
  195. expected: repo_model.PullRequestsConfig{
  196. AllowMerge: true,
  197. AllowRebase: true,
  198. AllowRebaseMerge: true,
  199. AllowSquash: true,
  200. DefaultMergeStyle: repo_model.MergeStyleMerge,
  201. },
  202. wantFixed: true,
  203. },
  204. }
  205. for _, tt := range tests {
  206. t.Run(tt.name, func(t *testing.T) {
  207. cfg := &repo_model.PullRequestsConfig{}
  208. gotFixed, err := fixPullRequestsConfig16961([]byte(tt.bs), cfg)
  209. if (err != nil) != tt.wantErr {
  210. t.Errorf("fixPullRequestsConfig_16961() error = %v, wantErr %v", err, tt.wantErr)
  211. return
  212. }
  213. if gotFixed != tt.wantFixed {
  214. t.Errorf("fixPullRequestsConfig_16961() = %v, want %v", gotFixed, tt.wantFixed)
  215. }
  216. assert.EqualValues(t, &tt.expected, cfg)
  217. })
  218. }
  219. }
  220. func Test_fixIssuesConfig_16961(t *testing.T) {
  221. tests := []struct {
  222. name string
  223. bs string
  224. expected repo_model.IssuesConfig
  225. wantFixed bool
  226. wantErr bool
  227. }{
  228. {
  229. name: "normal",
  230. bs: `{"EnableTimetracker":true,"AllowOnlyContributorsToTrackTime":true,"EnableDependencies":true}`,
  231. expected: repo_model.IssuesConfig{
  232. EnableTimetracker: true,
  233. AllowOnlyContributorsToTrackTime: true,
  234. EnableDependencies: true,
  235. },
  236. },
  237. {
  238. name: "broken",
  239. bs: `&{%!s(bool=true) %!s(bool=true) %!s(bool=true)}`,
  240. expected: repo_model.IssuesConfig{
  241. EnableTimetracker: true,
  242. AllowOnlyContributorsToTrackTime: true,
  243. EnableDependencies: true,
  244. },
  245. wantFixed: true,
  246. },
  247. }
  248. for _, tt := range tests {
  249. t.Run(tt.name, func(t *testing.T) {
  250. cfg := &repo_model.IssuesConfig{}
  251. gotFixed, err := fixIssuesConfig16961([]byte(tt.bs), cfg)
  252. if (err != nil) != tt.wantErr {
  253. t.Errorf("fixIssuesConfig_16961() error = %v, wantErr %v", err, tt.wantErr)
  254. return
  255. }
  256. if gotFixed != tt.wantFixed {
  257. t.Errorf("fixIssuesConfig_16961() = %v, want %v", gotFixed, tt.wantFixed)
  258. }
  259. assert.EqualValues(t, &tt.expected, cfg)
  260. })
  261. }
  262. }