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