1// Copyright 2015 go-swagger maintainers 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15package errors 16 17import ( 18 "errors" 19 "fmt" 20 "testing" 21 22 "github.com/stretchr/testify/assert" 23) 24 25func TestSchemaErrors(t *testing.T) { 26 err := InvalidType("confirmed", "query", "boolean", nil) 27 assert.Error(t, err) 28 assert.EqualValues(t, InvalidTypeCode, err.Code()) 29 assert.Equal(t, "confirmed in query must be of type boolean", err.Error()) 30 31 err = InvalidType("confirmed", "", "boolean", nil) 32 assert.Error(t, err) 33 assert.EqualValues(t, InvalidTypeCode, err.Code()) 34 assert.Equal(t, "confirmed must be of type boolean", err.Error()) 35 36 err = InvalidType("confirmed", "query", "boolean", "hello") 37 assert.Error(t, err) 38 assert.EqualValues(t, InvalidTypeCode, err.Code()) 39 assert.Equal(t, "confirmed in query must be of type boolean: \"hello\"", err.Error()) 40 41 err = InvalidType("confirmed", "query", "boolean", errors.New("hello")) 42 assert.Error(t, err) 43 assert.EqualValues(t, InvalidTypeCode, err.Code()) 44 assert.Equal(t, "confirmed in query must be of type boolean, because: hello", err.Error()) 45 46 err = InvalidType("confirmed", "", "boolean", "hello") 47 assert.Error(t, err) 48 assert.EqualValues(t, InvalidTypeCode, err.Code()) 49 assert.Equal(t, "confirmed must be of type boolean: \"hello\"", err.Error()) 50 51 err = InvalidType("confirmed", "", "boolean", errors.New("hello")) 52 assert.Error(t, err) 53 assert.EqualValues(t, InvalidTypeCode, err.Code()) 54 assert.Equal(t, "confirmed must be of type boolean, because: hello", err.Error()) 55 56 err = DuplicateItems("uniques", "query") 57 assert.Error(t, err) 58 assert.EqualValues(t, UniqueFailCode, err.Code()) 59 assert.Equal(t, "uniques in query shouldn't contain duplicates", err.Error()) 60 61 err = DuplicateItems("uniques", "") 62 assert.Error(t, err) 63 assert.EqualValues(t, UniqueFailCode, err.Code()) 64 assert.Equal(t, "uniques shouldn't contain duplicates", err.Error()) 65 66 err = TooManyItems("something", "query", 5, 6) 67 assert.Error(t, err) 68 assert.EqualValues(t, MaxItemsFailCode, err.Code()) 69 assert.Equal(t, "something in query should have at most 5 items", err.Error()) 70 assert.Equal(t, 6, err.Value) 71 72 err = TooManyItems("something", "", 5, 6) 73 assert.Error(t, err) 74 assert.EqualValues(t, MaxItemsFailCode, err.Code()) 75 assert.Equal(t, "something should have at most 5 items", err.Error()) 76 assert.Equal(t, 6, err.Value) 77 78 err = TooFewItems("something", "", 5, 4) 79 assert.Error(t, err) 80 assert.EqualValues(t, MinItemsFailCode, err.Code()) 81 assert.Equal(t, "something should have at least 5 items", err.Error()) 82 assert.Equal(t, 4, err.Value) 83 84 err = ExceedsMaximumInt("something", "query", 5, false, 6) 85 assert.Error(t, err) 86 assert.EqualValues(t, MaxFailCode, err.Code()) 87 assert.Equal(t, "something in query should be less than or equal to 5", err.Error()) 88 assert.Equal(t, 6, err.Value) 89 90 err = ExceedsMaximumInt("something", "", 5, false, 6) 91 assert.Error(t, err) 92 assert.EqualValues(t, MaxFailCode, err.Code()) 93 assert.Equal(t, "something should be less than or equal to 5", err.Error()) 94 assert.Equal(t, 6, err.Value) 95 96 err = ExceedsMaximumInt("something", "query", 5, true, 6) 97 assert.Error(t, err) 98 assert.EqualValues(t, MaxFailCode, err.Code()) 99 assert.Equal(t, "something in query should be less than 5", err.Error()) 100 assert.Equal(t, 6, err.Value) 101 102 err = ExceedsMaximumInt("something", "", 5, true, 6) 103 assert.Error(t, err) 104 assert.EqualValues(t, MaxFailCode, err.Code()) 105 assert.Equal(t, "something should be less than 5", err.Error()) 106 assert.Equal(t, 6, err.Value) 107 108 err = ExceedsMaximumUint("something", "query", 5, false, 6) 109 assert.Error(t, err) 110 assert.EqualValues(t, MaxFailCode, err.Code()) 111 assert.Equal(t, "something in query should be less than or equal to 5", err.Error()) 112 assert.Equal(t, 6, err.Value) 113 114 err = ExceedsMaximumUint("something", "", 5, false, 6) 115 assert.Error(t, err) 116 assert.EqualValues(t, MaxFailCode, err.Code()) 117 assert.Equal(t, "something should be less than or equal to 5", err.Error()) 118 assert.Equal(t, 6, err.Value) 119 120 err = ExceedsMaximumUint("something", "query", 5, true, 6) 121 assert.Error(t, err) 122 assert.EqualValues(t, MaxFailCode, err.Code()) 123 assert.Equal(t, "something in query should be less than 5", err.Error()) 124 assert.Equal(t, 6, err.Value) 125 126 err = ExceedsMaximumUint("something", "", 5, true, 6) 127 assert.Error(t, err) 128 assert.EqualValues(t, MaxFailCode, err.Code()) 129 assert.Equal(t, "something should be less than 5", err.Error()) 130 assert.Equal(t, 6, err.Value) 131 132 err = ExceedsMaximum("something", "query", 5, false, 6) 133 assert.Error(t, err) 134 assert.EqualValues(t, MaxFailCode, err.Code()) 135 assert.Equal(t, "something in query should be less than or equal to 5", err.Error()) 136 assert.Equal(t, 6, err.Value) 137 138 err = ExceedsMaximum("something", "", 5, false, 6) 139 assert.Error(t, err) 140 assert.EqualValues(t, MaxFailCode, err.Code()) 141 assert.Equal(t, "something should be less than or equal to 5", err.Error()) 142 assert.Equal(t, 6, err.Value) 143 144 err = ExceedsMaximum("something", "query", 5, true, 6) 145 assert.Error(t, err) 146 assert.EqualValues(t, MaxFailCode, err.Code()) 147 assert.Equal(t, "something in query should be less than 5", err.Error()) 148 assert.Equal(t, 6, err.Value) 149 150 err = ExceedsMaximum("something", "", 5, true, 6) 151 assert.Error(t, err) 152 assert.EqualValues(t, MaxFailCode, err.Code()) 153 assert.Equal(t, "something should be less than 5", err.Error()) 154 assert.Equal(t, 6, err.Value) 155 156 err = ExceedsMinimumInt("something", "query", 5, false, 4) 157 assert.Error(t, err) 158 assert.EqualValues(t, MinFailCode, err.Code()) 159 assert.Equal(t, "something in query should be greater than or equal to 5", err.Error()) 160 assert.Equal(t, 4, err.Value) 161 162 err = ExceedsMinimumInt("something", "", 5, false, 4) 163 assert.Error(t, err) 164 assert.EqualValues(t, MinFailCode, err.Code()) 165 assert.Equal(t, "something should be greater than or equal to 5", err.Error()) 166 assert.Equal(t, 4, err.Value) 167 168 err = ExceedsMinimumInt("something", "query", 5, true, 4) 169 assert.Error(t, err) 170 assert.EqualValues(t, MinFailCode, err.Code()) 171 assert.Equal(t, "something in query should be greater than 5", err.Error()) 172 assert.Equal(t, 4, err.Value) 173 174 err = ExceedsMinimumInt("something", "", 5, true, 4) 175 assert.Error(t, err) 176 assert.EqualValues(t, MinFailCode, err.Code()) 177 assert.Equal(t, "something should be greater than 5", err.Error()) 178 assert.Equal(t, 4, err.Value) 179 180 err = ExceedsMinimumUint("something", "query", 5, false, 4) 181 assert.Error(t, err) 182 assert.EqualValues(t, MinFailCode, err.Code()) 183 assert.Equal(t, "something in query should be greater than or equal to 5", err.Error()) 184 assert.Equal(t, 4, err.Value) 185 186 err = ExceedsMinimumUint("something", "", 5, false, 4) 187 assert.Error(t, err) 188 assert.EqualValues(t, MinFailCode, err.Code()) 189 assert.Equal(t, "something should be greater than or equal to 5", err.Error()) 190 assert.Equal(t, 4, err.Value) 191 192 err = ExceedsMinimumUint("something", "query", 5, true, 4) 193 assert.Error(t, err) 194 assert.EqualValues(t, MinFailCode, err.Code()) 195 assert.Equal(t, "something in query should be greater than 5", err.Error()) 196 assert.Equal(t, 4, err.Value) 197 198 err = ExceedsMinimumUint("something", "", 5, true, 4) 199 assert.Error(t, err) 200 assert.EqualValues(t, MinFailCode, err.Code()) 201 assert.Equal(t, "something should be greater than 5", err.Error()) 202 assert.Equal(t, 4, err.Value) 203 204 err = ExceedsMinimum("something", "query", 5, false, 4) 205 assert.Error(t, err) 206 assert.EqualValues(t, MinFailCode, err.Code()) 207 assert.Equal(t, "something in query should be greater than or equal to 5", err.Error()) 208 assert.Equal(t, 4, err.Value) 209 210 err = ExceedsMinimum("something", "", 5, false, 4) 211 assert.Error(t, err) 212 assert.EqualValues(t, MinFailCode, err.Code()) 213 assert.Equal(t, "something should be greater than or equal to 5", err.Error()) 214 assert.Equal(t, 4, err.Value) 215 216 err = ExceedsMinimum("something", "query", 5, true, 4) 217 assert.Error(t, err) 218 assert.EqualValues(t, MinFailCode, err.Code()) 219 assert.Equal(t, "something in query should be greater than 5", err.Error()) 220 assert.Equal(t, 4, err.Value) 221 222 err = ExceedsMinimum("something", "", 5, true, 4) 223 assert.Error(t, err) 224 assert.EqualValues(t, MinFailCode, err.Code()) 225 assert.Equal(t, "something should be greater than 5", err.Error()) 226 assert.Equal(t, 4, err.Value) 227 228 err = NotMultipleOf("something", "query", 5, 1) 229 assert.Error(t, err) 230 assert.EqualValues(t, MultipleOfFailCode, err.Code()) 231 assert.Equal(t, "something in query should be a multiple of 5", err.Error()) 232 assert.Equal(t, 1, err.Value) 233 234 err = NotMultipleOf("something", "query", float64(5), float64(1)) 235 assert.Error(t, err) 236 assert.EqualValues(t, MultipleOfFailCode, err.Code()) 237 assert.Equal(t, "something in query should be a multiple of 5", err.Error()) 238 assert.Equal(t, float64(1), err.Value) 239 240 err = NotMultipleOf("something", "query", uint64(5), uint64(1)) 241 assert.Error(t, err) 242 assert.EqualValues(t, MultipleOfFailCode, err.Code()) 243 assert.Equal(t, "something in query should be a multiple of 5", err.Error()) 244 assert.Equal(t, uint64(1), err.Value) 245 246 err = NotMultipleOf("something", "", 5, 1) 247 assert.Error(t, err) 248 assert.EqualValues(t, MultipleOfFailCode, err.Code()) 249 assert.Equal(t, "something should be a multiple of 5", err.Error()) 250 assert.Equal(t, 1, err.Value) 251 252 err = EnumFail("something", "query", "yada", []interface{}{"hello", "world"}) 253 assert.Error(t, err) 254 assert.EqualValues(t, EnumFailCode, err.Code()) 255 assert.Equal(t, "something in query should be one of [hello world]", err.Error()) 256 assert.Equal(t, "yada", err.Value) 257 258 err = EnumFail("something", "", "yada", []interface{}{"hello", "world"}) 259 assert.Error(t, err) 260 assert.EqualValues(t, EnumFailCode, err.Code()) 261 assert.Equal(t, "something should be one of [hello world]", err.Error()) 262 assert.Equal(t, "yada", err.Value) 263 264 err = Required("something", "query", nil) 265 assert.Error(t, err) 266 assert.EqualValues(t, RequiredFailCode, err.Code()) 267 assert.Equal(t, "something in query is required", err.Error()) 268 assert.Equal(t, nil, err.Value) 269 270 err = Required("something", "", nil) 271 assert.Error(t, err) 272 assert.EqualValues(t, RequiredFailCode, err.Code()) 273 assert.Equal(t, "something is required", err.Error()) 274 assert.Equal(t, nil, err.Value) 275 276 err = ReadOnly("something", "query", nil) 277 assert.Error(t, err) 278 assert.EqualValues(t, ReadOnlyFailCode, err.Code()) 279 assert.Equal(t, "something in query is readOnly", err.Error()) 280 assert.Equal(t, nil, err.Value) 281 282 err = ReadOnly("something", "", nil) 283 assert.Error(t, err) 284 assert.EqualValues(t, ReadOnlyFailCode, err.Code()) 285 assert.Equal(t, "something is readOnly", err.Error()) 286 assert.Equal(t, nil, err.Value) 287 288 err = TooLong("something", "query", 5, "abcdef") 289 assert.Error(t, err) 290 assert.EqualValues(t, TooLongFailCode, err.Code()) 291 assert.Equal(t, "something in query should be at most 5 chars long", err.Error()) 292 assert.Equal(t, "abcdef", err.Value) 293 294 err = TooLong("something", "", 5, "abcdef") 295 assert.Error(t, err) 296 assert.EqualValues(t, TooLongFailCode, err.Code()) 297 assert.Equal(t, "something should be at most 5 chars long", err.Error()) 298 assert.Equal(t, "abcdef", err.Value) 299 300 err = TooShort("something", "query", 5, "a") 301 assert.Error(t, err) 302 assert.EqualValues(t, TooShortFailCode, err.Code()) 303 assert.Equal(t, "something in query should be at least 5 chars long", err.Error()) 304 assert.Equal(t, "a", err.Value) 305 306 err = TooShort("something", "", 5, "a") 307 assert.Error(t, err) 308 assert.EqualValues(t, TooShortFailCode, err.Code()) 309 assert.Equal(t, "something should be at least 5 chars long", err.Error()) 310 assert.Equal(t, "a", err.Value) 311 312 err = FailedPattern("something", "query", "\\d+", "a") 313 assert.Error(t, err) 314 assert.EqualValues(t, PatternFailCode, err.Code()) 315 assert.Equal(t, "something in query should match '\\d+'", err.Error()) 316 assert.Equal(t, "a", err.Value) 317 318 err = FailedPattern("something", "", "\\d+", "a") 319 assert.Error(t, err) 320 assert.EqualValues(t, PatternFailCode, err.Code()) 321 assert.Equal(t, "something should match '\\d+'", err.Error()) 322 assert.Equal(t, "a", err.Value) 323 324 err = InvalidTypeName("something") 325 assert.Error(t, err) 326 assert.EqualValues(t, InvalidTypeCode, err.Code()) 327 assert.Equal(t, "something is an invalid type name", err.Error()) 328 329 err = AdditionalItemsNotAllowed("something", "query") 330 assert.Error(t, err) 331 assert.EqualValues(t, NoAdditionalItemsCode, err.Code()) 332 assert.Equal(t, "something in query can't have additional items", err.Error()) 333 334 err = AdditionalItemsNotAllowed("something", "") 335 assert.Error(t, err) 336 assert.EqualValues(t, NoAdditionalItemsCode, err.Code()) 337 assert.Equal(t, "something can't have additional items", err.Error()) 338 339 err = InvalidCollectionFormat("something", "query", "yada") 340 assert.Error(t, err) 341 assert.EqualValues(t, InvalidTypeCode, err.Code()) 342 assert.Equal(t, "the collection format \"yada\" is not supported for the query param \"something\"", err.Error()) 343 344 err2 := CompositeValidationError() 345 assert.Error(t, err2) 346 assert.EqualValues(t, CompositeErrorCode, err2.Code()) 347 assert.Equal(t, "validation failure list", err2.Error()) 348 349 err2 = CompositeValidationError(fmt.Errorf("first error"), fmt.Errorf("second error")) 350 assert.Error(t, err2) 351 assert.EqualValues(t, CompositeErrorCode, err2.Code()) 352 assert.Equal(t, "validation failure list:\nfirst error\nsecond error", err2.Error()) 353 354 // func MultipleOfMustBePositive(name, in string, factor interface{}) *Validation { 355 err = MultipleOfMustBePositive("path", "body", float64(-10)) 356 assert.Error(t, err) 357 assert.EqualValues(t, MultipleOfMustBePositiveCode, err.Code()) 358 assert.Equal(t, `factor MultipleOf declared for path must be positive: -10`, err.Error()) 359 assert.Equal(t, float64(-10), err.Value) 360 361 err = MultipleOfMustBePositive("path", "body", int64(-10)) 362 assert.Error(t, err) 363 assert.EqualValues(t, MultipleOfMustBePositiveCode, err.Code()) 364 assert.Equal(t, `factor MultipleOf declared for path must be positive: -10`, err.Error()) 365 assert.Equal(t, int64(-10), err.Value) 366 367 // func PropertyNotAllowed(name, in, key string) *Validation { 368 err = PropertyNotAllowed("path", "body", "key") 369 assert.Error(t, err) 370 assert.EqualValues(t, UnallowedPropertyCode, err.Code()) 371 // unallowedProperty = "%s.%s in %s is a forbidden property" 372 assert.Equal(t, "path.key in body is a forbidden property", err.Error()) 373 374 err = PropertyNotAllowed("path", "", "key") 375 assert.Error(t, err) 376 assert.EqualValues(t, UnallowedPropertyCode, err.Code()) 377 // unallowedPropertyNoIn = "%s.%s is a forbidden property" 378 assert.Equal(t, "path.key is a forbidden property", err.Error()) 379 380 // func TooManyProperties(name, in string, n int64) *Validation { 381 err = TooManyProperties("path", "body", 10) 382 assert.Error(t, err) 383 assert.EqualValues(t, TooManyPropertiesCode, err.Code()) 384 // tooManyProperties = "%s in %s should have at most %d properties" 385 assert.Equal(t, "path in body should have at most 10 properties", err.Error()) 386 387 err = TooManyProperties("path", "", 10) 388 assert.Error(t, err) 389 assert.EqualValues(t, TooManyPropertiesCode, err.Code()) 390 // tooManyPropertiesNoIn = "%s should have at most %d properties" 391 assert.Equal(t, "path should have at most 10 properties", err.Error()) 392 393 err = TooFewProperties("path", "body", 10) 394 // func TooFewProperties(name, in string, n int64) *Validation { 395 assert.Error(t, err) 396 assert.EqualValues(t, TooFewPropertiesCode, err.Code()) 397 // tooFewProperties = "%s in %s should have at least %d properties" 398 assert.Equal(t, "path in body should have at least 10 properties", err.Error()) 399 400 err = TooFewProperties("path", "", 10) 401 // func TooFewProperties(name, in string, n int64) *Validation { 402 assert.Error(t, err) 403 assert.EqualValues(t, TooFewPropertiesCode, err.Code()) 404 // tooFewPropertiesNoIn = "%s should have at least %d properties" 405 assert.Equal(t, "path should have at least 10 properties", err.Error()) 406 407 // func FailedAllPatternProperties(name, in, key string) *Validation { 408 err = FailedAllPatternProperties("path", "body", "key") 409 assert.Error(t, err) 410 assert.EqualValues(t, FailedAllPatternPropsCode, err.Code()) 411 // failedAllPatternProps = "%s.%s in %s failed all pattern properties" 412 assert.Equal(t, "path.key in body failed all pattern properties", err.Error()) 413 414 err = FailedAllPatternProperties("path", "", "key") 415 assert.Error(t, err) 416 assert.EqualValues(t, FailedAllPatternPropsCode, err.Code()) 417 // failedAllPatternPropsNoIn = "%s.%s failed all pattern properties" 418 assert.Equal(t, "path.key failed all pattern properties", err.Error()) 419} 420